Skip to content

Blog

IoM进阶系列(1) PELoader&RDI的TLS之殇

从一个崩溃开始的 PE Loader 救赎之旅

本系列文章虽然叫做IoM进阶系列, 但实际与IoM关系不大,只是在开发IoM的过程中遇到的。进阶系列均为解决前无古人的问题、创新等, 本文将从最常用的技术 PE-Loader开始。

如果读者已经熟知PE加载, 那么本文的内容将不会有非常大的革新, 但各位阅读完本文可能也会看到一些新鲜玩意, 聊以慰籍 :)

今年8月, 我们推出了下一代 C2 计划 -- Internal of Malice , 旨在实现一套 post-exploit 基础设施, 在implant的语言选用中, 我们尝试了这两年最火热的红队语言:Rust, 也因为这个选择,在实现过程中遇到了和解决了非常多有意思的问题。

在推出stager 版本之后, 交流群的一位同学贴出了Writing a PE Loader for the Xbox in 2024 这篇文章, 用一种非常粗暴的方式解决了 Rust在使用MSVC编译时引入了TLS(thread-local storage) , 而只常见的PELoader 简单调用 tls callback 无法正常加载 PE 文件的问题, 遂成文。

IoM v0.0.3 真正意义上的红队基础设施与C2框架

时间线

在 8 月份, 我们发布了 IoM 的蓝图和 demo, 制定了一个宏伟的计划, 当时的 IoM 和绝大多数开源 C2 一样, 充满 bug, 功能简单.

在 9 月份, 我们发布了修复了大量 bug, 以及对 client/server/listener 的大重构 v0.0.2 版本. 还添加了基于 lua 的插件系统, 半自动化编译.

而现在, 我们终于可以发布 v0.0.3 ,这也意味着 IoM 已经具备在实战中使用的价值, 以及满足绝大多数实战场景的能力. 在某些 OPSEC 或者拓展能力上, IoM 更是目前最强大的 C2 框架.

v0.0.3 的 IoM 至少已经具备了 80%以上的 Cobaltstrike 的能力, 90%的 Sliver 的能力, 比起 Nighthawk 和 BRC4 更是不遑多让,并且有非常多独有的功能. 当然在成熟程度与很多细节上我们缺少时间去打磨, 但可用的版本也称得上是开源世界中最强大的 C2 之一了.

超轻量的nuclei引擎 neutron

repo: https://github.com/chainreactors/neutron

背景

在projectdiscovery融第一轮前, 我就发现了这个充满未来的项目nuclei.

nuclei提供了极简的poc配置, 强大的DSL引擎以及目前**地表最庞大的poc社区**, 最重要的是, 它是完全开源的.

随着nuclei 更新到v3, 也面临了工具进化路上必定会经过的"软件膨胀", nuclei从v1到v3 引入了非常的庞大的功能

  • js/python作为  Internal DSL 引擎
  • headless浏览器
  • file, dns, offline,websoket,ssl,whois等新的协议引擎
  • OAST Out-of-band服务
  • ...

也引入了更多的bug, nuclei-templates的已经有一部分的poc随着引擎更新出现了bug.

而nuclei的绝大数poc, 都用不着这些功能, 其中最常用的协议是http与socket, 最常用的功能是通过yaml配置一个或者几个数据包, 然后校验返回值. 甚至OAST都不是必备的功能, 因为极少漏洞强依赖这个功能, 都能找到时延, 回显等方式更高效与准确的判断.

IoM v0.0.2 the real beginning

v0.0.2 是一次巨大的改动. 在仓促发布v0.0.1后, 我们同时对server/client/listener/implant都开始了重构. 重构工程的代码量接近20000行, 是原本代码的一半.

好在这么大规模的改动, 也带来了各方面能力的提升.

目录爆破与指纹识别的最佳实践

本文提到的工具: https://github.com/chainreactors/spray

前言

之前在 为什么我们需要收集URL? 发布了两个工具, 分别是用来爆破目录的spray 和用来被动收集url的 urlfounder.

urlfounder在发布后基本没进行更新, 但是spray经过一年的进化, 迎来了v1.0.0版本. 定位也从一个目录爆破工具变成了全面全能的WEB信息收集工具.

它拥有目前最强大的性能与最智能的算法. 几乎能覆盖dirsearch + httpx + 指纹识别(fingers) + fuff的全部功能.

指纹的终极解决方案

repo: https://github.com/chainreactors/fingers

Intro

指纹库当前较为热门的领域之一, 因为每个ASM(攻击面管理)都需要一个强大的指纹库, 而各家大厂都在做自己的ASM.. 指纹库与漏洞库作为安全知识库的两个重要组成部分, 也是各家基建必定会关注的领域.

对于这个问题, 大多数厂商选择堆人力解决, 招几个运营, 给他们定上几个月几百条指纹的KPI, 一两年时间就能把市面上的大多数产品囊括, 看起来似乎对大厂来说也不是个难以解决的问题. 但事实真的如此么?

地表最强大的凭证爆破工具

Overview

zombie是gogo设计之初就诞生的一个计划,中间写了好几版(早期版本@PassingFoam),搁置了快一年。正巧有几个朋友一直在关注这个工具,才把它从内部使用的工具变成基本可用的工具。虽然拖了一年多,但它绝对是目前地球上最强大的爆破工具。

zombie 从1.0就public了。但是因为bug、协议支持、用户体验、兼容性等各种问题,一直不愿写一篇介绍它的文章。至今寥寥几十个star,估计都是长期关注的小伙伴。

到前几天发布的v1.1.6,zombie应该勉强可以出来见人了。与gogo以及之前的其他工具同样,zombie也将是一个长期维护的项目,也是chainreactors工件库中新的一环。

为什么我们需要收集url

Next Generation HTTP Dir/File Fuzz Tool: https://github.com/chainreactors/spray

Fast passive URL enumeration Tool: https://github.com/chainreactors/urlfounder

为什么我们需要收集URL?

这个问题似乎在最基础的安全岗面试中都不太可能出现,但如果要彻底理解dir/file fuzz,我们需要先搞清楚这个问题。

如果你每次都会拿起自己珍藏的字典对着目标一顿轰炸,那么可能需要好好想想目录里的user.php 真的有用么。 如果有用,用爬虫不是更好么?

在红蓝对抗中,资产的最小单位为一个 service,这个 service可以理解为部署在某一台服务器上的服务。例如一个论坛服务,里面可能有 user.php,forum.php 等等一堆目录。但对攻击者来说,只需要知道指纹,这些目录都可以从源码中直接找到, 并不需要爆破。而如果是不开源的应用, 这些目录可以通过爬虫去发现。这样的一个页面 在红蓝对抗,甚至大部分渗透测试中都不需要通过爆破去发现。

只有闭源的, 且管理页面做了特殊保护的站点, 才需要通过目录爆破去发现admin目录. user.php, register.php在html与js中就能被爬虫爬到.