OSINT — Atelier pratique
Vous prenez une cible réelle — un programme de bug bounty public — et vous la démontez en passif intégral. Livrable : une fiche cible complète, avec cinq points d'attaque prioritaires classés.
Compter : 2 à 3 heures.
Livrable : un dossier ~/osint/<cible>/ complet, avec fiche fiche-cible.md de 2 pages en tête.
Vous devez choisir un programme de bug bounty public dont le scope autorise explicitement la reconnaissance. Aucune autre cible n'est acceptable. Utilisez HackerOne — Open programs, Bugcrowd — Public programs ou Intigriti. Restez strictement passif : cet atelier n'inclut aucun scan, aucune requête à la cible.
Étape 1 — Choisir la cible (10 min)
Ouvrez la liste des programmes publics. Choisissez un programme qui :
- Autorise explicitement
*.exemple.comdans son scope. - N'exige pas d'enregistrement préalable pour la reconnaissance passive.
- Concerne une entreprise de taille moyenne (pas Google — trop massif, ni une startup de 5 personnes — trop maigre en OSINT). Une SaaS B2B avec 100 à 1000 employés est idéale.
Notez :
Programme choisi : <nom>
Plateforme : HackerOne / Bugcrowd / Intigriti
URL du programme : ...
Domaine racine : cible.com
Scope in : *.cible.com, cible.io
Scope out : blog.cible.com, salesforce.cible.com (SaaS tiers)
Politique de disclosure : responsible disclosure, 90 jours
Ce bloc va en tête de votre fichier fiche-cible.md. Il prouve que vous êtes autorisé(e). C'est votre RoE pour cet atelier.
Étape 2 — Préparer le dossier (2 min)
CIBLE=<votre-cible-sans-www> # ex: acme.io
mkdir -p ~/osint/$CIBLE/{dns,subs,tech,people,leaks,archive}
cd ~/osint/$CIBLE
touch fiche-cible.md
Commencez fiche-cible.md par le bloc de scope de l'étape 1. Sans ça, pas d'excuse valable si quelqu'un vous demande « pourquoi tu regardais ma boîte ? ».
Étape 3 — DNS et posture email (10 min)
Reproduisez la boucle de la démonstration :
for t in A AAAA MX NS TXT SOA CAA; do
echo "=== $t ==="
dig +short $CIBLE $t
done | tee dns/racine.txt
dig +short _dmarc.$CIBLE TXT | tee dns/dmarc.txt
Répondez, dans fiche-cible.md, à ces questions :
- Le domaine est-il derrière un CDN ? Lequel ?
- Quels sont les prestataires de messagerie ?
- Le SPF cite-t-il des services SaaS ? Lesquels ?
- La politique DMARC est-elle
none,quarantineoureject? (none = vecteur de phishing)
Étape 4 — Sous-domaines (20 min)
Trois sources, à recouper. Passives strictes.
# Source 1 — Certificate Transparency
curl -s "https://crt.sh/?q=%25.$CIBLE&output=json" \
| jq -r '.[].name_value' \
| tr '[:upper:]' '[:lower:]' \
| sed 's/^\*\.//' \
| sort -u > subs/from-crt.txt
# Source 2 — subfinder
subfinder -d $CIBLE -silent -all -o subs/from-subfinder.txt
# Source 3 — amass passif
amass enum -passive -d $CIBLE -o subs/from-amass.txt
# Fusion
cat subs/from-*.txt | sort -u > subs/all-passive.txt
wc -l subs/all-passive.txt
Résolution passive (via résolveurs publics, jamais chez le client) :
dnsx -l subs/all-passive.txt -a -resp -silent -r 1.1.1.1,8.8.8.8 \
-o subs/resolved.txt
Ouvrez subs/resolved.txt. Repérez :
- Les IPs hors CDN (celles qui ne commencent pas par 104.16-31, 172.64-71, 141.101, 173.245 — les blocs Cloudflare — ou par ceux de Fastly, Akamai, etc.). Ces IPs pointent souvent le vrai serveur derrière le CDN. Cible d'or.
- Les sous-domaines avec des mots-clés révélateurs :
dev,staging,test,preprod,internal,old,legacy,admin,panel,jenkins,gitlab,sonar,vault,backup,vpn,ssh,rdp.
- Les IPs privées (10.x, 172.16-31.x, 192.168.x) publiées dans un DNS public : erreur de configuration à signaler.
Dans fiche-cible.md, listez les 10 sous-domaines les plus intéressants avec leur IP et une note sur ce qui les rend intéressants.
Étape 5 — Technologies (20 min)
Sans toucher la cible. Utilisez :
- BuiltWith dans votre navigateur.
- Shodan en CLI ou web :
# Pour chaque IP hors CDN identifiée à l'étape 4 :
shodan host <IP> > tech/shodan-<sous-domaine>.txt
- Wappalyzer — attention, actif. Si votre RoE d'atelier accepte du light active, vous pouvez l'utiliser (une simple ouverture de page dans le navigateur = un hit HTTP visible dans les logs de la cible). Sinon, laissez tomber.
Notez, dans tech/synthese.md, pour chaque cible identifiée :
- Serveur web et version.
- Framework applicatif si identifiable.
- Ports ouverts vus par Shodan (pas par vous — Shodan les a déjà scannés, vous les consultez).
- Bannières de service (SSH, mail…).
- Erreurs de configuration visibles : mode DEBUG, pages d'erreur qui trahissent la stack,
Server:header trop bavard.
Étape 6 — Personnes (20 min)
# Cherche emails + profils LinkedIn (via Bing)
theHarvester -d $CIBLE -b linkedin,bing,duckduckgo -l 500 \
-f people/harvester.html
Complétez à la main sur LinkedIn :
- Employés en poste avec des titres tech (CTO, VP Eng, DevOps, SRE, Sec, IT).
- Anciens employés (dernier poste :
<votre-cible>, mentionleft in <date>). Leurs GitHub publics contiennent parfois des reliques.
Consolidez people/personnes.csv :
prenom,nom,titre,email,linkedin,github
Objectif : au moins 15 personnes identifiées. Vous n'en attaquerez que 3 ou 4 plus tard, mais il faut le vivier.
Étape 7 — Fuites (20 min)
Trois sources, dans cet ordre :
1. HaveIBeenPwned par domaine (si vous avez une clé API, sinon utilisez l'interface web par email individuel) :
curl -s -H "hibp-api-key: $HIBP_KEY" \
"https://haveibeenpwned.com/api/v3/breacheddomain/$CIBLE" \
| jq . > leaks/hibp.json
2. GitHub Search pour la cible et pour chaque employé listé :
https://github.com/search?type=commits&q=%22$CIBLE%22
https://github.com/search?type=code&q=%22$CIBLE%22+password
https://github.com/search?type=code&q=%22$CIBLE%22+AKIA
https://github.com/search?type=code&q=%22$CIBLE%22+secret
Le pattern AKIA cherche des clés AWS. Le pattern password cherche… des mots de passe. Vous n'y trouverez pas toujours quelque chose ; quand vous trouvez, c'est de l'or.
3. Pastebin / Ghostbin / Rentry via Google :
site:pastebin.com "$CIBLE"
site:ghostbin.co "$CIBLE"
"$CIBLE" password ext:txt
Notez dans leaks/synthese.md :
- Nombre d'emails cible fuités et dans quels dumps.
- Toute clé, tout mot de passe, tout secret trouvé dans les 3 dernières années.
Étape 8 — Archives Wayback (10 min)
curl -s "https://web.archive.org/cdx/search/cdx?url=$CIBLE/*&output=json&limit=500" \
| jq -r '.[1:] | .[] | .[2]' \
| sort -u > archive/urls.txt
grep -iE 'admin|backup|debug|swagger|api-doc|test|internal|dev|graphql|env|config|status' archive/urls.txt \
> archive/interessants.txt
wc -l archive/urls.txt archive/interessants.txt
Notez, dans fiche-cible.md, les 5 à 10 URLs les plus intéressantes trouvées dans les archives — à revalider en semaine 4.
Étape 9 — Google Dorks (15 min)
Ouvrez Google (ou DuckDuckGo, moins bruyant) et exécutez au minimum ces requêtes, en variant :
site:$CIBLE inurl:admin
site:$CIBLE inurl:login
site:$CIBLE inurl:.git
site:$CIBLE ext:sql
site:$CIBLE ext:env
site:$CIBLE ext:log
site:$CIBLE ext:bak
site:$CIBLE intitle:"index of"
site:$CIBLE "internal use only"
site:$CIBLE "confidential"
site:$CIBLE "-----BEGIN" # début de clés PGP/RSA
site:*.amazonaws.com "$CIBLE" # buckets S3 nommés
site:*.blob.core.windows.net "$CIBLE" # blobs Azure
site:*.digitaloceanspaces.com "$CIBLE"
Prenez capture de tout résultat non trivial. Ne cliquez pas depuis Google (le clic passe par un redirector Google mais atterrit chez la cible = actif). Copiez-collez l'URL dans une fenêtre curl -I -A "Mozilla/5.0" plus tard, en semaine 4, en actif assumé.
Étape 10 — Consolidation (30 min)
Ouvrez fiche-cible.md et remplissez rigoureusement les sections suivantes. Chaque section a des critères d'exhaustivité.
# Fiche cible — <CIBLE> (<date>)
## 0. Scope et autorisation
[le bloc de l'étape 1, avec l'URL du programme]
## 1. Actifs confirmés
- Domaine racine + registrar
- <N> sous-domaines collectés (sources : crt.sh, subfinder, amass)
- Sous-domaines les plus intéressants (5-10, avec IP + note)
## 2. Adressage
- Blocs et fournisseurs (Cloudflare, AWS, Azure, GCP, OVH, Vultr…)
- IPs hors CDN identifiées
## 3. Technologies
- Front, backend, base de données probable
- Serveurs web et versions (via Shodan)
- SaaS liés (Stripe, Twilio, Sentry, Datadog… vus dans SPF ou headers)
## 4. Posture email
- MX
- SPF (liste des include)
- DMARC (politique, alignement)
- DKIM présent ?
## 5. Personnes clés (>= 15)
- Fichier people/personnes.csv joint
## 6. Fuites publiques
- HIBP : <N> comptes concernés, dumps
- GitHub : secrets trouvés (préciser dépôt, fichier, type de secret)
- Pastebin / Google : trouvailles
## 7. Cinq cibles prioritaires (ordre décroissant)
1. <cible> — <raison> — <effort estimé pour confirmer>
2. ...
3. ...
4. ...
5. ...
## 8. Prochaine étape (module 4)
- Plan de la phase active : quel sous-domaine, quel outil, quelle fenêtre.
- Points à négocier au RoE (si sous-domaine découvert hors scope original).
Grille d'auto-évaluation
- Le programme de bug bounty et son scope sont cités en tête de la fiche.
- Au moins 50 sous-domaines collectés (viser 100+ sur une cible normale).
- Recoupement fait :
crt.sh+subfinder+amass(les 3, pas juste un). - Toutes les IPs sont classées CDN / non-CDN / privée.
- Posture email documentée (SPF, DMARC, DKIM).
- Au moins 15 personnes avec leur email deviné à partir du pattern.
- Au moins une source de fuite consultée (HIBP ou GitHub Search).
- Wayback Machine consultée, top URLs notées.
- Cinq cibles prioritaires classées avec justification.
- Aucune commande n'a touché la cible. Aucun scan. Aucun
curldirect.
Toutes cochées ? Votre fiche est prête à alimenter la semaine 4.
Ce qui bloque en général
- Peu de sous-domaines : la cible est petite, ou majoritairement derrière un CDN qui masque bien. Passez plus de temps sur GitHub et LinkedIn.
- Pas d'accès à Shodan/HIBP : versions gratuites disponibles, moins riches. Ou attendez la fin du cours, ça vaut l'abonnement.
- theHarvester rend peu : LinkedIn ferme régulièrement l'accès Bing. Faites l'organigramme à la main, c'est 30 minutes.
- Tentation de scanner : c'est le signe qu'on n'a pas assez creusé les sources passives. Retournez chercher.
Ce que vous emportez de cet atelier
- Un workflow reproductible en 2 h sur n'importe quelle cible autorisée.
- Une fiche de 2 pages qui sera la référence pour tous les modules suivants sur cette cible.
- L'instinct de reconnaître un sous-domaine intéressant en une seconde.
- La discipline de ne rien envoyer avant d'avoir tout regardé.