Aller au contenu principal

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.

Cadre strict

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.com dans 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, quarantine ou reject ? (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>, mention left 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 curl direct.

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é.