Ranveerrrrr/Blind-XSSTrace
GitHub: Ranveerrrrr/Blind-XSSTrace
自托管的 Blind XSS 回调接收与管理面板,支持无限标记路径和 Discord 告警,解决多注入点测试时难以溯源的问题。
Stars: 0 | Forks: 0
# XSSTrace





一个自托管的 Blind XSS payload 服务器和命中控制面板,支持无限标记、页面分组、过滤、导入/导出以及 Discord 警报。
## 为什么会有这个项目
当你的回调工具无法提供足够的控制力时,Blind XSS 测试就会变得非常痛苦。
- Burp Collaborator 和 Interactsh 的 payload 是临时的,或者与某个会话绑定。
- 公共回调服务可能会过期、轮换或消失。
- 经典的 XSS Hunter 风格设置很有用,但许多工作流最终都只使用一个通用的 payload 路径。
- 在测试许多字段、表单、endpoint 和角色时,你需要确切地知道哪个 payload 被触发了。
这个项目为你提供了自己的域名和无限的标记路径:
```
```
`/x/` 之后的所有内容都是标记。当它被触发时,控制面板会显示它的来源、触发时间,并能发送 Discord 通知。
## 你将获得什么
- Payload 路由:`/x/`
- 受密码保护的控制面板:`/dashboard`
- 无限标记,例如 `/x/firstname-profile`、`/x/admin-note`、`/x/support-ticket`
- 按页面 URL/站点进行命中分组
- 带有针对页面 URL、IP 和标记建议的过滤器
- 三点页面操作:复制 URL、剪切、粘贴到另一个页面组、删除
- 以 `callbacks.jsonl` 格式完整下载命中记录
- 导入旧的命中日志并追加它们,而不会替换当前的命中记录
- 可选的每次命中的 Discord webhook 通知
- 可选的 Render 持久磁盘支持,以便日志在重新部署后依然存在
## 推荐架构
使用专用的子域名:
```
Main website: https://yourdomain.com
Blind XSS server: https://xss.yourdomain.com
Dashboard: https://xss.yourdomain.com/dashboard
Payload base: https://xss.yourdomain.com/x/
```
不要将其放在静态主机后面。它需要一个后端,因为它要接收和存储回调。
## 第 1 步:Fork 此仓库
1. 在 GitHub 上打开此仓库。
2. 点击 **Fork**。
3. 选择你的 GitHub 账户。
4. 如果你不想让控制面板代码/配置可见,请将你的 fork 保持**私有**。
你的 fork 将如下所示:
```
https://github.com/YOUR_USERNAME/XSSTrace
```
## 第 2 步:克隆你的 Fork
仅在本地机器上克隆你的 fork,以便你可以更改示例值并推送你自己的副本。
```
git clone https://github.com/YOUR_USERNAME/XSSTrace.git
cd XSSTrace
```
## 第 3 步:替换示例域名
在仓库中搜索:
```
xss.example.com
example.com
```
在文档或示例中将它们替换为你真实的回调子域名,例如:
```
xss.yourdomain.com
```
重要的运行时值仍然是 Render 环境变量:
```
PUBLIC_BASE_URL=https://xss.yourdomain.com
```
## 第 4 步:推送你的 Fork
在你完成 README/示例更改后:
```
git add .
git commit -m "Configure dashboard for my domain"
git push origin main
```
## 第 5 步:创建 Render Web Service
1. 打开 [Render](https://render.com/)。
2. 点击 **New +**。
3. 选择 **Web Service**。
4. 连接 GitHub。
5. 选择你 fork 的仓库:
```
YOUR_USERNAME/XSSTrace
```
6. 使用以下设置:
```
Environment: Node
Build Command: npm install
Start Command: npm start
```
7. 创建服务。
Render 会为你提供一个临时域名,例如:
```
https://xsstrace.onrender.com
```
如果你有自己的域名,请不要将其作为最终的 payload 域名。仅在你连接自定义子域名之前使用它。
## 第 6 步:设置 Render 环境变量
在 Render 中:
```
Your Web Service -> Environment
```
添加:
| 键 | 示例 | 必需 |
| --- | --- | --- |
| `PUBLIC_BASE_URL` | `https://xss.yourdomain.com` | 是 |
| `DASHBOARD_USERNAME` | `bugatsec` | 是 |
| `DASHBOARD_PASSWORD` | `use-a-strong-password` | 是 |
| `SESSION_SECRET` | `long-random-string` | 强烈推荐 |
| `DISCORD_WEBHOOK_URL` | `https://discord.com/api/webhooks/...` | 可选 |
| `DATA_DIR` | `/var/data` | 推荐配合持久磁盘使用 |
然后重新部署服务。
你可以检查控制面板身份验证是否已配置:
```
https://xss.yourdomain.com/health
```
预期结果:
```
{
"authConfigured": true
}
```
`/health` endpoint 不会泄露你的用户名、密码、会话密钥或 Discord webhook URL。
## 第 7 步:添加持久存储
如果你希望命中记录一直保留直到你删除它们,请添加一个持久磁盘。
在 Render 中:
1. 打开你的 Web Service。
2. 转到 **Disks**。
3. 添加一个磁盘。
4. 挂载路径:
```
/var/data
```
5. 设置此环境变量:
```
DATA_DIR=/var/data
```
命中日志将存储在:
```
/var/data/callbacks.jsonl
```
如果没有持久磁盘,Render 可能会在重新部署/重启时丢失日志。
## 第 8 步:连接你的子域名
使用如下子域名:
```
xss.yourdomain.com
```
在 Render 中:
1. 打开你的 Web Service。
2. 转到 **Settings -> Custom Domains**。
3. 添加:
```
xss.yourdomain.com
```
4. Render 将显示一个 DNS 目标。
在你的域名/DNS 控制面板中:
1. 创建 Render 要求你创建的 DNS 记录。
2. 通常这是一个 CNAME 记录,从:
```
xss
```
指向类似于:
```
your-service.onrender.com
```
3. 等待 DNS 传播。
4. 等待 Render TLS/HTTPS 生效。
最后,确保 Render 具有:
```
PUBLIC_BASE_URL=https://xss.yourdomain.com
```
更改后重新部署。
## 第 9 步:添加 Discord 警报
在 Discord 中:
1. 打开你想要接收警报的频道。
2. 转到 **Edit Channel -> Integrations -> Webhooks**。
3. 创建一个 webhook。
4. 复制 webhook URL。
5. 在 Render 中添加它:
```
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
```
每次新的命中都会发送一个 Discord 嵌入消息,包含:
- 标记
- 来源类型
- IP
- 页面 URL/referrer
- 用户代理
## 第 10 步:使用控制面板
打开:
```
https://xss.yourdomain.com/dashboard
```
使用以下凭据登录:
```
DASHBOARD_USERNAME
DASHBOARD_PASSWORD
```
控制面板为你提供:
- Payload 构建器
- 命中总数
- 唯一标记数
- 页面 URL 分组
- 针对页面 URL、IP 和标记的过滤器
- 三点页面操作
- 导入/导出控件
- 清除所有日志
## Payload 用法
基本标记:
```
```
每个注入点的标记:
```
```
控制面板按页面 URL 对命中进行分组,并显示标记,以便你确切知道哪个 payload 被触发了。
Payload 构建器还可以生成双脚本变体:
```
"/>
```
这在某些损坏的 HTML 上下文中很有帮助,因为在这些上下文中,一种注入形式的闭合/转义方式与另一种不同。
## 记录了什么
应用会记录:
- 标记
- 页面 URL 或 referrer
- IP 地址
- 用户代理
- 浏览器语言
- 视口
- 来源类型
- 时间戳
来源类型:
| 来源 | 含义 |
| --- | --- |
| `payload-load` | `/x/` JavaScript URL 被请求 |
| `script` | JavaScript 已执行并回调 |
| `image` | 图片后备方案被触发 |
| `import` | 命中来自导入的日志 |
## 控制面板页面操作
每个页面组都有一个三点菜单:
- `Copy URL` 复制页面 URL/组键
- `Cut` 选中该页面组中的所有命中记录
- `Paste here` 将剪切的命中记录移动到另一个页面组
- `Delete` 删除该页面组的所有命中记录
## 导入和导出
`Download hits` 下载当前的后端日志:
```
callbacks.jsonl
```
选择导入文件会在浏览器中预览它。它不会立即上传。
`Add to logs` 将预览的命中记录追加到后端日志中。它不会替换现有的命中记录。
支持的导入格式:
- JSONL,每行一条命中记录
- JSON 数组
- 带有 `callbacks` 数组的 JSON 对象
## 安全说明
- 如果你不想让别人检查你的设置,请将你的 fork 保持私有。
- 不要提交真实的控制面板密码。
- 不要提交 Discord webhook URL。
- 不要提交 `callbacks.jsonl`。
- 为你的回调域名使用 HTTPS。
- 使用强 `SESSION_SECRET`。
- 如果你不小心暴露了凭据,请立即轮换它们。
## 许可证
参见 [LICENSE](LICENSE)。
## 为什么会有这个项目
当你的回调工具无法提供足够的控制力时,Blind XSS 测试就会变得非常痛苦。
- Burp Collaborator 和 Interactsh 的 payload 是临时的,或者与某个会话绑定。
- 公共回调服务可能会过期、轮换或消失。
- 经典的 XSS Hunter 风格设置很有用,但许多工作流最终都只使用一个通用的 payload 路径。
- 在测试许多字段、表单、endpoint 和角色时,你需要确切地知道哪个 payload 被触发了。
这个项目为你提供了自己的域名和无限的标记路径:
```
```
`/x/` 之后的所有内容都是标记。当它被触发时,控制面板会显示它的来源、触发时间,并能发送 Discord 通知。
## 你将获得什么
- Payload 路由:`/x/标签:Blind XSS, Bug Bounty, CISA项目, Discord通知, Express, GNU通用公共许可证, Go语言工具, meg, MITM代理, Node.js, Payload生成, Render, Self-hosted, Web安全测试, XSS, 云部署, 代码生成, 仪表盘, 信息安全, 可自定义解析器, 回调服务, 开源安全工具, 攻击负载, 数据展示, 渗透测试工具, 漏洞情报, 红队, 网络安全, 自定义脚本, 逆向工程平台, 隐私保护