feat: Semaine 10

This commit is contained in:
gauvainboiche
2026-06-12 20:25:28 +02:00
parent ce1f0e513a
commit d3d2416dea
91 changed files with 4317 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
# TP3 - Florian POMPIDOU
PS : tous les passages entre parenthèses et ENTIEREMENT en italiques (*comme cei donc*) sont des appartés, des commentaires que je fais moi en dehors du rapport. Ils apportent précisions ou explications en dehors du rapport, comme s'ils n'existaient pas dans le rapport final.
Merci d'en tenir compte.
## Demande client
> Votre chef de mission a transmis votre rapport JSON d'hier au directeur technique. Retour dans la matinée :
> "Bonne cartographie technique. Maintenant le client veut savoir s'il est exposé côté humain aussi — est-ce qu'on peut remonter aux admins, aux devs, identifier des patterns d'emails, des fuites de credentials ? Et si on trouve des documents internes accessibles avec des metadata exploitables, c'est un finding critique. Allez-y."
> Vous définissez votre propre approche.
## 0. Préparation opérationnelle
Compte tenu des précédents rapports, il a été établi pour Tesla, avec son domaine principal `tesla.com` :
- La découverte en surface de plus de 70 sous-domaines, incluant sous-domaines commerciaux et techniques (APIs, environnements de préprod, noms NetBIOS, etc)
- La découverte de ports exposés, avec des services aux CVEs connues
- La cartographie globale de l'environnement technique
Le client demande maintenant les capacités non plus de surface d'attaque *technique* mais *sociale* : courriels exposés, noms corrélés, identifiants fuités, documents accessibles, etc.
Pour les besoins d'analyse **passive** (à la demande du client) et pour obtenir ces informations, le choix s'est porté sur la solution **Maltego** en mode **Discret** (Stealth), afin de n'utiliser que des rapports et analyses tierces, sans communication directe avec les serveurs.
## 1. Première topologie
Inscrivant le domaine `tesla.com` comme élément de recherche racine, une première topologie des sous-domaines par recherche DNS s'impose :
![alt text](image.png)
La transformation des noms DNS en adresses IP permet de retrouver la topologie extraite lors des documents précédents.
Une recherche de courriels sur la base du domaine racine permet de trouver une surface classique d'adresses accessibles depuis les pages publiques (équivalent "Contactez-nous", "Mentions Légales", etc) :
![alt text](image-1.png)
En faisant une recherche selon les signatures PGP (**Pretty Good Privacy**, protocole de chiffrement des courriels) on peut retrouver un serveur commun et tenter de recroiser les informations :
![alt text](image-5.png)
De fait, nous pouvons apercevoir des courriels signés de la même façon, et donc par le même serveur central :
![alt text](image-6.png)
La structure semble indiquer, exceptions faites de "AlexSmith", "elon" et "elonmusk", la premmière lettre du prénom suivi du nom de famille attaché, sans tiret ni point.
## 2. Recherche de courriels
Avec le moteur de recherche dédié `hunter.io`, on peut faire usage d'une recherche de courriels "égarés" (annonces d'emplois, publications sur les réseaux sociaux, cartes de visites, etc) :
![alt text](image-2.png)
Le résultat fait état de plus de 500 adresses courriels, donc une majorité génériques, mais aussi celles de personnes, dont les 4 premières révélées nous informent sur le patron de fabrication des adresses :
![alt text](image-3.png)
A noter : les trois premiers retours indiquent des profils LinkedIn et plusieurs sources externes à Tesla :
![alt text](image-4.png)
La source "driveteslacanada.ca" semble être un site de fan, tandis que "patchwork.ozlabs.org" semble être un site type "Pastebin"
Conclusion rapide et croisée est faite sur le format : `p`rénom`nom`@tesla.com. Nous pouvons alors reprendre une investigation avec LinkedIn et chercher des employés de haute stature directement [sur la page LinkedIn, section "Personnes"](https://www.linkedin.com/company/tesla-motors/people/) pour trouver une liste relativement à jour des employés actuels, et retrouver leur courriel.
## 3. Recherche d'individus
Prenant l'exemple de ["Manal FENNIRI"](https://www.linkedin.com/in/manal-fenniri-a7ab7a150/), Titre "Associate HR Operations and Payroll Specialist", je reprend la structure et utilise un outil ordinaire, en l'occurence "Email Checker" de "MailMeteor" pour vérifier la validité de la structure du courriel :
![alt text](image-7.png)
On peut en conclure que la structure est toujours utilisée aujourd'hui.
Une contre-recherche de courriel à personne permet d'identifier les individus à partir des courriels extraits par recherche PGP, avec quelques ratés/approximations néanmoins :
![alt text](image-8.png)
![alt text](image-9.png)
![alt text](image-10.png)
## 4. Recherche de fuites d'identifiants
La diffusion - involontaire ou malveillante - de mots de passe, de Jetons d'accès ou de Clefs APIs est encore monnaie courante. Une recherche sur Github avec des mots clefs ciblés, à savoir en première instance `tesla.com API_KEY=` permet de cibler les croisements entre Tesla et les endroits où la variable `API_KEY=` est définie, formulation standard en base de code, permettant de vérifier la présence de lignes en dur plutôt qu'en dynamique.
On retrouve effectivement une fuite du service "Boomerang" dans le code source Tesla :
![alt text](image-11.png)
(*Il s'agit d'un repo "public-bugbounty-data", donc techniquement pour qu'on repère ce genre de fuite, ça ne compte pas "vraiment". [Par contre j'ai trouvé un guignol non lié à Tesla qui a vraiment fait fuité la sienne.](https://github.com/jmd406-sanjaykumarj/llm-train/blob/46b01b623735da5f7f6bb9bb80f8a83a2f3647d5/scraper.py#L14)*)
Un script Python `hibp_bulk_checker.py` (*généré par IA*) itérant sur chaque adresse d'un fichier "addresses.txt" permet d'exporter dans un fichier CSV
## 5. Documents publics
Les documents accessibles publiquement sur le site sont des notices techniques de véhicules de plusieurs pays différents en plusieurs alphabets différents. Les métadonnées indiquent juste les informations de création des documents, les auteurs et les formats de sortie. Rien ne semble, en surface, exploitable comme tel.
(*Je n'ai rien trouvé de concret.*)
## 6. Recommendations finales
Pour pallier à toutes ces fuites, plusieurs axes d'améliorations, du plus simple (simples rappels de sécurité, modules de formation, etc) au plus complexe (changement de paradigme, matériel de sécurité supplémentaire, rotation complète de la base courriel, etc) :
1. Pas d'inscription "personnelle" depuis un compte courriel professionnel
2. Pas d'usage multiplié d'un unique mot de passe
3. Activation de l'Authentification a Facteur Multiple dès que possible
4. Pas de génération de clef API sauf nécessité absolue (privilégier accès SSO)
5. Secrets techniques gérés en Coffre-Fort type VAULT
6. Chiffrement courriel géré par le client
7. Adjonction de caractères aléatoires à la structure des courriels (type jsmith038@tesla.com) pour éviter les recoupements
8. Activer le téléversement des documents publics avec suppression totale et définitive des métadonnées
Binary file not shown.
Binary file not shown.
+333
View File
@@ -0,0 +1,333 @@
# TP4 - Florian POMPIDOU
NB : Encore une fois, tout passage entre parenthèses et INTEGRALEMENT en italique (comme ceci) constitue un commentaire hors-rapport, pour donner du contexte ou du détail.
## Demande client
> Votre chef de mission vous contacte une dernière fois en fin d'après-midi :
> "Le RSSI de Tesla veut un document livrable propre d'ici 17h. Pas un dump de terminal — un rapport structuré qu'il peut présenter à son DG demain matin. Résumé exécutif, surface d'attaque, findings priorisés, recommandations actionnables. Et nettoyez vos métadonnées avant d'envoyer."
> Vous produisez le rapport final.
## 1. Résumé
A la demande du client (ici nommé **Tesla Motors**), la société **Synapse Security** a conduit un ensemble de recherches et de dévoilement de surfaces d'attaques techniques et sociales dans un contexte dit **Passif** (c'est à dire par la récupération de rapports, d'analyses et d'éléments tiers sans approche directe) pour simuler, au mieux, les capacités d'Intelligence en Sources Ouvertes (dites **OSINT**) venues d'individus isolés ou d'organisations désireuses d'agir sans trace.
Après une analyse topographique classique en partant du domaine principal et commercialement exploité `tesla.com`, et par un maillage d'outils spécialisés disponibles gratuitement dans leur version la plus simple pour la plupart des systèmes d'exploitation :
- **Synapse Security** peut attester que les informations autour des domaines et sous-domaines sont bien accessibles depuis l'extérieur, avec ou sans obfuscation
- Que la structure de l'environnement technique est trop facilement exploitable en l'état, avec l'ensemble des sous-domaines techniques, administratifs et de test accessibles
## 2. Périmètre
**Synapse Security** a procédé à plusieurs analyses de surface selon les besoins concrets de chaque périmètre :
- Le domaine racine et ses sous-domaines
- Les équipements affectés par chaque des précédents (sous-)domaines
- Les technologies utilisées derrière chaque équipement
- Les vulnérabilités derrière chaque technologie
## 3. Périmètres techniques
### A. Outils primaires grand publics
Les informations relevées par des outils basiques "WHO IS", accessibles depuis de nombreux sites internet spécialisés, indiquent une structure nominale basique et sécurisée. Date de dépôt du nom de domaine, serveurs courriels, informations sur les services autorisés à user du domaine `tesla.com`, etc.
### B. Moteur de recherche "Internet Of Things"
En deuxième instance, nous avons relevé les équipements liés à `tesla.com` depuis un moteur de recherche spécialisé dans l'Internet Des Objets (IoT), **Censys**, capable de relever tout équipement publiquement accessible, même si noyé dans la masse informative.
(*Requête Censys utilisée, mais derrière plan payant :*)
```sql
(tesla.com) and (web.cert.names = tesla.com) and (host.services.vulns.id: * or web.vulns.id: *)
```
Les premiers rapports relèvent les adresses, emplacements, prestataires et nature des équipements constituant l'infrastructure de `tesla.com`, à savoir nominativement des bases de données, des unités de calcul et éléments de publication web, situés majoritairement aux Etats-Unis, avec réplication locale en Allemagne, loué quasi intégralement chez AKAMAI.
Ce moteur indique également les ports ouverts sur chaque équipement, les services connectés derrière chacun d'eux, et recoupe ces informations avec les bases de données publiques sur les vulnérabilités techniques, dites CVEs.
### C. Surface d'attaque par Ingénierie Sociale
En troisième instance, **Synapse Security** a procédé par le biais d'un outil de recherche relationnelle d'éléments, via l'outil **Maltego**, à trouver toute fuite potentielle d'éléments permettant d'établir un organigramme avec éléments personnels - comme les adresses courriel - et une base de contact non sanctionnée.
Par un recoupement depuis le domaine `tesla.com` et sur base d'une terminaise d'adresse en `@tesla.com` a été établi une liste de plus de 50 personnes, incluant des membres de la direction, dont les sources renvoyaient vers des blogs amateurs, des sites d'affichage de rapports techniques (sans gravité ni éléments confidentiels) ainsi que des espaces de recrutement.
Récupérant ces informations, nous avons pu identifier :
- la structure d'adressage interne
- un organigramme des personnes à responsabilité (Ressources Humaines, Direction Générale, etc) ainsi que leurs adresses pprofessionnelles
- les profils sur les réseaux sociaux
### D. Recherche d'éléments techniques fuités dans le code source ouvert
Des examens sur **GitHub**, dépôt centralisé de codes sources (ouverts ou fermés) dont celui de **Tesla Motors**, il a été retrouvé plusieurs morceaux incluant des informations de connexion tiers (nominativement une clef API [permettant la connexion à des services par ligne de commande] ainsi qu'un compte de test avec un mot de passe en clair prédéfini).
### E. Surface d'attaque par exploitation des métadonnées
En dernière instance, les documents accessibles, intégralement des documents techniques à usage des particuliers et des concessionnaires, ont semblé comporter des métadonnées attendues pour de tels documents, et ne semble constituer aucun problème majeur.
## 4. Failles majeures
(*Faute de rapport généré par moi, voici un relevé de CVEs passées autour de tesla.com. Relevé et détails donnés par Gemini Pro 3.5 en mode Raisonnement.*)
### A. Interface de gestion détournable sur serveur principal
- `Élement concerné `: Interface F5 BIG-IP
- `Description `: Un serveur exécutant l'interface de gestion TMUI a été concerné par la "CVE-2023-46747", permettant l'accès au compte administrateur total du serveur
- `Criticité `: 80/100 (Critique)
- `Points de faille `:
- Version FR BIG-IP 17.x
- `Correction `: Mise à jour de version
### B. Injection de script malveillant sur le portail employé Support
- `Élement concerné `: Zone support de tesla.com
- `Description `: Le portail de connexion des employés `support.tesla.com` et `vitals.tesla.com` permettent l'injection de script (vulnérabilité Cross-Site Scripting, dite XSS) envoyé depuis les formulaires accessibles au client, exécuté avec les privilèges des employés connectés.
- `Criticité `: 59,5/100 (Elevé)
- `Points de faille `:
- Code source propriétaire mal revu
- `Correction `: Revue de code prioritaire
### C. Injection de script malveillant sur la page d'achat
- `Élement concerné `: Page de paiement de tesla.com
- `Description `: La page gérant le tunnel d'achat et le configurateur des paiements permet également l'injection de script (XSS), le serveur principal pouvant recevoir des requêtes de paiement de domaines n'étant pas `tesla.com`.
- `Criticité `: 45/100 (Moyenne)
- `Points de faille `:
- API HTML5 window.postMessage mal utilisé et mal implémenté
- `Correction `: Revue de code prioritaire
### D. Certificats de sous-domaines expirés
- `Élement concerné `: Sous-domaines avec certificat de sécurité/authenticité expiré
- `Description `: Plusieurs sous-domaines (notamment engage.tesla.com) ont
- `Criticité `: 28/100 (Faible)
- `Points de faille `:
- Erreur de gestion dans le renouvellement des certificats
- `Correction `: Renouvellement manuel, puis reprise des mécaniques de renouvellement automatique
## 5. Recommendations
Les recommandations pour éviter les attaques exploitant ces aspects évoqués :
1. Utiliser des domaines racines différents selon l'environnement
- tesla.com pour la vitrine commerciale
- tesla.net pour les APIs et autres serveurs "privés" devant communiquer aux éléments publics (comme les véhicules)
- tesla.io pour la préproduction et les environnements de test, accessible UNIQUEMENT derrière un VPN d'entreprise
2. Utiliser un autre paradigme pour les courriels internes
1. Utiliser un nom de domaine racine différent, type `people-tesla.com`
2. Ajouter un identifiant numérique après la structure pnom@tesla.com pour randomiser les adresses
3. Mise à jour de la base de code et des versions logicielles en priorité
4. Mettre en place des tests unitaires avec des analyseurs de code statique (type **SonarQube**) pour vérifier l'absence d'identifiants en dur
## 6. Annexes
### Annuaire d'adresses
![alt text](image-6.png)
### Sources des fuites d'adresses
![alt text](image-4.png)
### Individus avec profils sociaux
![alt text](image-10.png)
### Identifiants en base de code
![alt text](image-11.png)
## HORS RAPPORT : Les métadonnées
Partie Hors Rapport, donc c'est moi qui parle.
J'exporte le MarkDown en PDF (je fais un premier export avant de rédiger pour exploiter les métadonnées) et voici le retour terminal :
```powershell
> exiftool .\TP4_BOICHE_Gauvain.pdf
ExifTool Version Number : 13.59
File Name : TP4_BOICHE_Gauvain.pdf
Directory : .
File Size : 794 kB
File Modification Date/Time : 2026:06:09 17:14:56+02:00
File Access Date/Time : 2026:06:09 17:16:09+02:00
File Creation Date/Time : 2026:06:09 15:52:39+02:00
File Permissions : -rw-rw-rw-
File Type : PDF
File Type Extension : pdf
MIME Type : application/pdf
PDF Version : 1.4
Linearized : No
Page Count : 7
Tagged PDF : Yes
Language : en-US
Title : TP4_BOICHE_Gauvain.md
Creator : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/149.0.0.0 Safari/537.36 Edg/149.0.0.0
Producer : Skia/PDF m149
Create Date : 2026:06:09 15:14:55+00:00
Modify Date : 2026:06:09 15:14:55+00:00
> exiftool .\TP4_BOICHE_Gauvain.md
ExifTool Version Number : 13.59
File Name : TP4_BOICHE_Gauvain.md
Directory : .
File Size : 8.9 kB
File Modification Date/Time : 2026:06:09 17:14:52+02:00
File Access Date/Time : 2026:06:09 17:14:52+02:00
File Creation Date/Time : 2026:06:09 15:48:39+02:00
File Permissions : -rw-rw-rw-
File Type : TXT
File Type Extension : txt
MIME Type : text/plain
MIME Encoding : utf-8
Byte Order Mark : No
Newlines : Windows CRLF
Line Count : 139
Word Count : 1218
```
Ce n'est pas grand chose. Je prends un de mes vieux CV pour voir si les métadonnées que j'y ai passées sont bien affichées :
```powershell
> exiftool .\BOICHE_Gauvain_CV_Devops_01.pdf
ExifTool Version Number : 13.59
File Name : BOICHE_Gauvain_CV_Devops_01.pdf
Directory : .
File Size : 285 kB
File Modification Date/Time : 2025:07:25 11:08:52+02:00
File Access Date/Time : 2025:07:31 09:52:20+02:00
File Creation Date/Time : 2025:07:25 11:08:52+02:00
File Permissions : -rw-rw-rw-
File Type : PDF
File Type Extension : pdf
MIME Type : application/pdf
PDF Version : 1.7
Linearized : Yes
Language : fr-FR
XMP Toolkit : Adobe XMP Core 9.1-c002 79.a6a6396, 2024/03/12-07:48:23
Format : application/pdf
Title : Curriculum Vitae - Gauvain BOICHë
Creator : Gauvain BOICHë
Rights : Les ®l®ments pr®sents peuvent librement servir d'inspiration.
Create Date : 2025:07:25 11:08:51+02:00
Metadata Date : 2025:07:25 11:08:51+02:00
Modify Date : 2025:07:25 11:08:51+02:00
Creator Tool : Adobe InDesign 19.4 (Windows)
Instance ID : uuid:1abfa9bc-9932-4199-91e0-8d855f45b98d
Original Document ID : xmp.did:3d94839e-3e42-d742-8ba4-d2b929b49275
Document ID : xmp.id:94e5fbe4-11d0-f245-8fb0-2d135c6aa1cb
Rendition Class : proof:pdf
History Action : converted
History Parameters : from application/x-indesign to application/pdf
History Software Agent : Adobe InDesign 19.4 (Windows)
History Changed : /
History When : 2025:07:25 11:08:51+02:00
Derived From Instance ID : xmp.iid:7cd9b83f-2caa-f944-9109-f24033eabcec
Derived From Document ID : xmp.did:3d94839e-3e42-d742-8ba4-d2b929b49275
Derived From Original Document ID: xmp.did:3d94839e-3e42-d742-8ba4-d2b929b49275
Derived From Rendition Class : default
Authors Position : Administrateur Syst¿mes & R®seaux
Country : France
City : [Ca je censure pour ici, faut pas déconner]
Date Created : 2024:03:09 17:00
Marked : False
Producer : Adobe PDF Library 17.0
Trapped : False
Creator Work Telephone : [Ca je censure pour ici, faut pas déconner]
Creator Work Email : [Ca je censure pour ici, faut pas déconner]
Creator Work URL : https://gauvainboiche.bzh
Creator City : [Ca je censure pour ici, faut pas déconner]
Creator Country : [Ca je censure pour ici, faut pas déconner]
Creator Postal Code : [Ca je censure pour ici, faut pas déconner]
Page Layout : OneColumn
Page Count : 1
Profile CMM Type : Linotronic
Profile Version : 2.1.0
Profile Class : Display Device Profile
Color Space Data : RGB
Profile Connection Space : XYZ
Profile Date Time : 1998:02:09 06:49:00
Profile File Signature : acsp
Primary Platform : Microsoft Corporation
CMM Flags : Not Embedded, Independent
Device Manufacturer : Hewlett-Packard
Device Model : sRGB
Device Attributes : Reflective, Glossy, Positive, Color
Rendering Intent : Perceptual
Connection Space Illuminant : 0.9642 1 0.82491
Profile Creator : Hewlett-Packard
Profile ID : 0
Profile Copyright : Copyright (c) 1998 Hewlett-Packard Company
Profile Description : sRGB IEC61966-2.1
Media White Point : 0.95045 1 1.08905
Media Black Point : 0 0 0
Red Matrix Column : 0.43607 0.22249 0.01392
Green Matrix Column : 0.38515 0.71687 0.09708
Blue Matrix Column : 0.14307 0.06061 0.7141
Device Mfg Desc : IEC http://www.iec.ch
Device Model Desc : IEC 61966-2.1 Default RGB colour space - sRGB
Viewing Cond Desc : Reference Viewing Condition in IEC61966-2.1
Viewing Cond Illuminant : 19.6445 20.3718 16.8089
Viewing Cond Surround : 3.92889 4.07439 3.36179
Viewing Cond Illuminant Type : D50
Luminance : 76.03647 80 87.12462
Measurement Observer : CIE 1931
Measurement Backing : 0 0 0
Measurement Geometry : Unknown
Measurement Flare : 0.999%
Measurement Illuminant : D65
Technology : Cathode Ray Tube Display
Red Tone Reproduction Curve : (Binary data 2060 bytes, use -b option to extract)
Green Tone Reproduction Curve : (Binary data 2060 bytes, use -b option to extract)
Blue Tone Reproduction Curve : (Binary data 2060 bytes, use -b option to extract)
Author : Gauvain BOICHë
```
C'est déjà plus rigolo. Mais contrôlé.
Voici un effet de nettoyage du PDF :
```powershell
> exiftool .\TP4_BOICHE_Gauvain.pdf
ExifTool Version Number : 13.59
File Name : TP4_BOICHE_Gauvain.pdf
Directory : .
File Size : 794 kB
File Modification Date/Time : 2026:06:09 17:14:56+02:00
File Access Date/Time : 2026:06:09 17:16:22+02:00
File Creation Date/Time : 2026:06:09 15:52:39+02:00
File Permissions : -rw-rw-rw-
File Type : PDF
File Type Extension : pdf
MIME Type : application/pdf
PDF Version : 1.4
Linearized : No
Page Count : 7
Tagged PDF : Yes
Language : en-US
Title : TP4_BOICHE_Gauvain.md
Creator : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/149.0.0.0 Safari/537.36 Edg/149.0.0.0
Producer : Skia/PDF m149
Create Date : 2026:06:09 15:14:55+00:00
Modify Date : 2026:06:09 15:14:55+00:00
> exiftool -all= .\TP4_BOICHE_Gauvain.pdf
Warning: [minor] ExifTool PDF edits are reversible. Deleted tags may be recovered! - ./TP4_BOICHE_Gauvain.pdf
1 image files updated
> exiftool .\TP4_BOICHE_Gauvain.pdf
ExifTool Version Number : 13.59
File Name : TP4_BOICHE_Gauvain.pdf
Directory : .
File Size : 794 kB
File Modification Date/Time : 2026:06:09 17:21:50+02:00
File Access Date/Time : 2026:06:09 17:21:50+02:00
File Creation Date/Time : 2026:06:09 15:52:39+02:00
File Permissions : -rw-rw-rw-
File Type : PDF
File Type Extension : pdf
MIME Type : application/pdf
PDF Version : 1.4
Linearized : No
Page Count : 7
Tagged PDF : Yes
Language : en-US
```
Binary file not shown.
+104
View File
@@ -0,0 +1,104 @@
import os
import csv
import time
import urllib.parse
import requests
INPUT_FILE = "./addresses.txt"
OUTPUT_FILE = "./resultats_hibp.csv"
API_KEY = "API_KEY"
USER_AGENT = "Python-HIBP-Bulk-Checker"
BASE_URL = "https://haveibeenpwned.com/api/v3/breachedaccount/"
def check_email(email, api_key):
encoded_email = urllib.parse.quote(email.strip())
url = f"{BASE_URL}{encoded_email}?truncateResponse=true"
headers = {
"hibp-api-key": api_key,
"user-agent": USER_AGENT
}
while True:
try:
response = requests.get(url, headers=headers)
if response.status_code == 200:
# Found breaches
data = response.json()
breach_names = [breach['Name'] for breach in data]
return "Compromis (Pwned)", len(breach_names), "; ".join(breach_names)
elif response.status_code == 404:
# Didn't find anything, means no breach or email doesn't exists
return "Sûr (Clean)", 0, ""
# Exceptions (technicalities)
elif response.status_code == 429:
retry_after = int(response.headers.get("Retry-After", 2))
print(f" [!] Limite de requêtes atteinte. Pause forcée de {retry_after} secondes...")
time.sleep(retry_after)
continue
elif response.status_code == 401:
return "Erreur (Clé API invalide ou manquante)", 0, ""
elif response.status_code == 403:
return "Erreur (Accès interdit / User-Agent bloqué)", 0, ""
else:
return f"Erreur (Code HTTP {response.status_code})", 0, ""
except requests.exceptions.RequestException as e:
return f"Erreur de connexion ({str(e)})", 0, ""
def main():
if not os.path.exists(INPUT_FILE):
print(f"[-] Erreur : Le fichier '{INPUT_FILE}' est introuvable.")
print(f"[*] Veuillez créer un fichier texte nommé '{INPUT_FILE}' à côté du script,")
print("[*] et ajoutez-y une adresse email par ligne.")
return
if API_KEY == "VOTRE_CLE_API_ICI" or not API_KEY:
print("[!] Attention : N'oubliez pas d'insérer votre clé API HaveIBeenPwned dans la variable 'API_KEY'.")
print("[!] L'API v3 de HIBP nécessite obligatoirement une clé authentifiée (abonnement payant).")
print("-" * 60)
with open(INPUT_FILE, "r", encoding="utf-8") as f:
emails = [line.strip() for line in f if line.strip()]
if not emails:
print(f"[-] Le fichier '{INPUT_FILE}' est vide. Aucune adresse à analyser.")
return
print(f"[*] Démarrage de l'analyse pour {len(emails)} adresse(s) email...")
print(f"[*] Les résultats seront enregistrés dans '{OUTPUT_FILE}'.\n")
with open(OUTPUT_FILE, "w", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["Email", "Statut", "Nombre de Breches", "Liste des Breches"])
for index, email in enumerate(emails, 1):
print(f"[{index}/{len(emails)}] Analyse de : {email} ...")
status, count, breaches = check_email(email, API_KEY)
writer.writerow([email, status, count, breaches])
if count > 0:
# Has Been PWNED
print(f" -> {status} ! Trouvé dans {count} brèche(s) : {breaches}")
elif status == "Sûr (Clean)":
# Hasn't been
print(" -> Aucun problème détecté.")
else:
# Exception
print(f" -> {status}")
time.sleep(1.5)
print(f"\n[+] Analyse terminée avec succès !")
print(f"[+] Fichier de résultats généré : '{OUTPUT_FILE}'")
if __name__ == "__main__":
main()
Binary file not shown.

After

Width:  |  Height:  |  Size: 558 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 688 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

+31
View File
@@ -0,0 +1,31 @@
[6/9/26, 10:05 AM] INFO Running transform [Utilities] To DNS Name (interesting) [SecurityTrails] on 1 entities (from entity "tesla.com")
[6/9/26, 10:05 AM] INFO Transform [Utilities] To DNS Name (interesting) [SecurityTrails] completed in 4 s 372 ms with 24 entities returned (from entity "tesla.com")
[6/9/26, 10:08 AM] INFO Running transform [Utilities] To IP Address [DNS] on 24 entities (from 24 entities)
[6/9/26, 10:08 AM] WARNING DNS record not found (from 24 entities)
[6/9/26, 10:09 AM] WARNING No answer (from 24 entities)
[6/9/26, 10:09 AM] WARNING DNS record not found (from 24 entities)
[6/9/26, 10:09 AM] INFO Transform [Utilities] To IP Address [DNS] completed in 6 s 481 ms with 27 entities returned (from 24 entities)
[6/9/26, 10:09 AM] INFO Running transform [Utilities] To Email address [From whois info] on 16 entities (from 16 entities)
[6/9/26, 10:09 AM] INFO Transform [Utilities] To Email address [From whois info] completed in 4 s 579 ms with 69 entities returned (from 16 entities)
[6/9/26, 10:46 AM] INFO Running transform [Utilities] To Emails @domain [Search Engine] on 1 entities (from entity "tesla.com")
[6/9/26, 10:47 AM] INFO Transform [Utilities] To Emails @domain [Search Engine] completed in 13 s 911 ms with 10 entities returned (from entity "tesla.com")
[6/9/26, 10:51 AM] INFO Running transform [Utilities] To IP Address [DNS] on 7 entities (from 7 entities)
[6/9/26, 10:51 AM] WARNING DNS record not found (from 7 entities)
[6/9/26, 10:51 AM] WARNING No answer (from 7 entities)
[6/9/26, 10:51 AM] WARNING DNS record not found (from 7 entities)
[6/9/26, 10:51 AM] INFO Transform [Utilities] To IP Address [DNS] completed in 2 s 210 ms (from 7 entities)
[6/9/26, 10:52 AM] INFO Running transform [Utilities] To Email Addresses [Search Engine] on 1 entities (from entity "tesla.com")
[6/9/26, 10:52 AM] INFO Transform [Utilities] To Email Addresses [Search Engine] completed in 13 s 668 ms with 3 entities returned (from entity "tesla.com")
[6/9/26, 10:52 AM] INFO Running transform [Utilities] To Emails @domain [Search Engine] on 1 entities (from entity "tesla.com")
[6/9/26, 10:53 AM] INFO Transform [Utilities] To Emails @domain [Search Engine] completed in 14 s 688 ms with 10 entities returned (from entity "tesla.com")
[6/9/26, 11:06 AM] INFO Running transform [Utilities] To Email Addresses [PGP] on 1 entities (from entity "tesla.com")
[6/9/26, 11:06 AM] INFO Transform [Utilities] To Email Addresses [PGP] completed in 2 s 862 ms with 24 entities returned (from entity "tesla.com")
[6/9/26, 11:19 AM] INFO Running transform [Utilities] To Files (Office) [Search Engine] on 1 entities (from entity "tesla.com")
[6/9/26, 11:19 AM] INFO Transform [Utilities] To Files (Office) [Search Engine] completed in 4 s 226 ms with 23 entities returned (from entity "tesla.com")
[6/9/26, 11:20 AM] INFO Running transform [Utilities] Parse meta information on 4 entities (from 4 entities)
[6/9/26, 11:20 AM] INFO Transform [Utilities] Parse meta information completed in 2 s 774 ms with 8 entities returned (from 4 entities)
[6/9/26, 11:22 AM] INFO Running transform [Utilities] To Person [PGP] on 37 entities (from 37 entities)
[6/9/26, 11:22 AM] INFO Transform [Utilities] To Person [PGP] completed in 7 s 833 ms with 31 entities returned (from 37 entities)
[6/9/26, 11:56 AM] INFO Running transform [Utilities] To Snapshots of Files (MimeType) [Wayback Machine] on 1 entities (from entity "tesla.com")
[6/9/26, 11:57 AM] WARNING Exception: Could not connect to Wayback server (from entity "tesla.com")
[6/9/26, 11:57 AM] INFO Transform [Utilities] To Snapshots of Files (MimeType) [Wayback Machine] completed in 32 s 8 ms (from entity "tesla.com")
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB