CLI-инструмент для контролируемой первичной разведки веб-сервисов. Он объединяет bounded TCP connect scan, определение HTTP(S) на стандартных и нестандартных портах, несколько точечных AppSec-проверок, path discovery и структурированные отчёты.
Используйте scanner только для localhost, собственных систем или целей с явным разрешением на тестирование. Для любой non-loopback цели требуется флаг
--acknowledge-authorization.
- TCP connect scan без root-прав;
- IP, hostname, файл целей и небольшие CIDR-диапазоны;
- protocol probing HTTP/HTTPS на любом найденном порту;
- проверка CSP, HSTS, clickjacking protection и
nosniff; - проверка CORS с контролируемым недоверенным
Origin; - подтверждение открытых
.env,.git/config, backup и debug endpoints по сигнатурам; - поиск секретоподобных значений в HTML и same-origin JavaScript;
- редактирование найденных значений перед записью evidence;
- path discovery с baseline для фильтрации soft-404;
- JSON, Markdown и Nuclei target list;
- локальная уязвимая demo-цель;
- pipeline с Subfinder и необязательной Telegram-сводкой.
git clone https://github.com/fant3k/AppSec-Recon-Framework.git
cd AppSec-Recon-Framework
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install .
appsec-recon --versionУстановка создаёт команду appsec-recon и включает встроенный стартовый
wordlist в Python package.
scripts/demo_local.shСкрипт временно запускает цель на 127.0.0.1:8088, выполняет scan и завершает
demo-сервер. Проверяются:
- permissive credentialed CORS;
- открытые
.envи.git/config; - три отсутствующих security header;
- редактируемый секретоподобный JavaScript token;
- путь
/admin, найденный через baseline-aware discovery.
Ожидаемый итог:
Open ports: 1
Web services: 1
Issues: 7
Discovered paths: 1
Severity: critical=1, high=3, low=3
Только TCP scan локальной цели:
appsec-recon 127.0.0.1 --ports 1-1000 --no-webАвторизованная внешняя проверка с отчётами:
appsec-recon example.com \
--ports 80,443,7000,8080,9443 \
--acknowledge-authorization \
--json-out reports/example.json \
--markdown-out reports/example.md \
--nuclei-targets reports/example-urls.txtНебольшой CIDR:
appsec-recon 192.168.1.0/24 \
--ports 80,443,8080 \
--max-hosts 256 \
--acknowledge-authorizationScanner ограничивает собственную активность:
--max-hostsограничивает раскрытие каждого CIDR;--max-scan-jobsограничивает произведение targets × ports;--threadsдопускает только 1–512 workers;- TCP jobs отправляются ограниченными batch, а не складываются целиком в RAM;
--timeout,--fuzz-limitи--request-delayвалидируются;- каждый HTTP response ограничен 512 KiB;
- JavaScript response ограничен 200 KiB;
- автоматические redirects не пересекают подтверждённый scope;
- внешняя цель требует
--acknowledge-authorization; - scanner использует идентифицируемый
User-Agent.
HTTP 200 сам по себе не считается подтверждением открытого файла. Finding для
.env, .git/config и других чувствительных путей создаётся только при
совпадении ожидаемой сигнатуры. Baseline path позволяет path discovery
отфильтровать приложения, которые возвращают одинаковую soft-404 страницу с
кодом 200.
Это reconnaissance, а не доказательство exploitability. Каждый finding нужно подтверждать вручную в рамках согласованного scope.
appsec_framework/
cli.py CLI, валидация scope и orchestration
targets.py target/CIDR/port parsing
network.py bounded TCP connect scan
web.py protocol probing и web checks
models.py типизированная схема результата
reporting.py JSON, Markdown и Nuclei targets
data/ встроенный стартовый wordlist
examples/ локальная demo-цель
scripts/ demo, Subfinder pipeline и Telegram summary
tests/ unit и local integration tests
scripts/test.shТесты запускают реальные localhost TCP/HTTP-сервисы и проверяют:
- target и port parsing;
- ресурсные лимиты и authorization gate;
- bounded TCP scan;
- HTTP probing на случайном нестандартном порту;
- все семь demo findings;
- soft-200 filtering;
- response-size limits;
- redaction секретов;
- JSON, Markdown и Nuclei output.
GitHub Actions повторяет проверку на Python 3.9, 3.11 и 3.13, устанавливая проект именно как пакет и вызывая установленную CLI-команду.
docker compose up -d demo
docker compose --profile tools run --rm scanner
docker compose downDemo публикуется только на 127.0.0.1:8088. Scanner и demo взаимодействуют во
внутренней Docker network.
- это не замена Nmap, Nuclei, Burp Suite или полноценному DAST;
- service fingerprinting ограничен HTTP(S) probing и server header;
- секреты ищутся эвристически и требуют ручной проверки;
- path discovery использует небольшой встроенный wordlist;
- scanner не анализирует бизнес-логику и authenticated workflows.
