# Travail Pratique 01 - Florian POMPIDOU > Vous intégrez l'équipe Red Team de Synapse Security, une société de conseil en sécurité offensive. Premier dossier du matin : votre chef de mission vous transmet un bref email. > "Tesla vient de signer un contrat d'audit de surface. Ils exposent du SaaS B2B. On a zéro doc interne — commencez par mapper ce qui est visible de l'extérieur. Périmètre : tesla.com et ses sous-domaines. Reconnaissance passive uniquement. Réunion client dans 4h — je veux un livrable exploitable. Bon courage." > Vous n'avez aucun template, aucune liste de tâches. C'est une vraie mission. ## 0. Les prérequis - L'usage veut que j'ai quelques sécurités derrière moi. En temps normal, je me connecterais au réseau TOR quitte à sacrifier de la vitesse, sur le navigateur dédié. Pour l'exercice, je vais simplement passer sur un **VPN double-connexion Islande -> Pays-Bas -> Ordinateur**. - En plus de cela, j'utiliserais Kali 2025.4 sur VirtualBox, l'image officielle de Kali, mais avec 8 vCPUs et 8GB RAM. Parce qu'elle était déjà installée et que ça ira plus vite. - Un compte SHODAN (que je ne connaissais pas mais qui va sembler pratique) avec un compte enregistré par un alias SimpleLogin gratuit derrière un compte ProtonMail secondaire. ## 1. Plan de reconnaissance documenté - Voir ce qu'on obtient en cherchant dans un moteur de recherche - Voir un résultat WHOIS - Voir un résultat SHODAN - Voir un rapport récupéré de quelqu'un d'autre qui aurait fait un NMAP (c'est passif !) ### Moteur de recherche tesla.com, c'est facile à taper. On regarde la première page et voyons ce qu'on peut relever : ![alt text](image-1.png) Evidemment, on a la vitrine commerciale, Wikipédia et les réseaux sociaux. On peut tenter un "More results from this site" pour filtrer sur le domaine : ![alt text](image-2.png) Bon, j'ai beaucoup du domaine principal, mais je détecte en fin de page 1 (et rien en page 2) trois sous-domaines intéressants : ![alt text](image-3.png) "IR", avec en intitulé "Investor Relations". J'ouvre avec WebArchive pour voir un peu : ![alt text](image-4.png) Han. Je regarde sur ma machine Kali et même chose : ![alt text](image-5.png) Ca n'aime pas les VPNs ! Tant mieux, je n'ai pas envie d'investir dans cette boîte de merde et donner de la valeur à son abruti de patron. Et puis j'ai pas d'argent. ### WHOIS La première solution passive pour scanner un peu ce qui se tape de l'extérieur, c'est un très simple [WHOIS](https://www.whois.com). Je pourrais le faire depuis mon terminal, mais considérons que c'est de l'actif dans le cas présent. [J'obtiens un rapport classique](https://www.whois.com/whois/tesla.com) : ![alt text](image.png) Enregistré à San Francisco, depuis 1992, sécurité de base, etc. Ca ne m'apprend pas grand chose comme ça. Quelque peu déçu, je passe sur [https://mxtoolbox.com/](MXToolBox) pour avoir un WHOIS complet (incluant MX, TXT, etc) et c'est déjà plus intéressant : - [TXT](https://mxtoolbox.com/SuperTool.aspx?action=txt%3atesla.com&run=toolpage) - [MX](https://mxtoolbox.com/SuperTool.aspx?action=txt%3atesla.com&run=toolpage) - [CNAME](https://mxtoolbox.com/emailhealth/tesla.com/) => J'ai un 403. Intéressant. Ils veulent vraiment bloquer ça... - [SPF](https://mxtoolbox.com/SuperTool.aspx?action=txt%3atesla.com&run=toolpage) => Que de l'adresse fixe. On peut connaître les étendues d'IP aptes à utiliser les services Tesla, ce qui veut dire qu'en recoupant chacune et avec un test actif dans NMAP, on peut retrouver quasi TOUT l'écosystème "agreé" tesla.com. - [DNS](https://mxtoolbox.com/SuperTool.aspx?action=txt%3atesla.com&run=toolpage) - [DMARC](https://mxtoolbox.com/SuperTool.aspx?action=txt%3atesla.com&run=toolpage) Je fais deux autres services dédiés CNAME et j'ai des retours négatifs. Hm. Mais j'ai UN rapport de [WhatsMyDNS](https://www.whatsmydns.net/dns-lookup/cname-records?query=tesla.com&server=cloudflare) qui indique des autorités DNS : ``` id 64655, opcode QUERY, rcode NOERROR, flags QR RD RA ;QUESTION tesla.com. IN CNAME ;ANSWER ;AUTHORITY tesla.com. 86400 IN SOA edns69.ultradns.com. domain.teslamotors.com. 2016025264 1800 86400 86400 86400 ;ADDITIONAL ``` On a un autre domaine "teslamotors.com" qui pourrait faire l'affaire. On note en tout cas. ### SHODAN Je ne connais pas, mais je pense que ça sera plus complet. Pour "tester" comme un béotien moyen, je tape juste "tesla.com" dans la barre de recherche. Et bien... je ne suis malgré tout pas déçu : ![alt text](image-6.png) ALors je n'obtiens paaaas grand chose comme ça, mais j'ai déjà un rapport un peu plus détaillé sur ce qui est ouvert ou non : ![alt text](image-7.png) Des ports, du service web, des emplacements... des versions TLS. Empreintes JARM et JA3S... voilà, faisons comme si je connaissais. Je regarde vite fait et j'obtiens cette définition d'un article de Fastly.com (inconnu au bataillon) dans l'article "What is TLS fingerprinting ?" : > JARM is used to scan and identify servers and provides more uniqueness compared to JA3S. Unlike JA3S, which utilizes passive observation, JARM involves active scanning to solicit information from servers. Bon, je crois comprendre à peu près. Ce ne me servira pas à grand chose présentement. ### Conclusion Frustré de n'être que le passif dans cette relation, je cherche un peu par mot-clefs et j'obtiens un rapport de 2020 faisant état d'un NMAP sur tesla.com : [Recon Pipeline](https://recon-pipeline.readthedocs.io/en/latest/overview/viewing_results.html). C'est peut-être obsolète, mais sachant qu'une boîte de cette taille peut avoir des dettes techniques de 15-20 ans, je considère pour l'exercice qu'elle est encore à peu près à jour. Et c'est la poule aux oeufs d'or : ``` [db-2] recon-pipeline> view targets --paged 3.tesla.cn 3.tesla.com api-internal.sn.tesla.services api-toolbox.tesla.com api.mp.tesla.services api.sn.tesla.services api.tesla.cn api.toolbox.tb.tesla.services [db-2] recon-pipeline> view endpoints --paged [200] http://westream.teslamotors.com/y [301] https://mobileapps.teslamotors.com/aspnet_client [403] https://209.133.79.49/analog.html [302] https://209.133.79.49/api [403] https://209.133.79.49/cgi-bin/ [200] https://209.133.79.49/client [db-2] recon-pipeline> view nmap-scans --paged 2600:9000:21d4:7800:c:d401:5a80:93a1 - http =========================================== [db-2] recon-pipeline> view ports --paged apmv3.go.tesla.services: 80 autodiscover.teslamotors.com: 80 csp.teslamotors.com: 443 image.emails.tesla.com: 443 marketing.teslamotors.com: 443 partnerleadsharing.tesla.com: 443 service.tesla.cn: 80 shop.uk.teslamotors.com: 8080 sip.tesla.cn: 5061 [db-2] recon-pipeline> view searchsploit-results --paged 52.209.48.104, 34.252.120.214, 52.48.121.107, telemetry-eng.vn.tesla.services ============================================================================= local | 40768.sh | Nginx (Debian Based Distros + Gentoo) - 'logrotate' Local Privilege | Escalation remote | 12804.txt| Nginx 0.6.36 - Directory Traversal local | 14830.py | Nginx 0.6.38 - Heap Corruption webapps | 24967.txt| Nginx 0.6.x - Arbitrary Code Execution NullByte Injection dos | 9901.txt | Nginx 0.7.0 < 0.7.61 / 0.6.0 < 0.6.38 / 0.5.0 < 0.5.37 / 0.4.0 < | 0.4.14 - Denial of Service (PoC) remote | 9829.txt | Nginx 0.7.61 - WebDAV Directory Traversal remote | 33490.txt| Nginx 0.7.64 - Terminal Escape Sequence in Logs Command Injection remote | 13822.txt| Nginx 0.7.65/0.8.39 (dev) - Source Disclosure / Download remote | 13818.txt| Nginx 0.8.36 - Source Disclosure / Denial of Service remote | 38846.txt| Nginx 1.1.17 - URI Processing SecURIty Bypass remote | 25775.rb | Nginx 1.3.9 < 1.4.0 - Chuncked Encoding Stack Buffer Overflow | (Metasploit) dos | 25499.py | Nginx 1.3.9 < 1.4.0 - Denial of Service (PoC) remote | 26737.pl | Nginx 1.3.9/1.4.0 (x86) - Brute Force remote | 32277.txt| Nginx 1.4.0 (Generic Linux x64) - Remote Overflow webapps | 47553.md | PHP-FPM + Nginx - Remote Code Execution [db-2] recon-pipeline> view web-technologies --type "Programming languages" PHP (Programming languages) =========================== - www.tesla.com - dummy.teslamotors.com - 209.10.208.20 - 211.147.80.206 - trt.tesla.com - trt.teslamotors.com - cn-origin.teslamotors.com - www.tesla.cn - events.tesla.cn - 23.67.209.106 - service.teslamotors.com Python (Programming languages) ============================== - api-toolbox.tesla.com - 52.26.53.228 - 34.214.187.20 - 35.166.29.132 - api.toolbox.tb.tesla.services - toolbox.teslamotors.com - 209.133.79.93 Ruby (Programming languages) ============================ - storagesim.teslamotors.com - 209.10.208.39 ``` Voilà. Je m'arrête là, dans deux minutes je déclare la guerre nucléaire à cette entreprise des enfers. ## 2. Script Python `crtsh_recon.py` > Écrivez un script Python qui interroge l'API publique de crt.sh et extrait automatiquement les sous-domaines du domaine cible. > Comportement attendu : ``` $ python crtsh_recon.py tesla.com [*] Interrogation de crt.sh pour tesla.com... [+] 14 certificats trouvés [+] Sous-domaines uniques : api.tesla.com staging.tesla.com vpn.tesla.com ... [*] Export → tesla_subdomains.txt ``` > Le script doit : dédupliquer les résultats, filtrer les wildcards (*.tesla.com), exporter vers un fichier texte, et gérer proprement les erreurs réseau. ### Erreur 502 Site trop demandé visiblement :3 c'est pas d'bol. Sinon j'avais trouvé [ce script par "YashGoti"](https://github.com/YashGoti/crtsh) qui semblait parfait. J'aurais sûrement fait un truc en rapport, en modifiant pour répondre aux critères (affiche dynamique, export en fichier teste [format CSV je pense] etc.) Je pourrais prendre leur paquet en local, mais ça serait de l'actif. ### Alternative 1 Je regarde un post Reddit demandant une alternative à CRT.sh et je tombe sur SSLBoard.com. Après tout, pourquoi pas ? Alors, il n'y a pas d'API on dirait, alors je prends [juste un rapport Web](https://sslboard.com/report/aa6986c4-8db7-493d-8fd7-6011d01e890f) en attendant : ![alt text](image-8.png) ![alt text](image-9.png) Alors il y a une version payante, donc... hm. ### Alternative 2 Dans le même post Reddit, j'apprends l'existence de "Merklemap". Je tente une recherche dessus et [j'obtiens encore un Pay2Gain](https://www.merklemap.com/search?query=*.tesla.com&page=0), mais exploitable en soit : ![alt text](image-11.png) Plus de 500 certificats ? Et beh. ### Les alternatives Sur le site de Let's Encrypt (je suis d'avis qu'ils s'y connaissent en certificat, mais je ne saurais l'affirmer 🥸) j'obtiens une liste de ces services ouverts : https://community.letsencrypt.org/t/certificate-transparency-search-resources/203368 On a deux autres services offrant une API, CertStream en Python : https://github.com/CaliDog/certstream-python Mais il est presque l'heure de rendre, j'abandonne l'idée d'un script manuellement rédigé pour le moment.