加入收藏 | 设为首页 | 会员中心 | 我要投稿 桂林站长网 (https://www.0773zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

BIND服务器中潜藏了15年的RCE漏洞

发布时间:2021-03-25 16:50:04 所属栏目:动态 来源:互联网
导读:漏洞的可利用性高度依赖于glibc的版本,而下面的解释是基于Ubuntu18.04和glibc2.27的,后者支持tcache。 首先,我们要确定这个溢出漏洞所能控制的内容: 在der_get_oid()中分配的易受攻击的缓冲区的大小和内容是可控的。顺便说一下,当当前请求完成后,该缓



漏洞的可利用性高度依赖于glibc的版本,而下面的解释是基于Ubuntu18.04和glibc2.27的,后者支持tcache。

首先,我们要确定这个溢出漏洞所能控制的内容:

  • 在der_get_oid()中分配的易受攻击的缓冲区的大小和内容是可控的。顺便说一下,当当前请求完成后,该缓冲区将被释放。
  • decode_MechTypeList()中有一个while循环,用于重复执行der_get_oid()函数,并且循环次数也是可控的。

有了这两点,我们就可以轻松地操纵堆了。为了准备堆,我们可以耗尽任意大小的tcache bins,并在请求完成后重新对其进行填充。同时,重新填充的分块(chunk)在内存中可以是连续的。这使得内存布局相当有利于通过缓冲区溢出发动攻击。

实现任意写原语

在这个阶段,通过滥用tcache空闲列表可轻松实现任意写原语。

触发一个4字节的溢出来扩展下一个空闲的chunk大小。

在下一个请求中,在受损的chunk中分配内存空间。当请求结束时,它将被移动到新的tcache bin中。

用新的大小再次分配受损的chunk。这时,受损的chunk将与下一个空闲的chunk发生重叠,然后,用一个任意的值覆盖其freelist。

从“中毒的”tcache freelist上分配内存空间。它将返回一个任意地址。

泄漏内存地址

默认情况下,会为BIND启用所有Linux缓解措施。因此,我们首先要搞定ASLR,这意味着我们需要找到一种从内存中泄漏地址的方法。一个可能实现内存泄漏的机会,是利用code_NegTokenArg()函数。该函数用于将响应消息编码到一个缓冲区中,并

(编辑:桂林站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!