返回介绍

关于 BeaconEye 里的一点小 bug

发布于 2024-06-01 22:17:40 字数 1777 浏览 0 评论 0 收藏 0

BeaconEye这个工具很好通过检查程序heap中的特征来查看CS Payload效果也是非常好,但是这个工具有一个小bug在某些时候会无法查找到CS Payload

这个bug出现的主要是因为如下原因

这是它收集heap块的算法看似好像没有啥问题,PEB里找到heap数组和数组个数后就开始循环读取。但是作者没有考虑到另一种情况作者认为每个heap都是只有一个heap段

我们来从windbg查看

问题就出现在这里,很明显这里某个堆中存在两个heap Segment,如果按照作者那样我们就只能收集到3个内存块,如果只是收集到三个内存块还好,怕就怕在如果CS Payload调用malloc分配内存时刚好使用了这第二个segment没有使用第一个那就会造成BeaconEye漏掉了这块内存也就无法扫到特征

我们来试着修复这个问题,先查看_HEAP结构体

这是一个双向链表连接着所有的heap Segment,所以应该去遍历这个链表(忽视这个代码的垃圾吧) 原先的遍历代码有问题这里我直接引用D_infinite师傅的代码了

然后原先扫不到的现在就能扫到了

同时D_infinite师傅也发现一个新的问题之前堆块并未遍历导致如果批量分配大量的heap会产生新的绕过,这块并不好搞因为堆的机制比较复杂而且部分地方heap结构是加密的最好的办法是扫全内存,因为heap实现本身就微软内部的事

D_infinite师傅的文章:https://mp.weixin.qq.com/s/_gSPWVb1b-xuvhU6ynmw0Q

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文