d3xm0s/RedScout

GitHub: d3xm0s/RedScout

RedScout 是一个用 C++17 编写的单一二进制红队侦察工具,集成了端口扫描、服务指纹、TLS 证书采集、Web 内容发现和 WAF 检测等功能,用于一次性完成攻击面映射。

Stars: 0 | Forks: 0

# redscout [![ci](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](https://github.com/d3xm0s/RedScout/actions/workflows/ci.yml) [![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) ![C++17](https://img.shields.io/badge/C%2B%2B-17-00599C.svg) *[English](#english) | [Русский](#русский)* ![redscout 实战演示](https://raw.githubusercontent.com/d3xm0s/RedScout/main/RedScout.png) ## English 一个单一的、几乎无依赖的 C++17 二进制文件,用于 Red Team 侦察和 外部攻击面映射。它可以一次性扩展目标,扫描端口 (TCP 或 UDP),指纹识别服务,收集 TLS 证书,并暴力破解 Web 内容(HTTP 和 HTTPS,通过池化的 keep-alive 连接进行递归) - 所有这些都共享一个 DNS 缓存和一个速率调节器。只需要 libc、pthreads 和 可选的 OpenSSL。将其指向一个主机,它就会返回一个统一的 JSON 图谱,展示 暴露的内容。 作者:d3xm0s。采用 MIT 许可证(见 `LICENSE`) - 它完全归你所有,可自由发布。 ### 独有特性 - **单一二进制文件,几乎零依赖。** 只需 libc 和 pthreads,外加可选的 OpenSSL。可以直接扔到跳板机或没有包管理器的 精简容器中运行。 - **单一流水线,单一缓存。** 主机扩展、端口扫描、banner 抓取和 内容发现复用相同的缓存 DNS 答案和相同的 连接速率预算,因此不会重复解析,也不会发生拥塞。 - **池化 keep-alive 发现。** 每个发现 worker 都会在多个请求中保持单个 HTTP/1.1 连接(包括 TLS 会话)活跃,从而摊销 握手成本,而不是为每个路径都付出代价。 - **指纹和证书收集。** Web 端口会暴露其 title、Server 和 X-Powered-By;HTTPS 端口还会提供证书的 subject、issuer、 过期时间和所有 SAN - 这是发现更多主机名的快速方法。 - **WAF 检测和覆盖率分析。** `--waf` 会发送一个良性和一个恶意 请求,并指出目标前方的 WAF(Cloudflare、Akamai、Imperva、F5、Sucuri、 ModSecurity 等),或者标记出通用的拦截。`--waf-bypass` 更进一步, 映射出过滤器实际拦截了哪些 payload 类别(XSS、SQLi、traversal、command injection)和 编码 - 这是一份用于授权评估的覆盖率报告,而不是直接提供 exploit。它会在遇到 429/503 时进行自适应退避(backoff)的自我节流,因此 WAF 自身的速率限制不会扭曲映射结果。 - **支持递归、识别 soft-404 和身份验证。** 发现过程会递归进入找到的 目录,针对 wildcard 服务器进行自动校准,fuzz 扩展名,并 通过 `-H` 携带你的 cookie 或 token。 - **可组合性。** 从参数、文件或 stdin 读取目标;输出 JSON、JSONL 或 CSV;并打印纯 URL 列表以便通过管道传输。即使按下 Ctrl-C,它仍然会报告 已发现的内容。 - **内置速率调节器。** `--rate` 限制了所有 worker 每秒新建连接的数量,使你始终保持在交战规则(rules-of-engagement)的预算之内。 ### 构建 需要 C++17 编译器和 CMake。OpenSSL 是可选的,如果存在, 将启用 HTTPS。 ``` cmake -B build cmake --build build -j ctest --test-dir build # run the unit tests ``` 二进制文件将生成在 `build/redscout`。配置步骤会打印是否 启用了 HTTPS。在 Debian/Kali 上,如果缺少 OpenSSL 头文件,可以通过 `apt install libssl-dev` 进行 安装。 ### 用法 ``` redscout [options] target host, IPv4, or IPv4/CIDR (10.0.0.0/24), or IPv6/CIDR; repeatable, or '-' to read targets from stdin -iL, --target-file read targets from a file (one per line) scan: -p, --ports 22,80,443 | 1-1024 | top (default: top) -w, --workers concurrent connections (default: 512) -t, --timeout connect timeout in ms (default: 1200) -r, --retries retries before a port is filtered (default: 1) --rate cap new connections per second (default: off) --udp probe UDP instead of TCP (reply=open, silence=filtered) --waf detect a WAF in front of web ports and its vendor --waf-bypass profile which payload classes the WAF blocks (implies --waf) --no-probe skip banner grabbing content discovery: -d, --discover brute paths on discovered HTTP/HTTPS ports -W, --wordlist path list for discovery (required with -d) --depth recurse into found directories n levels (default: 0) -H, --header extra request header, repeatable (cookies, auth) -x, --extensions also try each word with these suffixes (.php,.bak) --filter-size drop discovery hits with these body sizes (csv) --filter-status drop discovery hits with these status codes (csv) --no-autofilter do not auto-detect and drop soft-404 responses output: -o, --output write a report to a file --format report format: json | jsonl | csv (default: json) --print-urls print discovered URLs to stdout (for piping) -q, --quiet quiet: no banner or progress counter -v, --version print version and exit -h, --help show this help ``` #### 示例 ``` # 单个 host 上的常用 ports(自动提取 title、Server 和 cert) redscout 192.168.56.101 # lab subnet 的全范围扫描,限速,JSON 报告 redscout 10.10.10.0/24 -p 1-65535 -w 1024 --rate 500 -o scan.json # 扫描然后爆破 web 内容(HTTP 和 HTTPS),包含 extension fuzzing,深度为 2 redscout target.internal -p 80,443,8080,8443 -d -W wordlists/common.txt \ -x php,bak,json --depth 2 -o out.json # 认证 discovery,目标来自文件,URL 输出到 stdout 以供下一个工具使用 redscout -iL scope.txt -p 443 -d -W wordlists/common.txt \ -H "Cookie: session=abc123" --print-urls | tee urls.txt # 常见服务 ports 的 UDP 扫描 redscout 10.0.0.0/24 --udp -p 53,123,161,500 # 在对 host 投入时间之前,先识别其前面的 WAF redscout target.internal -p 80,443 --waf # 映射 WAF 实际拦截的 payload 类型和 encodings redscout target.internal -p 443 --waf-bypass ``` ### 工作原理 - `target` - 扩展 host / IPv4 / IPv4-CIDR / IPv6-CIDR 规范并解析 端口规范(`top` 是一个精选的约 110 个端口列表)。 - `resolver` - 进程范围内的 DNS 缓存;一个主机只解析一次,后续的查找 只需在后面追加端口即可。 - `net` - 共享的 TCP 核心:非阻塞 `connect()` + `poll()`, 定时读取,响应平整化。 - `scanner` - 将 主机 x 端口 跨 worker 池展开,分类为 open / closed / filtered(TCP 或 UDP),抓取 banner,并对 Web 端口进行指纹识别。 - `probe` - 服务标记和明文 banner 逻辑。 - `httpconn` - 池化的 keep-alive HTTP/1.1 客户端(明文或 TLS),具有适当的 Content-Length / chunked 帧,用于发现和指纹识别。 - `tls` - 可选的 OpenSSL 层:TLS 会话、一次性交换和 证书提取。 - `buster` - 带有递归、扩展名、自定义标头以及 soft-404 / 大小 / 状态过滤的字典发现。 - `waf` - 通过良性/恶意请求对和供应商 签名表进行 WAF 指纹识别,以及对 payload 类别进行覆盖率分析,并在速率限制时进行自适应退避。 - `control` - worker 循环配合的 Ctrl-C 停止标志。 - `report` - 控制台输出,加上 JSON / JSONL / CSV 和 URL 列表。 ### 字典 `wordlists/common.txt` 是一个入门列表(约 230 条记录),涵盖了管理面板、 配置和机密文件、VCS 元数据、API 接口和框架特征。可以将 `-W` 指向任何按换行符分隔的列表以进行更广泛的扫描。 ### 范围与授权 redscout 会向你所指定的目标发送真实的连接和真实的 HTTP 请求。 请仅在你拥有或获得明确书面测试授权的主机和网络上运行它。在大多数司法管辖区,未经授权的扫描是非法的,并且会触发入侵检测和滥用 策略。请始终留意你的交战规则(rules of engagement),并使用 `--rate` 将操作控制在其范围之内。 ## Русский Инструмент Red Team для внешней разведки и картирования поверхности атаки - один самодостаточный бинарник на C++17 (почти без зависимостей). За один запуск он раскрывает цели, сканирует порты (TCP или UDP), определяет сервисы, собирает TLS-сертификаты и перебирает веб-контент (HTTP и HTTPS, рекурсивно, через пул keep-alive соединений) - всё через общий DNS-кэш и общий rate-губернатор. Только libc, pthreads и опциональный OpenSSL. Наводишь на хост - получаешь единый JSON-граф того, что открыто наружу. Автор: d3xm0s. Лицензия MIT (см. `LICENSE`) - инструмент ваш, публикуйте свободно. ### Чем он отличается - **Один бинарник, почти без зависимостей.** libc и pthreads, плюс опциональный OpenSSL. Кладётся на jump box или в урезанный контейнер без пакетного менеджера. - **Один конвейер, один кэш.** Раскрытие хостов, скан портов, снятие баннеров и перебор используют одни закэшированные ответы DNS и один бюджет скорости соединений: ничего не резолвится повторно и не штурмует цель. - **Перебор на пуле keep-alive.** Каждый воркер держит одно HTTP/1.1 соединение (включая TLS-сессию) на множество запросов, амортизируя handshake вместо оплаты его на каждый путь. - **Фингерпринт и сбор сертификатов.** Веб-порты выдают title, Server и X-Powered-By; HTTPS-порты дополнительно отдают subject, издателя, срок и все SAN сертификата - быстрый способ найти новые хостнеймы. - **Детект WAF и профиль покрытия.** `--waf` шлёт безобидный и «атакующий» запрос и называет WAF перед целью (Cloudflare, Akamai, Imperva, F5, Sucuri, ModSecurity и др.) либо отмечает generic-блокировку. `--waf-bypass` идёт дальше и составляет карту того, какие классы payload'ов (XSS, SQLi, traversal, command injection) и кодировки фильтр реально останавливает - отчёт о покрытии для авторизованной оценки, а не готовый эксплойт. При 429/503 он сам сбавляет темп (адаптивный backoff), чтобы собственный rate-limit WAF не исказил карту. - **Рекурсия, учёт мягких 404, аутентификация.** Перебор уходит вглубь найденных каталогов, калибруется против wildcard-серверов, фаззит расширения и несёт ваши куки/токены через `-H`. - **Композиция.** Читает цели из аргументов, файла или stdin; пишет JSON, JSONL или CSV; печатает список URL для пайпа. Ctrl-C всё равно выдаёт найденное. - **Встроенный rate-губернатор.** `--rate` ограничивает число новых соединений в секунду по всем воркерам, чтобы держаться внутри рамок RoE. ### Сборка Нужен компилятор C++17 и CMake. OpenSSL опционален и при наличии включает HTTPS. ``` cmake -B build cmake --build build -j ctest --test-dir build # прогнать юнит-тесты ``` Бинарник появится в `build/redscout`. На этапе конфигурации печатается, включён ли HTTPS. На Debian/Kali заголовки OpenSSL ставятся через `apt install libssl-dev`. ### Использование ``` redscout [options] target хост, IPv4, IPv4/CIDR (10.0.0.0/24) или IPv6/CIDR; повторяемый, или '-' для чтения целей из stdin -iL, --target-file читать цели из файла (по одной на строку) скан: -p, --ports 22,80,443 | 1-1024 | top (по умолчанию: top) -w, --workers число одновременных соединений (по умолчанию: 512) -t, --timeout таймаут connect в мс (по умолчанию: 1200) -r, --retries повторы, прежде чем порт признан filtered (по умолчанию: 1) --rate лимит новых соединений в секунду (по умолчанию: выкл.) --udp зондировать UDP вместо TCP (ответ=open, тишина=filtered) --waf определить WAF перед веб-портами и его вендора --waf-bypass профилировать, какие классы payload'ов блокирует WAF (влечёт --waf) --no-probe не снимать баннеры перебор контента: -d, --discover перебор путей на найденных HTTP/HTTPS портах -W, --wordlist словарь путей (обязателен с -d) --depth рекурсия в найденные каталоги на n уровней (по умолчанию: 0) -H, --header дополнительный заголовок запроса, повторяемый (куки, авторизация) -x, --extensions также пробовать каждое слово с этими суффиксами (.php,.bak) --filter-size отбрасывать находки с этими размерами тела (через запятую) --filter-status отбрасывать находки с этими кодами ответа (через запятую) --no-autofilter не определять и не отсеивать мягкие 404 автоматически вывод: -o, --output записать отчёт в файл --format формат отчёта: json | jsonl | csv (по умолчанию: json) --print-urls печатать найденные URL в stdout (для пайпа) -q, --quiet тихий режим: без баннера и счётчика прогресса -v, --version вывести версию и выйти -h, --help показать эту справку ``` #### Примеры ``` # Частые порты на одном хосте (title, Server и сертификат берутся автоматически) redscout 192.168.56.101 # Весь диапазон на лабораторной подсети, с троттлингом, JSON-отчёт redscout 10.10.10.0/24 -p 1-65535 -w 1024 --rate 500 -o scan.json # Скан, затем перебор веб-контента (HTTP и HTTPS) с фаззингом расширений, вглубь на 2 redscout target.internal -p 80,443,8080,8443 -d -W wordlists/common.txt \ -x php,bak,json --depth 2 -o out.json # Авторизованный перебор, цели из файла, URL в stdout для следующего инструмента redscout -iL scope.txt -p 443 -d -W wordlists/common.txt \ -H "Cookie: session=abc123" --print-urls | tee urls.txt # UDP-обход частых сервисных портов redscout 10.0.0.0/24 --udp -p 53,123,161,500 # Определить WAF перед хостом, прежде чем тратить на него время redscout target.internal -p 80,443 --waf # Карта того, какие классы payload'ов и кодировки WAF реально блокирует redscout target.internal -p 443 --waf-bypass ``` ### Как всё устроено - `target` - раскрывает host / IPv4 / IPv4-CIDR / IPv6-CIDR и разбирает спецификацию портов (`top` - список ~110 частых портов). - `resolver` - общий на процесс DNS-кэш: хост резолвится один раз, дальше только подставляется порт. - `net` - общее TCP-ядро: неблокирующий `connect()` + `poll()`, чтения с таймаутом, схлопывание ответа. - `scanner` - раскидывает «хост x порт» по пулу воркеров, различает open / closed / filtered (TCP или UDP), снимает баннеры и фингерпринтит веб-порты. - `probe` - маркировка сервисов и логика баннеров открытым текстом. - `httpconn` - пул keep-alive HTTP/1.1 клиента (обычного и TLS) с корректным разбором Content-Length / chunked, используется для перебора и фингерпринта. - `tls` - опциональный слой OpenSSL: TLS-сессии, одноразовые обмены и извлечение сертификата. - `buster` - перебор по словарю с рекурсией, расширениями, своими заголовками и отсевом мягких 404 / по размеру / по статусу. - `waf` - фингерпринт WAF парой запросов (безобидный/атакующий) и таблицей сигнатур вендоров, плюс профилирование покрытия по классам payload'ов с адаптивным backoff при rate-limit. - `control` - флаг остановки по Ctrl-C, с которым кооперируют воркеры. - `report` - консольный вывод плюс JSON / JSONL / CSV и список URL. ### Словари `wordlists/common.txt` - стартовый список (~230 записей): админ-панели, файлы конфигов и секретов, метаданные VCS, поверхности API и признаки фреймворков. Укажите `-W` на любой список с одним путём на строку, чтобы взять шире. ### Область применения и авторизация redscout шлёт реальные соединения и реальные HTTP-запросы туда, куда вы его наводите. Запускайте его только против хостов и сетей, которыми владеете или на тестирование которых есть письменное разрешение. Несанкционированное сканирование незаконно в большинстве юрисдикций и поднимет системы обнаружения и жалобы. Держ rules of engagement под рукой и используйте `--rate`, чтобы не выходить за их пределы.
标签:Bash脚本, C++17, HTTP头分析, TLS指纹提取, 安全测试工具, 实时处理, 密码管理, 插件系统, 攻击面测绘, 数据统计, 目录爆破, 端口扫描