
Orchestrateur de reconnaissance et de triage autorisé pour le secteur de l'éducation (nmap/dirsearch/sqlmap/hydra + CVE-2024-4577, fuite de secrets/clés API, XSS, wp2shell) avec un panneau de contrôle web
Orchestrateur de reconnaissance et de triage autorisé pour les exercices red/blue dans le secteur de l'éducation. Déposez des cibles, il lance les scanners, filtre le bruit et vous remet une file de revue classée dans une interface web. Conçu pour être déployé sur votre machine Linux (Kali / infra), piloté depuis un navigateur.
⚠️ Usage autorisé uniquement. Ne le pointez que vers des systèmes que vous êtes autorisé à tester. Le verrouillage de périmètre est désactivé par défaut — l'opérateur est responsable de l'autorisation. Pour un vrai engagement, vous pouvez réarmer une liste blanche de périmètre verrouillée avec
scope_enforce: truedansconfig.yaml(chaque étape revérifie alors le périmètre avant d'agir).
Kali / Debian / Ubuntu — collez le bloc entier :
sudo apt update && sudo apt install -y python3 python3-venv git nmap sqlmap hydra dirsearch
git clone https://github.com/ericchen913900/edu-recon.git
cd edu-recon
chmod +x run.sh
./run.sh
C'est tout. run.sh construit le venv, clone les outils inclus + installe les dépendances,
lance , puis démarre la console sur
et ouvre votre navigateur. (Ctrl-C l'arrête ; relancez
à tout moment.)
doctorhttp://127.0.0.1:8770./run.shWindows (Git Bash / WSL) :
git clone https://github.com/ericchen913900/edu-recon.git
cd edu-recon
bash run.sh # first run auto-creates the venv + clones tools; nmap must be on PATH
targets ─▶ expand (CIDR ping-sweep, subdomain enum)
─▶ per target:
portscan nmap -sV -sC (+ --script vuln)
webdisco dirsearch (+ WordPress detect)
exposures .git / .env / backups / phpinfo / server-status / actuator …
+ phpMyAdmin/Adminer exposure + open directory listing
secrets JS/HTML key-leak scan (AWS/GCP/GitHub/Slack/Stripe/JWT/私鑰/…)
+ API-doc / GraphQL-introspection exposure ← api leak
phpcgi CVE-2024-4577 / 8926 via Night-have-dreams/php-cgi-Injector
react2shell CVE-2025-55182 React Server Components RCE
via hidden-investigations/react2shell-scanner (safe-check by default)
webcve built-in non-destructive safe-check probes for famous CVEs:
PHPUnit 2017-9841 · Apache-traversal 2021-41773 · Struts2 2017-5638
· Confluence 2022-26134 · Drupalgeddon2 2018-7600 · Next.js 2025-29927
moodle Moodle LMS fingerprint + version + outdated-branch +
web-exposed moodledata (the dominant .edu system)
xss dalfox + built-in reflected-XSS canary
sqli built-in SQL-error quick pass + sqlmap deep
cred hydra weak/default passwords (ssh/ftp/rdp/db/…)
wp xAL6/wp2shell WordPress SQLi→shell
─▶ triage: infer findings from services, drop soft-404 noise,
dedupe, rank by severity → review queue
─▶ report: JSON / Markdown / self-contained HTML
git clone https://github.com/ericchen913900/edu-recon.git && cd edu-recon
python3 -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
python recon.py setup # clones php-cgi-Injector + react2shell-scanner + wp2shell + dirsearch, installs deps
python recon.py doctor # shows which scanners resolved
Sur Kali, les scanners lourds (nmap/sqlmap/hydra/dirsearch) sont déjà natifs — voir Déploiement sur Kali Linux pour la recette complète.
Kali est la machine prévue : nmap, sqlmap, hydra, dirsearch sont fournis dans la
distribution, donc tout le pipeline (y compris l'injection + les mots de passe faibles) s'exécute nativement.
# 1) system tools — most are already on Kali; this is the complete set
sudo apt update
sudo apt install -y python3 python3-venv git nmap sqlmap hydra dirsearch
# optional (better XSS + subdomain enum):
# sudo apt install -y dalfox subfinder # or: go install github.com/hahwul/dalfox/v2@latest ; \
# # go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
# 2) get the code
git clone https://github.com/ericchen913900/edu-recon.git
cd edu-recon
# 3) isolated venv + Python deps + bundled script-tools
python3 -m venv .venv
source .venv/bin/activate
python recon.py setup # clones php-cgi-Injector / react2shell-scanner / wp2shell / dirsearch, pip-installs deps
# 4) sanity check — on Kali nmap/sqlmap/hydra/dirsearch should all be OK (native)
python recon.py doctor
# 5a) web console — bind to localhost, drive from a browser
python recon.py serve --host 127.0.0.1 --port 8770
# → http://127.0.0.1:8770 (paste targets → pick intensity → ARM & RUN)
# remote Kali? tunnel instead of exposing it:
# ssh -L 8770:127.0.0.1:8770 user@kali # then browse http://localhost:8770
# 5b) or headless
python recon.py scan -t targets.txt --intensity full
python recon.py repro <run-id> # runnable reproduction PoC per confirmed finding
python recon.py payout <run-id> # legal disclosure / bounty routing per finding
Notes Kali
dirsearch natif est utilisé automatiquement pour un balayage complet
de db/dicc.txt (chaque répertoire/fichier découvert est listé dans la console sous
🗂 網站路徑). Ignorez le paquet apt et setup clone dirsearch et l'exécute via
Python à la place — dans les deux cas webdisco fonctionne.sqlmap/hydra/nmap natifs, --intensity full
exécute réellement les vérifications d'injection + de mots de passe faibles (safe-checks
non destructifs ailleurs).scope_enforce: true dans config.yaml + listez votre périmètre autorisé
dans le fichier de cibles / extra_allowed_cidrs.--host 127.0.0.1 et accédez-y via un tunnel
SSH ; elle n'a pas d'authentification propre.# /etc/systemd/system/edu-recon.service
[Service]
WorkingDirectory=/home/kali/edu-recon
ExecStart=/home/kali/edu-recon/.venv/bin/python recon.py serve --host 127.0.0.1 --port 8770
Restart=on-failure
User=kali
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now edu-reconchmod +x run.sh && ./run.sh # 滿血:自動 venv/setup/doctor → 全火力 console → 開瀏覽器
# HOST=0.0.0.0 PORT=9000 ./run.sh # override bind/port
run.sh crée le venv au premier lancement, clone les outils inclus, lance doctor,
puis sert la console à pleine puissance — intensité full, nmap -sC --script vuln, le balayage complet de dirsearch db/dicc.txt, chaque scanner résolu, verrouillage de périmètre
désactivé — sur http://127.0.0.1:8770 et ouvre votre navigateur. Ctrl-C l'arrête.
python recon.py serve --host 127.0.0.1 --port 8770
Ouvrez l'URL, collez les cibles (une par ligne : IP / host / URL / CIDR /
domain / host:port), choisissez une intensité, cliquez sur 開始掃描. Regardez la grille
d'étapes de chaque cible se remplir en direct, filtrez les résultats par sévérité, développez les preuves,
ouvrez les journaux bruts des outils, marquez les faux positifs et exportez le rapport HTML.
python recon.py scan -t targets.txt --intensity full
# reports land in runs/<run-id>/report.{md,html,json}
Lanceurs :
| commande | ce qu'elle fait |
|---|---|
./run.sh | lancement en une commande pleine puissance : venv/setup/doctor → console → ouvre le navigateur. HOST=… PORT=… ./run.sh pour surcharger. |
Sous-commandes de recon.py (préfixez avec le python du venv, ex. .venv/bin/python) :
| commande | ce qu'elle fait |
|---|---|
recon.py setup | clone les outils inclus (php-cgi-Injector / react2shell-scanner / wp2shell / dirsearch) + pip-installe leurs dépendances |
recon.py doctor | affiche quels scanners ont été résolus (nmap / sqlmap / hydra / dirsearch / dalfox / subfinder / outils inclus) |
recon.py serve [--host H] [--port P] | lance la console web (par défaut 127.0.0.1:8770) |
recon.py scan -t targets.txt [--intensity full|recon|passive] | scan headless d'un fichier de cibles |
recon.py scan http://host/ 10.0.0.0/24 … | scan headless de cibles en ligne |
recon.py repro <run-id> [--finding <id>] [--out DIR] | affiche / écrit un PoC de reproduction exécutable par résultat confirmé |
recon.py payout <run-id> | routage de divulgation / bounty légal par résultat confirmé |
Options communes (toutes les sous-commandes) : --config FILE (surcharges yaml/json) · --intensity · --concurrency N · --workdir DIR.
Les cibles de scan acceptent : IP · host · URL · CIDR · domain · host:port (une par ligne dans un fichier, ou en ligne / collées dans la console).
API web (ce que pilote la console ; pratique pour le scripting) :
| endpoint | objectif |
|---|---|
POST /api/runs {targets,intensity,concurrency,scope_enforce} | démarrer un run → {id} |
GET /api/runs · GET /api/runs/{id} | lister les runs · run complet (targets/stages/findings/webpaths) |
GET /api/runs/{id}/logs?since=N | journal live incrémental |
GET /api/runs/{id}/artifact?path=… | journal brut d'outil / dump sauvegardé |
GET /api/runs/{id}/repro[?finding_id=…] | script(s) PoC de reproduction |
POST /api/runs/{id}/finding {finding_id,reviewed,false_positive} | trier un résultat |
POST /api/runs/{id}/dump {finding_id} · POST …/dumps/clear | capturer une fuite (fichier/.git-source/clé) · effacer les captures |
POST /api/runs/{id}/report · POST …/cancel | exporter le rapport · annuler le run |
Exemples :
./run.sh # full-power console + browser
.venv/bin/python recon.py scan -t targets.txt --intensity full
.venv/bin/python recon.py repro run-20260907-185021 --out pocs/ # write repro_*.sh
.venv/bin/python recon.py payout run-20260907-185021 # legal cash-out routing
HOST=0.0.0.0 PORT=9000 ./run.sh # bind elsewhere (tunnel it, don't expose)
| niveau | ce qui s'exécute |
|---|---|
full | tout, injection + mots de passe faibles exécutés (par défaut) |
recon | phpcgi + react2shell + webcve + XSS + exposures s'exécutent ; sqli/cred listent seulement les candidats |
passive | portscan + webdisco + exposures + secrets (GET bénins uniquement) |
Modifiez config.yaml (voir les commentaires) ou passez --config. Les wordlists se trouvent dans
wordlists/ (default-creds.txt, users.txt, passwords.txt, web-common.txt).
Réglez hydra_tasks bas pour éviter les verrouillages de compte ; augmentez nmap_top_ports: 0 pour
un scan de tous les ports.
recon.py CLI (serve / scan / setup / doctor / repro / payout)
edurecon/
config.py defaults + yaml/json loader + intensity gating
scope.py target parsing + scope allowlist (subdomain-aware)
engine.py expansion + concurrent per-target pipeline + cancel
stages.py every scan stage
webscan.py crawler + reflected-XSS + SQL-error heuristics
secrets.py key-leak regexes + API-doc/GraphQL probes
cveprobes.py built-in non-destructive famous-CVE safe-check probes
edusys.py education-sector system audit (Moodle)
parse.py nmap/dirsearch/sqlmap/hydra/phpcgi/react2shell parsers
triage.py service inference, soft-404 filter, dedupe, ranking
report.py JSON / Markdown / HTML export
store.py run state + JSON persistence
webui.py stdlib web control panel
third_party/ php-cgi-Injector, react2shell-scanner, wp2shell, dirsearch (via `setup`)
runs/ per-run artifacts + reports