ciscn_2019_es_1
checksec一下,保护全开

add
show函数,可以输出我们想要的地址然后算偏移

delete函数,没有把指针置零,存在UAF漏洞

过程虽然理清,但仍然有点懵逼。
先创三个堆
1 | add(0x410,"AAAA") |
libc是2.27版本,就会有tachebin机制,free的大小大于0x400则可以绕过这个机制,而他的fd和bk指针都会指向main_arena+96这个地址,show函数把它输出出来并算出偏移量并算出free_hook的地址和system函数的地址。

1 | show(0) |
然后用double free,free两次堆2,然后堆2的如下,以及bin


bin指针链0x000055ac61f846c0这个地址记录了它本身
这里也许是tachebin的机制,再次malloc时,会先创建一个堆记录下一个堆的地址,而下一个堆正是我们add函数的过程,在0x000055ac61f846c0这个地址写入的是free_hook的地址,但是它依然还是在bin链中的,这就很不解,明明已经被使用了,这时bin链的指针指到了free_hook,我们再malloc

这时bin链的指针指到了free_hook,我们再malloc两次就能把free_hook函数的地址内容改成system函数的地址,而都同add函数一样正常mollc,参数bin/sh放在堆3


exp
1 | from pwn import* |
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~