d3xm0s/RedScout
GitHub: d3xm0s/RedScout
RedScout 是一个用 C++17 编写的单一二进制红队侦察工具,集成了端口扫描、服务指纹、TLS 证书采集、Web 内容发现和 WAF 检测等功能,用于一次性完成攻击面映射。
Stars: 0 | Forks: 0
# redscout
[](https://github.com/d3xm0s/RedScout/actions/workflows/ci.yml)
[](LICENSE)

*[English](#english) | [Русский](#русский)*

## 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指纹提取, 安全测试工具, 实时处理, 密码管理, 插件系统, 攻击面测绘, 数据统计, 目录爆破, 端口扫描