feat: Semaine 10
@@ -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 :
|
||||
|
||||

|
||||
|
||||
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) :
|
||||
|
||||

|
||||
|
||||
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 :
|
||||
|
||||

|
||||
|
||||
De fait, nous pouvons apercevoir des courriels signés de la même façon, et donc par le même serveur central :
|
||||
|
||||

|
||||
|
||||
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) :
|
||||
|
||||

|
||||
|
||||
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 :
|
||||
|
||||

|
||||
|
||||
A noter : les trois premiers retours indiquent des profils LinkedIn et plusieurs sources externes à Tesla :
|
||||
|
||||

|
||||
|
||||
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 :
|
||||
|
||||

|
||||
|
||||
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 :
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 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 :
|
||||
|
||||

|
||||
|
||||
(*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
|
||||
@@ -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
|
||||

|
||||
|
||||
### Sources des fuites d'adresses
|
||||

|
||||
|
||||
### Individus avec profils sociaux
|
||||

|
||||
|
||||
### Identifiants en base de code
|
||||

|
||||
|
||||
## 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
|
||||
```
|
||||
@@ -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()
|
||||
|
After Width: | Height: | Size: 558 KiB |
|
After Width: | Height: | Size: 564 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 688 KiB |
|
After Width: | Height: | Size: 434 KiB |
|
After Width: | Height: | Size: 177 KiB |
@@ -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")
|
||||
|
After Width: | Height: | Size: 1.2 MiB |