sensepost/pipetap
GitHub: sensepost/pipetap
一款 Windows 命名管道流量分析与中间人测试工具,支持实时捕获、拦截修改和重放管道通信。
Stars: 300 | Forks: 20
# pipetap
[](https://x.com/leonjza)
[](https://github.com/sensepost/pipetap/actions/workflows/build.yml)
`pipetap` 帮助你观察、拦截和重放 [Windows Named Pipes](https://learn.microsoft.com/en-us/windows/win32/ipc/named-pipes) 上的流量。
- **流量捕获** – 基于 Windows API hook 记录命名管道相关流量。
- **十六进制/文本查看器** – 检查原始 payload(支持 UTF-8 或 UTF-16 解码)。
- **即时编辑** – 拦截请求/响应,修改字节,并在目标看到之前注入替换内容。
- **客户端** – 向命名管道发送任意流量。
- **远程客户端** – 在目标进程*内部*打开远程命名管道,实现无缝的双向测试。
- **多目标** – 在一个 GUI 会话中管理和切换多个 PID。

## 组件
- **支持 DLL** – 在目标进程内部 hook 命名管道 API 并流出遥测/事件数据。
- **GUI** – 连接到一个或多个 PID 的桌面应用程序,可视化流量,允许你过滤、编辑、重放或代理管道。
- **远程代理** – 从 GUI 在目标进程*内部*打开命名管道,并在不修改目标代码的情况下发送/接收数据。
## 开发
关于该项目结构的更多信息,以及控制通道协议图,可以在 [development](./DEVELOPMENT.md) 中找到。
## 二进制文件
如果你不想自己构建,可以在 releases 标签页获取二进制文件。
## 构建
快速入门(如果你已经设置了 `VCPKG_ROOT`)。
```
$preset = "x64-release"
cmake --preset $preset
cmake --build --preset $preset --target pipetap-gui pipetap-dll
```
要求:
- Windows 10/11
- Visual Studio 2022 (MSVC)
- [vcpkg](https://github.com/microsoft/vcpkg) 已引导并集成到 Visual Studio
通过 PowerShell 构建:
- 打开一个 "Developer PowerShell for VS 2022" 终端会话,并 `cd` 到你下载此源代码的目录。
- 如果你还没有将 `VCPKG_ROOT` 环境变量设置为你的 `vcpkg` 路径:
- 运行 `$env:VCPKG_ROOT="C:\Users\\Downloads\vcpkg"`(替换为你的路径)。
- 选择要构建的预设。运行 `$preset = "x64-release"` 进行 64 位发布构建。其他预设包括:`x86-debug`、`x86-release`、`x64-debug`、`x64-release`、`arm64-debug` 和 `arm64-release`。
- 运行:`cmake --preset $preset`。
- 运行:`cmake --build --preset $preset --target pipetap-gui pipetap-dll pipe-test-client pipe-test-server`
通过 Visual Studio 2022 构建:
- 确保你在名为 `VCPKG_ROOT` 的全局环境变量中设置了 `vcpkg` 的路径。如果没有,在提升的 cmd.exe 会话中运行 `setx VCPKG_ROOT "C:\src\vcpkg" /M`。
然后:
- 打开 Visual Studio(社区版即可)。
- 在打开对话框中,选择 "Open a local folder",然后选择 `pipetap` 根目录。
- 给 Visual Studio 一些时间来读取项目配置,然后选择你想要的构建目标(可能是 release 版本)。
- 最后,浏览到 Build -> Build All。
产物:
- `pipetap-dll.dll` – 注入到目标进程中
- `pipetap-gui.exe` – 桌面前端
一些辅助工具:
- `pipetap-test-server.exe` - 用于测试的小型命名管道服务器
- `pipetap-test-client.exe` - 用于测试的小型命名管道客户端
## 使用
当你首次运行 `pipetap-gui.exe` 时,你会进入 Proxy 工具。这是你用来观察、修改和从捕获的命名管道通信中提取数据的主要视图。要在流量日志中获取一些数据,你需要先注入支持 DLL。
### injector
通过导航到 Injector 工具,选择你的目标进程,并点击 Inject Support DLL 来注入支持 DLL。你也可以双击目标进程来注入 DLL。如果你的目标在提升的上下文中运行,pipetap 也应该被提升 —— 如果需要,请以管理员身份重新启动。查看 Injector Status 日志以确定注入是否成功。
### proxy
注入 DLL 后,导航回 Proxy 工具。应该会打开一个连接到支持 DLL 的新标签页。如果你没有选择 Auto-connect proxy,你需要打开一个新标签页(最后注入的 PID 在创建新标签页时也会是一个选项)并连接到它。如果一切正常,命名管道通信应该会出现在你的 Traffic Log 中。如果没有,请与你的目标交互以尝试生成流量。
你可以选择性地启用请求/响应编辑器。这将阻塞目标进程中的通信,允许你编辑 payload(作为 UTF-8/UTF-16 字符串或十六进制),Burp 风格。
### replay
Replay 工具是一个命名管道客户端,你可以在其中连接到命名管道并开始与其交互。你可以手动连接,或者在 proxy traffic log 或 pipelist 中右键单击并 Send to Replay 以设置一个预填充的 replay 标签页。
与 proxy 非常相似,你可以发送和接收数据,这些数据将被记录到 traffic 标签页。
### pipelist
Pipelist 工具是一个简单的命名管道枚举工具,用于显示命名管道服务器及其绑定的进程(以及其他信息)。
## 调试
支持 DLL 将日志行写入 `%appdata%\pipetap\injected.log`。
## Python SDK
支持 DLL 的功能之一是它充当 TCP 到命名管道的代理。注入后,它会打开一个 TCP 端口(默认:61337,如果可用),允许任意外部客户端连接并从支持 DLL 内部发起命名管道连接。如果你的目标命名管道需要更高级的数据处理,这会特别方便。
Python SDK 位于 [pipetap-python](./pipetap-python/) 目录中,也发布在 PyPI 上。
### sdk 用法
获取源代码或使用 `pip install pipetap` 安装 python 包。在 `pipetap` 可用后,你可以连接到远程命名管道(从已加载支持 DLL 的进程中),使用:
```
from pipetap import PipeTap
tap = PipeTap()
tap.connect("pipetap.test", "10.0.0.1")
tap.send("a string\n")
tap.send(b"\xdd\x00\x00\xdd")
print(tap.recv())
```
## 许可证
`pipetap` 采用 [GNU General Public v3 License](https://www.gnu.org/licenses/gpl-3.0.en.html) 授权。超出此许可证范围的权限可能可在 [http://sensepost.com/contact/](http://sensepost.com/contact/) 获取。
- **流量捕获** – 基于 Windows API hook 记录命名管道相关流量。
- **十六进制/文本查看器** – 检查原始 payload(支持 UTF-8 或 UTF-16 解码)。
- **即时编辑** – 拦截请求/响应,修改字节,并在目标看到之前注入替换内容。
- **客户端** – 向命名管道发送任意流量。
- **远程客户端** – 在目标进程*内部*打开远程命名管道,实现无缝的双向测试。
- **多目标** – 在一个 GUI 会话中管理和切换多个 PID。

## 组件
- **支持 DLL** – 在目标进程内部 hook 命名管道 API 并流出遥测/事件数据。
- **GUI** – 连接到一个或多个 PID 的桌面应用程序,可视化流量,允许你过滤、编辑、重放或代理管道。
- **远程代理** – 从 GUI 在目标进程*内部*打开命名管道,并在不修改目标代码的情况下发送/接收数据。
## 开发
关于该项目结构的更多信息,以及控制通道协议图,可以在 [development](./DEVELOPMENT.md) 中找到。
## 二进制文件
如果你不想自己构建,可以在 releases 标签页获取二进制文件。
## 构建
快速入门(如果你已经设置了 `VCPKG_ROOT`)。
```
$preset = "x64-release"
cmake --preset $preset
cmake --build --preset $preset --target pipetap-gui pipetap-dll
```
要求:
- Windows 10/11
- Visual Studio 2022 (MSVC)
- [vcpkg](https://github.com/microsoft/vcpkg) 已引导并集成到 Visual Studio
通过 PowerShell 构建:
- 打开一个 "Developer PowerShell for VS 2022" 终端会话,并 `cd` 到你下载此源代码的目录。
- 如果你还没有将 `VCPKG_ROOT` 环境变量设置为你的 `vcpkg` 路径:
- 运行 `$env:VCPKG_ROOT="C:\Users\标签:API Hooking, Bash脚本, C++, Conpot, Elastic Stack, GUI工具, IPC通信, Named Pipes, SensePost, SSH蜜罐, Windows内核, Windows安全, 中间人攻击, 二进制分析, 云安全运维, 代理工具, 命名管道, 安全调试, 数据包编辑, 数据擦除, 流量拦截, 流量重放, 白帽子, 端点可见性, 进程注入, 逆向工具