This project delivers a fully automated Recon-as-Code pipeline for passive reconnaissance in web application environments. It combines GitHub Actions-based CI/CD automation, powerful reconnaissance tools, and a Flask-powered authenticated dashboard for visualized access to findings.
To better understand the timeline and flow of this pipeline, you can explore the full visual representation below:
๐ ๐ View the CI/CD Passive Recon Mindmap (Markmap)
1) Login Page
2) Dashboard Page
3) Live Host Discovery Page
4) DNS Records Page
5) Subdomain Takeover Checking Page
6) Waybackurls Records
7) Tech Stack
โ Subdomain enumeration using subfinder + assetfinder
โ Live Host Probing (2xx/3xx) via httpx
โ Wayback Machine URL retrieval with waybackurls
โ Tech Stack Fingerprinting using whatweb
โ DNS Record Collection (dnsx)
โ Subdomain Takeover Analysis (subzy)
โ URL Categorization via gf (XSS, SQLi, LFI, IDOR, etc.)
โ Categorization on both Wayback URLs and Live URLs
โ HTML Report Generation (with Pagination + Search)
โ Authenticated Flask Dashboard (Session-Controlled)
โ Matrix-Style Animated Background (Dark Theme)
A lightweight, prebuilt Docker image optimized for passive recon and automation.
The pipeline defined in web_app_recon.yml
:
target.com
).txt
files under findings/
/output/data/
generate_report.py
to create .html
reports from .txt
๐ Login system secured with bcrypt-hashed passwords
๐ Session expiration after 10 minutes of inactivity
๐ Protected access to all dashboard routes (/dashboard, /live_hosts, /xss_candidates, etc.)
/output/
)live_2xx_3xx_hosts.html โ Active live hosts
dns_info.html โ DNS Records (A, MX, TXT, CNAME)
subzy.html โ Subdomain Takeover Detection Results
waybackurls.html โ Archived Wayback URLs
waybackurls_filtered.html โ Sensitive Files and Endpoints
whatweb.html โ Tech Stack Fingerprinting
xss_candidates.html, sqli_candidates.html, lfi_candidates.html, etc. โ All categorized vulnerability findings
All HTML reports are:
Fully paginated
Searchable in real-time
Styled for dark mode with consistent UI
This system follows a DevSecOps-aligned approach to passive reconnaissance by integrating:
To make the Flask-based dashboard securely accessible via a domain (e.g. https://recon.example.com
), you can configure NGINX as a reverse proxy.
This setup allows NGINX to:
5000
```nginx server { listen 80; server_name recon.example.com;
# Redirect all HTTP to HTTPS
return 301 https://$host$request_uri; }
server { listen 443 ssl; server_name recon.example.com;
ssl_certificate /etc/ssl/certs/recon.example.com.crt;
ssl_certificate_key /etc/ssl/private/recon.example.com.key;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
} }
```bash
pip install flask flask-session bcrypt
python db.py
python app.py
๐ช Disclaimer
โ ๏ธ This project focuses solely on passive reconnaissance. No brute-force, fuzzing, or active exploitation is performed by design.
Made with โค๏ธ for Offensive Security and DevSecOps excellence.