web_app_recon_ci-cd_public
This project delivers a fully automated **Recon-as-Code** workflow for passive reconnaissance for web application environments. It combines GitHub Actions-based CI/CD automation, powerful recon tools, and a Flask-powered dashboard for visualized and authenticated access to the findings.
Table of Contents
Loading contents...
README.md
๐ Recon-as-Code: Passive Web Application Reconnaissance in a CI/CD Pipeline
This project delivers a fully automated Recon-as-Code workflow for passive reconnaissance in web application environments. It combines GitHub Actions-based CI/CD automation, powerful recon tools, and a Flask-powered dashboard for visualized and authenticated access to the findings.
๐งญ Pipeline Flow
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)
Example Usage:
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
๐ Features
- Subdomain enumeration via
subfinder
andassetfinder
- Live host probing using
httpx
(filtered 2xx/3xx) - Archived URL extraction via
waybackurls
- Sensitive endpoint filtering with regex from wayback data
- Technology stack fingerprinting with
whatweb
- DNS record enumeration using
dnsx
- Subdomain takeover detection via
subzy
- Optional GitHub leak detection using
github-dorks
- HTML report generation with:
- Pagination (10 lines/page)
- Search/filter
- Download
.txt
output - Secure Flask dashboard:
- bcrypt-hashed login
- Session timeout after 10 minutes
- Session heartbeat every 2 minutes
- Matrix-style animated UI with dark mode
- Custom 404 error page with themed fallback
๐ ๏ธ Technologies
- Python (Flask) โ Web interface and session logic
- SQLite โ Secure user credential storage
- JavaScript โ Pagination, auth, session check, matrix animation
- Docker โ Runtime environment
- GitHub Actions โ CI/CD workflow execution
- Self-hosted Runner โ Volume-mounted deployment
๐ฆ Docker Image
A lightweight, prebuilt Docker image optimized for passive recon and automation.
โ๏ธ CI/CD Workflow
The pipeline defined in web_app_recon.yml
:
- Accepts a domain input (or defaults to
bilishim.com
) - Cleans up previous
.txt
artifacts - Runs passive recon tools in parallel:
-subfinder
,assetfinder
,httpx
,dnsx
,subzy
,whatweb
,waybackurls
- Filters sensitive URLs from wayback results
- Stores output as
.txt
files underfindings/
- Copies findings into
/output/data/
- Runs
generate_report.py
to create paginated.html
reports - Reports become available to the authenticated Flask frontend
๐ Authentication
- Secure login via Flask using bcrypt-hashed credentials stored in SQLite
- Sessions expire after 10 minutes of inactivity
- Session heartbeat checks every 2 minutes to auto-logout inactive users
- All pages including
/dashboard
and report routes are protected
๐ Output Files (Inside /output/
)
live_2xx_3xx_hosts.html
โ Subdomains with live HTTP(S) servicesdns_info.html
โ DNS record resultssubzy_results.html
โ Vulnerable subdomainswaybackurls.html
โ Archived endpoints with download optionwaybackurls_filtered.html
โ Sensitive filtered URLs with download optionwhatweb.html
โ Technology fingerprinting results
All reports are paginated, searchable, and styled for readability and dark mode. .txt
downloads available where relevant.
๐ง Architecture Overview
This system follows a DevSecOps-aligned approach to passive reconnaissance by integrating:
- ๐งพ CI/CD-based automation via GitHub Actions
- ๐งช Recon tools for DNS, Subdomains, Tech Stack, Wayback URLs
- ๐ Report generation using Python with pagination & filtering
- ๐ Session-controlled Flask dashboard with Matrix-themed UI
๐งช Local Setup
# 1. Install Flask and dependencies
pip install flask flask-session bcrypt
# 2. Create user database
python db.py
# 3. Run the Flask app
python app.py
# 4. Access dashboard:
http://localhost:5000
๐ Reverse Proxy with NGINX
To make the Flask-based dashboard securely accessible via a domain (e.g. https://localhost:5000
), you can configure NGINX as a reverse proxy.
This setup allows NGINX to:
- Serve the Flask app on standard HTTPS port (443)
- Handle TLS (SSL) termination
- Forward requests to the Flask app running locally on port 5000
NGINX Configuration
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;
}
}
๐ค Contributions
- Contributions and suggestions are welcome!
- Help me to improve this passive recon CI/CD approach for modern DevSecOps pipelines.
โ ๏ธ This project focuses solely on passive reconnaissance. No brute-force, fuzzing, or active exploitation is performed by design.
Tool Information
Related Tools
ZoomeyeSearch
A powerful CLI tool that uses ZoomEye to search exposed services, gather intelligence, and automate reconnaissance.
StableNucleiPrompt
Nuclei Prompt Scanner adalah tools berbasis Python yang memanfaatkan Nuclei dan AI Prompting untuk melakukan pemindaian kerentanan pada web target berdasarkan kategori OWASP dan lainnya, dengan antarmuka interaktif berbasis CLI (command-line).
Stablealtdns
Generates permutations, alterations and mutations of subdomains and then resolves them
Stable