文章总结: 本文介绍InjectSetConsole进程注入PoC,核心创新在于绕过WriteProcessMemory,通过重定向目标进程stdin管道将shellcode作为输入数据注入,再结合线程劫持执行。项目演示了打破EDR默认监控叙事的技术思路,对防御方理解数据通道检测有参考价值。文章明确技术边界,强调仅限授权测试与防御研究。
综合评分: 85
文章分类: 渗透测试,红队,内网渗透
InjectSetConsole:不用 WriteProcessMemory 的注入
原创
枪火
枪火
赛博57库
2026年9月29日 05:00
广东
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
| |
| — |
| 攻防技术 · Console Named-Piped Inject InjectSetConsole:把 shellcode 当 stdin 喂进目标进程的注入 PoC——思路、特色与边界 进程注入 · 无 WriteProcessMemory · 控制台管道 · 线程劫持 · EDR 绕过 · PoC |
| |
| — |
| 📌 本文怎么读 一个 9 月底新开的注入 PoC,star 不多却值得讲——因为它演示了不用 WriteProcessMemory 也能注入:把 shellcode 当标准输入喂进一个控制台程序,再用线程劫持去执行。 |
01 · 这个项目是什么
InjectSetConsole 是一个进程注入的概念验证(PoC),作者是安全研究者 Two Seven One Three,C++ 编写,2026 年 9 月 27 日开源,仓库 72 star、无 License,配套一篇题为《EDR Evasion: Process Injection Without WriteProcessMemory》的博客。
它的核心主张就一句话:
| |
| — |
| 不用 VirtualAllocEx 和 WriteProcessMemory 这两个被 EDR 盯得最死的 API,实现远程代码注入并执行。 |
在注入手法里,”分配远程内存 → 写入 shellcode → 跳转执行”是几乎所有人的默认三连,而 WriteProcessMemory 又是这三连里最显眼的那一步。这个项目的价值不在”它多难”,而在于它演示了换一条通道的可能性。安全媒体把这套手法命名为 console named-pipe injection,对应 MITRE ATT&CK 的 T1055(进程注入)。
02 · 核心功能与特色
这个项目不大,但有几个特色值得记:
一、把 shellcode 当”输入”喂进去,而不是”写”进去。 它通过重定向目标进程的标准输入(stdin)管道,把字节当数据送进目标内存——绕开了 WriteProcessMemory 这一步。这是整套手法的核心。
二、目标刻意选择交互式控制台程序。 用法里的示例是 netsh.exe、nslookup.exe 这类会读 stdin 的 Windows 自带程序。好处是:shellcode 寄居在一个本身可信、几乎不会引起怀疑的进程里。
三、用 25 字节标记定位 shellcode。 因为你不知道 shellcode 落到了目标进程堆里的哪个地址,它先在 payload 前面塞一段固定标记,再去目标内存里搜这个标记,搜到就知道代码在哪。
四、靠”劫持线程 RIP”来执行。 找到 shellcode 后,改内存保护为可执行,再把目标主线程的指令指针(RIP)直接改到 shellcode 上——线程一恢复,就顺着新地址跑下去。
五、细节上为”喂进去”做了适配。 内置的示例 shellcode 避开了 0x0a(换行)、0x0d(回车)、0x1a(Ctrl-Z)这三个字节——因为它们是 stdin 的”行结束/文件结束”信号,不避开就会被截断。
| |
| — |
| 用法(README) ────────────────────────────────────────────── InjectSetConsole.exe <executable_path> 示例:InjectSetConsole.exe C:\Windows\System32\netsh.exe 换 shellcode:替换 rawData 数组 0x19 偏移之后的字节 改免杀特征:改那段 25 字节的搜索标记 ────────────────────────────────────────────── |
03 · 大致是怎么实现的
把上面的特色串起来,一次完整执行是四步:
| |
| — |
| ① 启动目标 CreateProcess 拉起 netsh.exe 这类控制台程序, 把它的 stdin/stdout 重定向到匿名管道 ② 喂 shellcode 往 stdin 管道写一段"标记 + shellcode", 字节以输入数据的形式进入目标进程内存(不写内存) ③ 定位 ReadProcessMemory 扫描目标私有内存,找到标记 → 得到地址 ④ 劫持执行 VirtualProtectEx 把该区域改成可执行; SuspendThread + NtSetContextThread 把主线程 RIP 改到 shellcode,恢复线程即执行 ────────────────────────────────────────────── |
这里必须说一句诚实的边界:它只是没用 WriteProcessMemory 和 VirtualAllocEx,不是什么都不用。第三步用了 ReadProcessMemory,第四步用了 VirtualProtectEx 和 NtSetContextThread——这些同样是 EDR 会挂钩、会告警的 API。作者的标题是 “without WriteProcessMemory”,而不是 “undetectable”(不可检测)。
它的意义在于:把监测者默认的”分配—写入—执行”这条固定叙事打破,逼着检测从”盯某个 API”转向”盯这条数据通道”——对防守方来说,理解这一点,比拿到这个 PoC 本身更有用。这也是为什么它值得单独讲,而不是又一个”免杀工具盘点”。
#
参考与延伸:
• 项目仓库:https://github.com/TwoSevenOneT/InjectSetConsole
• 作者博客《EDR Evasion: Process Injection Without WriteProcessMemory》:https://www.zerosalarium.com/2026/09/edr-evasion-process-injection-without-WriteProcessMemory.html
• Cyber Press 报道:https://cyberpress.org/new-windows-process-injection-technique-evades-edr-monitoring/
| |
| — |
| ⚠ 免责声明与边界 ① 本文只讲机制与检测视角,不含 shellcode 字节、可照做的植入命令或针对某款 EDR 的绕过细节;文中 API 与参数仅作检测特征说明。② 相关技术仅限授权测试与防御研究,禁止用于任何未授权目标。③ 项目描述基于 2026-09-27 的源码实读(作者当日刚发布),实现可能变化。④ 文中不构成对任何组织、产品或安全厂商的评价。 |
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:赛博57库 枪火
枪火《InjectSetConsole:不用 WriteProcessMemory 的注入》