leftp/pipes
GitHub: leftp/pipes
位置无关代理枚举与连通性测试Shellcode,解决在严格代理限制下探测可用出口的问题。
Stars: 27 | Forks: 4
# 位置无关代理枚举器外壳代码 (PIPES)
PIC shellcode 从 Windows 注册表、PAC 文件和 Firefox 首选项中枚举代理配置,然后通过 Microsoft 终结点使用多种用户代理测试出站连接。
终结点包括:
* http://www.msftconnecttest.com/connecttest.txt
* http://www.msftncsi.com/ncsi.txt
某些环境配置了严格的代理设置,或根据目标使用不同的代理,这使得出站连接更加困难。在这些情况下,此枚举非常有用。
它可以作为其他 shellcode 的构建模块——或者转换为 Crystal Palace 模块(待办事项)。
## 流程
1. **枚举代理**(按顺序):
- 从注册表获取 IE/系统代理
- 从注册表策略获取 Chrome 代理
- 从所有用户配置文件的 `prefs.js` 获取 Firefox 代理
- PAC 文件 URL(IE、Chrome、Firefox)
- 直接连接回退(Edge、Chrome、Firefox 用户代理)
2. **测试出站连接**:对每种代理配置:
- 尝试通过 Microsoft 终结点连接
- 使用合适的用户代理进行测试
- 报告成功或失败
- 如果设置 `STOP_ON_FIRST=1` 且成功,则提前停止
3. **报告**:如果设置了 `REPORT_URL`,则发送 base64 编码的 GET 请求到配置的 URL
## 构建
### 前置条件
- MinGW-w64 工具链(`x86_64-w64-mingw32-g++`)
- NASM 汇编器
- Python 3 及 `pefile` 库
### 构建命令
```
make x64 # Build x64 shellcode
make x64 STOP_ON_FIRST=1 # Stop on first successful egress
make x64 REPORT_URL="https://example.com/report" # Report successful egress
make clean # Clean build artifacts
```
**配置选项**:
- `STOP_ON_FIRST=1`:首次成功出站后停止(默认:0)
- `REPORT_URL="url"`:成功时发送 base64 编码的 GET 请求
- 格式:`https://domain.com/report?data=`
- 数据:代理、用户代理、成功状态
**调试输出**(启用 `DEBUG` 标志):可通过 WinDbg、DebugView 或 Process Monitor 查看。
## 参考
- **[Stardust](https://github.com/Cracked5pider/Stardust)** - 现代 32/64 位位置无关植入模板
- **[Secure_Stager/Stardust](https://github.com/Octoberfest7/Secure_Stager)** - PIC shellcode 基础、PEB 遍历、函数解析
- **[LetMeOut](https://github.com/EncodeGroup/AggressiveProxy/tree/master/LetMeOutSharp)** - 多年前用 C# 编写的代理枚举和 PAC 解析逻辑
- **[PIC-Library](https://github.com/silentwarble/PIC-Library)** - PIC 实用函数
## 致谢
Lefteris (Lefty) Panos @ 2025
标签:C/C++, Crystal Palace, Egress Testing, Firefox 首选项, MinGW-w64, msftconnecttest, msftncsi, NASM, PAC 文件, PIPES, REPORT_URL, Shellcode, STOP_ON_FIRST, Windows 代理枚举, Windows 联网, x64, 事务性I/O, 云资产清单, 代理配置, 位置无关代码, 取证, 客户端加密, 技术调研, 数据展示, 数据泄露防护, 注册表, 红队, 网络探测, 调试输出, 逆向工具, 逆向工程, 隐蔽通信