G4MEOVER18/web-recon-toolkit
GitHub: G4MEOVER18/web-recon-toolkit
Stars: 0 | Forks: 0
# web-recon-toolkit
Ein modulares Python-3-Tool ohne externe Abhängigkeiten für die initiale Recon-Phase eines Web-App-Pentests. Jedes Modul lässt sich einzeln oder mit `--all` zusammen ausführen. Ergebnisse können als JSON exportiert werden, um sie in größere Toolchains einzubinden.
[](https://www.python.org/)
[](LICENSE)
[]()
## Rechtlicher Hinweis / Legal Disclaimer
**This tool is intended for authorized security assessments only.**
Running reconnaissance scans against targets you do not own or have explicit written permission to test is **illegal** in most jurisdictions. The author assumes no liability for misuse. Always obtain proper authorization before using this tool.
## Inhaltsverzeichnis
1. [Installation](#installation)
2. [Quick Start](#quick-start)
3. [Modulreferenz](#modulreferenz)
- [--tech — Technologie-Fingerprinting](#--tech--technologie-fingerprinting)
- [--dirs — Directory Brute-force](#--dirs--directory-brute-force)
- [--emails — E-Mail-Harvesting](#--emails--e-mail-harvesting)
- [--dns — DNS-Enumeration](#--dns--dns-enumeration)
- [--wayback — Wayback Machine](#--wayback--wayback-machine)
4. [CLI-Referenz](#cli-referenz)
5. [Pentest-Workflow](#pentest-workflow)
6. [Ausgabeformate](#ausgabeformate)
7. [Verwandte Tools](#verwandte-tools)
8. [Spenden](#spenden)
## Installation
git clone https://github.com/G4MEOVER18/web-recon-toolkit.git
cd web-recon-toolkit
# No pip install needed — zero external dependencies
python recon.py --help
Voraussetzungen: **Python 3.8+**, nur die Standardbibliothek.
Unter Windows steht `nslookup` für DNS-Abfragen standardmäßig zur Verfügung. Unter Linux/macOS wird `dig` oder `nslookup` verwendet.
## Quick Start
# Run all modules against a target
python recon.py example.com --all
# Only fingerprint the technology stack
python recon.py https://example.com --tech
# Directory brute-force with 20 threads and 5s timeout
python recon.py example.com --dirs --threads 20 --timeout 5
# Full scan, save JSON output
python recon.py example.com --all --json --out results.json
# Use a custom wordlist for directory scanning
python recon.py example.com --dirs --wordlist /path/to/wordlist.txt
## Modulreferenz
### `--tech` — Technologie-Fingerprinting
Ruft die Zielseite und HTTP-Header ab und erkennt dabei:
| Kategorie | Erkennungsmethode |
|---|---|
| Webserver | HTTP-Header `Server:` |
| Backend | Header `X-Powered-By:` |
| CMS | Body-Patterns (wp-content, Joomla!, sites/all/modules, etc.) |
| Generator | ``-Tag |
| JS Frameworks | Script-`src`-Attribute (React, Vue, Angular, jQuery, Next.js, etc.) |
| CDN | Header: `cf-ray`, `x-akamai-*`, `x-amz-cf-id`, `x-varnish`, etc. |
| WAF | Header: `x-sucuri-id`, `cf-ray`, `x-fw-*`, `x-iinfo`, etc. |
| Security Headers | Prüft auf HSTS, CSP, X-Frame-Options, etc. |
**Beispielausgabe:**
[*] Technology Fingerprinting — https://example.com
Key Value
-------------------------- ----------------------------------------
Server nginx/1.24.0
X-Powered-By PHP/8.2.1
CMS WordPress
JS Frameworks jQuery, React
CDN Cloudflare
WAF Cloudflare WAF
Security Headers:
strict-transport-security max-age=31536000; includeSubDomains
content-security-policy MISSING
x-frame-options SAMEORIGIN
### `--dirs` — Directory Brute-force
**Enthaltene Pfade (Auswahl):**
- Admin-Panels: `/admin`, `/wp-admin`, `/phpmyadmin`, `/console`, `/manager`
- API-Endpunkte: `/api`, `/api/v1`, `/swagger`, `/openapi.json`, `/graphql`
- Sensible Dateien: `/.env`, `/.git/HEAD`, `/backup.zip`, `/db.sql`, `/web.config`
- Konfigurationsdateien: `/config.yml`, `/config.json`, `/.htaccess`, `/.htpasswd`
- Info-Endpunkte: `/server-status`, `/actuator/env`, `/phpinfo.php`
- Security-Dateien: `/robots.txt`, `/security.txt`, `/.well-known/security.txt`
Gemeldete HTTP-Codes: `200` (gefunden), `301/302/307/308` (Redirect), `403/401` (verboten/Authentifizierung nötig — deutet auf Vorhandensein hin).
**Beispielausgabe:**
[*] Directory Brute-force — https://example.com
200 https://example.com/robots.txt
403 https://example.com/.git/HEAD
301 https://example.com/admin → https://example.com/admin/
200 https://example.com/wp-login.php
Found 4 interesting path(s).
Eigene Wordlist mit `--wordlist /pfad/zur/liste.txt` hinzufügen (ein Pfad pro Zeile, `#` für Kommentare).
### `--emails` — E-Mail-Harvesting
Ruft mehrere Seiten des Ziels ab (Startseite, `/robots.txt`, `/sitemap.xml`, `/contact`, `/about`, `/impressum`) und extrahiert E-Mail-Adressen per Regex. Durchsucht auch **HTML-Kommentare**, die manchmal Entwickler- oder Admin-Adressen enthalten.
**Beispielausgabe:**
[*] Email Harvesting — https://example.com
Found 3 email(s):
admin@example.com
support@example.com
webmaster@example.com
### `--dns` — DNS-Enumeration
Löst alle gängigen DNS-Record-Typen für die Zieldomain auf und prüft die E-Mail-Sicherheitskonfiguration:
| Prüfung | Details |
|---|---|
| A / AAAA | IPv4- und IPv6-Adressen |
| MX | Mailserver-Records |
| NS | Nameserver-Records |
| TXT | Alle TXT-Records |
| CNAME | Canonical Name Records |
| SPF | Aus TXT-Records extrahiert (`v=spf1`) |
| DMARC | Abfrage von `_dmarc.` |
| DKIM | Abfrage von `default._domainkey.` |
**Beispielausgabe:**
[*] DNS Enumeration — https://example.com
A 93.184.216.34
AAAA 2606:2800:220:1:248:1893:25c8:1946
MX 10 mail.example.com.
NS a.iana-servers.net.
TXT "v=spf1 include:_spf.google.com ~all"
SPF: v=spf1 include:_spf.google.com ~all
DMARC: v=DMARC1; p=reject; rua=mailto:dmarc@example.com
DKIM: default._domainkey not found (selector unknown)
### `--wayback` — Wayback Machine
Fragt das Internet Archive nach historischen Snapshots ab:
1. **Verfügbarkeitscheck** — findet den aktuellsten Snapshot-Zeitstempel und die URL über `archive.org/wayback/available`
2. **CDX-Index-Abfrage** — holt bis zu 20 kürzlich archivierte URLs über die CDX API, inklusive Zeitstempel und HTTP-Statuscodes zum Zeitpunkt der Archivierung
Nützlich, um zu finden:
- Alte Admin-Panels oder versteckte Endpunkte, die nicht mehr existieren
- Früher öffentlich zugängliche sensible Dateien (`.env`, Backups, etc.)
- Ältere API-Versionen
**Beispielausgabe:**
[*] Wayback Machine — https://example.com
Snapshot available: 2024-11-01 14:22 → https://web.archive.org/web/20241101142201/https://example.com/
Timestamp Code URL
----------------- ------ --------------------------------------------------
2024-11-01 200 https://example.com/
2024-10-15 200 https://example.com/admin-old/
2024-09-22 200 https://example.com/backup-2024.zip
## CLI-Referenz
| Flag | Typ | Standard | Beschreibung |
|---|---|---|---|
| `target` | positional | — | Ziel-URL oder Hostname |
| `--tech` | Flag | — | Technologie-Fingerprinting ausführen |
| `--dirs` | Flag | — | Directory-Brute-force ausführen |
| `--emails` | Flag | — | E-Mail-Harvesting ausführen |
| `--dns` | Flag | — | DNS-Enumeration ausführen |
| `--wayback` | Flag | — | Wayback-Machine-Modul ausführen |
| `--all` | Flag | — | Alle Module ausführen |
| `--threads N` | int | `10` | Anzahl paralleler Threads (für `--dirs`) |
| `--timeout N` | int | `8` | HTTP-Request-Timeout in Sekunden |
| `--user-agent STR` | str | Chrome UA | Eigener User-Agent-String |
| `--wordlist FILE` | Pfad | — | Zusätzliche Wordlist für Directory-Scanning (mit `--dirs`) |
| `--json` | Flag | — | Ausgabe im JSON-Format |
| `--out FILE` | Pfad | — | Ergebnisse in Datei speichern |
## Pentest-Workflow
Ein typischer Recon-Ablauf für einen Web-App-Pentest:
# Schritt 1 — Passiver Recon: DNS + Wayback, bevor der Server berührt wird
python recon.py target.com --dns --wayback --json --out step1-passive.json
# Schritt 2 — Aktives Fingerprinting
python recon.py target.com --tech --out step2-tech.txt
# Schritt 3 — Directory Discovery mit größerer Wordlist
python recon.py target.com --dirs --threads 25 --wordlist ~/wordlists/raft-medium-directories.txt --out step3-dirs.txt
# Schritt 4 — E-Mail-Harvesting für OSINT / Phishing-Simulation
python recon.py target.com --emails
# Schritt 5 — Vollständiger kombinierter Scan für den Report
python recon.py target.com --all --json --out final-report.json
**Mit verwandten Tools kombinieren für tiefere Abdeckung:**
# Erst Subdomains enumerieren
python ~/tools/subdomain-takeover-scanner/scanner.py target.com
# Dann web-recon-toolkit auf jede aktive Subdomain anwenden
for sub in $(cat live-subs.txt); do
python recon.py $sub --tech --dirs --out "$sub.txt"
done
# JWT-Tokens aus Responses prüfen
python ~/tools/jwt-pwn/jwt_pwn.py --token
# HTTP-Security-Header im Detail auditieren
python ~/tools/http-header-auditor/auditor.py target.com
# Auf CORS-Fehlkonfigurationen testen
python ~/tools/cors-scanner/cors_scan.py target.com
## Ausgabeformate
### Konsole (Standard)
Farbige, menschenlesbare Ausgabe mit ANSI-Farbcodes.
### JSON (`--json`)
Strukturierte Ausgabe für Scripting und Reporting-Pipelines:
{
"meta": [{"target": "https://example.com", "scan_time": "2026-05-22T10:00:00Z", "modules": ["tech", "dns"]}],
"tech": [{"Server": "nginx/1.24.0", "CMS": "WordPress", ...}],
"dns": [{"A": ["93.184.216.34"], "MX": ["mail.example.com"], ...}],
"dirs": [{"path": "/wp-login.php", "code": 200, "url": "https://example.com/wp-login.php"}]
}
### Dateiausgabe (`--out`)
Jedes Format lässt sich in eine Datei speichern. Mit `--json` kombinieren für maschinenlesbare Ausgabe:
python recon.py target.com --all --json --out report.json
python recon.py target.com --all --out report.txt # plain text
## Verwandte Tools
Alle Tools von [G4MEOVER18](https://github.com/G4MEOVER18):
| Tool | Beschreibung |
|---|---|
| [subdomain-takeover-scanner](https://github.com/G4MEOVER18/subdomain-takeover-scanner) | Erkennt verwaiste DNS-Records und Subdomain-Takeover-Schwachstellen |
| [jwt-pwn](https://github.com/G4MEOVER18/jwt-pwn) | JWT-Sicherheitstests: alg:none, RS256→HS256, Brute-force schwacher Secrets |
| [cors-scanner](https://github.com/G4MEOVER18/cors-scanner) | Erkennung von CORS-Fehlkonfigurationen |
| [http-header-auditor](https://github.com/G4MEOVER18/http-header-auditor) | Umfassende Analyse von HTTP-Security-Headern |
| [stm32-usb-fuzzer](https://github.com/G4MEOVER18/stm32-usb-fuzzer) | USB-Protokoll-Fuzzing über STM32-Mikrocontroller |
## Spenden
Falls dieses Tool dir bei einem Pentest Zeit gespart hat, freue ich mich über einen Kaffee:
**Bitcoin:** `39vZWmnUwDReQ15BwqQXzyqVQ6U8LardEf`
**PayPal:** [paypal.me/Freakbank1](https://paypal.me/Freakbank1)
*Nur mit Python-3-Standardbibliothek — kein pip nötig.*