freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

How2heap--UnsortedbinAttack(by glibc-2.23)
FreeBuf-329171 2021-07-21 20:12:23 159512

UnsortedbinAttack.c 源码

image-20201217204056644

调试分析

1.首先定义了一个变量,存放在栈上

image-20201217205947124

2.然后malloc一个0x400大小的chunk p

image-20201217210145616

3.为了防止在下一次执行free的时候 chunk p 被consolidate合并到 top chunk 中,这里再申请一个0x500大小的chunk。

image-20201217210418350

4.然后将chunk p free掉,

image-20201217210609449

注意这里,

chunk p被放到了unsortedbin中,且fd和bk指针都指向main_arena+88

然后我们改写chunk p的bk指针。

image-20201217212346175

需要将chunk p的bk指针改写为栈上变量的低2个"单位"(8字节)的地址,

这是因为在调用malloc整理unsortedbin的时候遵循“LILO”(Last In Last Out)的原则,会将av分配区的unsortedbin的bk指向的最后一个chunk作为victim,victim的bk指向的chunk作为bck,会从unsortedbin链表尾部开始处理,对chunk做完处理就将chunk移出链表,也就是源码中红框中的代码

这也是unsortedbin attack的来源,

因为在这里并未对bck做足够的检查就将bck的fd指针指向main_arena数组,将会造成main_arena地址的泄露,而main_arena是在libc上的,就会进而导致libc地址的泄露等一系列问题。

image-20201217213155760

查看bins,

unsortedbin的bk指针指向刚刚free掉的 chunk p ,p的bk指针指向栈上的假的chunk头。

image-20201217214506261

5.进行malloc

image-20201217213839076

查看bins

image-20201217214737118

可以看到 chunk p 被移出unsortedbin,现在unsortedbin的bk指针指向了栈地址,并且通过源码可知这个栈地址指向的地方被当做bck的时候会将 bck->fd 指向bins上的unsortedbin,也即这里的 main_arena+88,也就是将 main_arena+88 写到stack_var了 。

image-20201217215401106

以上就是unsortedbin attack的全部内容。

# 网络安全技术 # 漏洞复现 # 极氪安全 # 极氪学院 # 极氪安全学院
本文为 FreeBuf-329171 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
FreeBuf-329171 LV.5
这家伙太懒了,还未填写个人描述!
  • 27 文章数
  • 7 关注者
CVE-2020-13942 Apache Unomi 远程代码执行漏洞复现
2021-08-31
CVE-2020-11651CVE-2020-11652 SaltStack认证绕过漏洞、目录遍历漏洞
2021-08-30
CVE-2020-1938 Tomcat AJP漏洞复现
2021-08-27
文章目录