A在栈上的地址是ebp-0x14,即ebp-0x14=stack=+212>: lea esp,[ecx-0x4]
0x08048606 +215>: ret 我们就拿到shell了
我们前面留下了一个问题:
被删除的chunk为B,修改B的fd,bk,修改后会引发什么漏洞
先举个简单的例子看看
设我们修改了B->fd=!!!!,B->bk=@@@@
在调用unlink(B)时,
BK=P->bk;
FD=P->fd;
FD->bk=BK;
BK->fd=FD;
对应执行的流程是这样子的
BK=*(B+4)=@@@@ //B->bk前还有B->fd,占4字节
FD=*(B)=!!!!
*(FD+4)=*(!!!!+4)=BK=@@@@
*(BK)=*(@@@@)=FD=!!!!
通过红色字体的关系,我们知道,修改了B的fd,bk之后,就可以在进行覆盖操作
这里我们设修改了B->bk=[ebp-4],B->fd=&shellcode+4
则进过unlink(B)之后会有
*(&shellcode+4+4)=[ebp-4] //这个结果无影响
* (ebp-4)=&shellcode+4 //实现了* (ebp-4)=&shellcode+4,因为*(ebp-4)覆给ecx,则ecx就被覆盖成了&shellcode+4,然后就可以拿到shell了
接下来具体看看怎么布局
我们知道
shellcode地址+4=heap+0x8+0x4=heap+12,来修改B->fd
ebp-4=stack+0x14-0x4=stack+16,来修改B->bk
A的buf大小是8字节,写了shellcode地址花了4字节,因为最小单位为16字节,所以还剩16-4=12字节需要填充,我们填充12个A
综上,得到了如下的布局

shellcode的地址是什么呢

而heap和stack的地址每次运行时都会打印出来的

综上,写出exp:

上传到服务器

执行得到shell

值得注意的是,本题的unlink利用是比较古老的方式了,现在的glibc已经加入了很多新的保护措施
包括:
Double Free检测
该机制不允许释放一个已经处于free状态的chunk。因此,当攻击者将second chunk的size设置为-4的时候,就意味着该size的PREV_INUSE位为0,也就是说second chunk之前的first chunk(我们需要free的chunk)已经处于free状态,那么这时候再free(first)的话,就会报出double free错误。相关代码如下:
#!c

next size非法检测
该机制检测next size是否在8到当前arena的整个系统内存大小之间。因此当检测到next size为-4的时候,就会报出invalid next size错误。相关代码如下:

双链表冲突检测
该机制会在执行unlink操作的时候检测链表中前一个chunk的fd与后一个chunk的bk是否都指向当前需要unlink的chunk。这样攻击者就无法替换second chunk的fd与fd了。相关代码如下:

也出现很多新的技巧的关于unlink的CTF题目,如:
HITCON 2014 stkof
0CTF 2016 – Zerostorage
0CTF 2015 'freenote'
HITCON CTF 2016: Secret Holder
强网杯2018 silent2
这些题目有兴趣的师傅们可以自行去pwn
参考:
1.https://paper.seebug.org/papers/Archive/drops2/Linux%E5%A0%86%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E%E5%88%A9%E7%94%A8%E4%B9%8Bunlink.html
2.https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit.html
3. https://paper.seebug.org/papers/Archive/refs/2015-1029-yangkun-Gold-Mining-CTF.pdf
4. https://cysecguide.blogspot.com/2017/10/pwnablekr-unlink-solution.html
5.cft wiki
推荐实验:
ARM漏洞利用技术五--堆溢出:
http://www.hetianlab.com/expc.do?ec=ECIDf4f4-3f86-44b4-bd4c-e1c88520adde
(通过本实验了解堆溢出,包括intra-chunk和inter-chunk两种类型,分别掌握其特点。)
声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关!