pilat/tripflare

GitHub: pilat/tripflare

一个用 Go 编写的自托管 DNS + HTTPS 蜜罐工具,通过生成唯一链接来实时监控和记录谁解析或访问了该链接。

Stars: 1 | Forks: 0

# Tripflare [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/pilat/tripflare/actions/workflows/ci.yml) ![Go](https://img.shields.io/badge/go-1.26%2B-00ADD8?logo=go&logoColor=white) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) **一个自托管的 DNS + HTTPS 蜜罐,封装在单个 Go 二进制文件中。生成一个唯一链接,将其投放到任何地方,然后实时观察究竟是谁——以及什么东西——触发了它。** Tripflare 是你自己域名的权威 DNS 服务器*和* HTTPS 服务器。它生成的每个链接——`abc123.yourdomain.com`——都是一个绊线(tripwire)。任何尝试解析该域名或请求该 URL 的行为,Tripflare 都会将其记录下来(源 IP、DNS 解析器、EDNS 客户端子网、HTTP 方法、标头、User-Agent、路径和查询负载),并将其流式传输到实时仪表板。 ## 实际运行效果 每个事件发生的瞬间都会出现在仪表板上——包含地理信息增强和完整的请求细节。 ![Tripflare dashboard catching a Telegram link-preview bot: interleaved DNS and HTTP events, each with source IP, ASN, org, and full request detail](https://raw.githubusercontent.com/pilat/tripflare/main/docs/capture.png) *一个被捕获到展开链接的 Telegram 链接预览机器人。这两个阶段来自**不同的** Telegram IP——DNS 查询来自 `91.x.x.x`,HTTP 请求来自 `149.x.x.x`——每个都带有其 ASN 和组织标签。这种分离正是 DNS 盲区的跟踪像素永远无法向你展示的。* ## 工作原理 单个二进制文件运行三个并发子系统——DNS 服务器、HTTP 服务器和 ACME 管理器——它们共享一个持久化到 SQLite 的内存注册表。 ``` flowchart TD main["main.go
config · signals · flush loop"] dns["DNS Server
:53 UDP + TCP"] http["HTTP Server
:80 + :443"] acme["ACME Manager
(lego)"] reg["Registry
in-memory · pub/sub · ring buffer"] chal["Challenge Store"] db[("SQLite
WAL")] ui["Web UI + SSE
/tripflare"] main --> dns & http & acme dns -->|record DNS events| reg http -->|record HTTP events| reg http --- ui ui -->|live stream| reg reg <-->|flush / load| db acme -->|write TXT token| chal dns -->|read TXT token| chal acme -.->|GetCertificate| http ``` 当目标触碰链接时,揭示过程分为两个独立阶段进行: ``` sequenceDiagram autonumber participant T as Target participant D as DNS :53 participant H as HTTPS :443 participant R as Registry participant U as Dashboard Note over T,D: Stage 1 — DNS resolution T->>D: A? abc123.yourdomain.com D->>R: RecordDNS(slug, resolver IP, EDNS subnet) D-->>T: A 203.0.113.1, TTL=1 R-->>U: live event (SSE) Note over T,H: Stage 2 — HTTP fetch T->>H: TLS handshake, wildcard cert T->>H: GET /img.png?payload=x H->>R: RecordHTTP(slug, client IP, UA, headers, query) H-->>T: 1x1 transparent pixel R-->>U: live event (SSE) ``` 这两个阶段可能来自不同的参与方。DNS 查询通常来自目标的解析器(ISP 或企业 DNS,有时离目标很远);HTTP 请求则来自实际的客户端。同时观察到两者正是其核心意义所在。 **一些刻意的设计细节:** - **每个响应的 `TTL=1`**,这样解析器就不会缓存——重复访问也会持续显示。 - **通过 Let's Encrypt DNS-01 获取通配符 TLS** 证书(`*.yourdomain.com`),因此链接是干净的 HTTPS,没有证书警告。同一个二进制文件会通过 DNS 应答 ACME 挑战。 - **非跟踪像素响应包含 Open Graph meta 标签**,因此将链接粘贴到即时通讯软件中会触发其预览机器人进行解析和请求——从而实现另一次捕获。 - **跟踪像素**(`.png` / `.gif` / `.jpg`)返回 1x1 透明图像,非常适合用于电子邮件和文档。 - **针对每个 `IP:slug` 的速率限制**以及每个 slug 的**环形缓冲区**,可防止嘈杂或恶意的访问者耗尽内存。 有关完整的组件分解、schema 和生命周期,请参阅 [`ARCHITECTURE.md`](ARCHITECTURE.md)。
HTTP API (所有路由均在 :443 端口,需要 Basic Auth) | 方法 | 路径 | 描述 | |--------|------|-------------| | `POST` | `/api/slugs` | 创建跟踪器(属于经过身份验证的用户) | | `GET` | `/api/slugs` | 列出你的跟踪器及事件计数 | | `GET` | `/api/slugs/{slug}` | 跟踪器详情 + 完整事件历史(包含 GeoIP 信息) | | `DELETE` | `/api/slugs/{slug}` | 删除跟踪器及其事件 | | `GET` | `/api/slugs/{slug}/events` | Server-Sent Events 流——先重放历史记录,然后实时更新 | | `DELETE` | `/api/slugs/{slug}/events` | 清除跟踪器的事件 | | `GET` | `/tripflare` | 内置 Web UI | 整个接口非常易于通过 curl 调用: ``` # 创建 tracker curl -u admin:pass -X POST https://yourdomain.com/api/slugs # 实时观看 events curl -u admin:pass -N https://yourdomain.com/api/slugs/abc123/events ```
## 你可以用它做什么 每个用例都对应 Tripflare 捕获的一种信号: - **带外 (OOB) 交互测试** —— Burp Collaborator / interactsh 的个人自托管替代方案。将盲 SSRF、XXE、命令注入或 SQLi 的回调指向一个唯一的 slug,即可观察源端的解析和连接情况。 - **蜜罐令牌 (Canary tokens)** —— 在敏感文档、代码仓库或共享内容中嵌入像素或链接。如果它被打开或泄露,你将获取 IP、解析器和 User-Agent。 - **邮件打开跟踪** —— 将跟踪像素放入你自己的营销活动中;当邮件客户端加载图片时它就会触发。 - **DNS 泄露与出口测试** —— 验证主机、VPN 或网络是否确实泄露了 DNS 或通过 HTTP 发出连接请求。 - **捕获链接预览机器人** —— 将链接粘贴到 Telegram、Slack 或 Discord 中,观察展开机器人如何解析和请求(包含 Open Graph 标签)。 - **CTF 与安全培训** —— 无需每次都搭建基础设施即可实现 OOB 挑战和数据外发通道。 ## 快速开始 **你需要准备:** 一个可以设置 NS 记录的已注册域名,以及一台具有静态公网 IP 且 `53`(UDP+TCP)、`80
标签:DNS服务器, EVTX分析, Go, HTTPS, Ruby工具, Web仪表盘, 日志审计, 溯源监控, 网络测绘, 蜜标, 蜜罐, 证书利用, 配置审计