17 KiB
使用EvilSSDP欺骗SSDP和UPnP设备
☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFT收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组 或 Telegram群组 或 关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks仓库和hacktricks-cloud仓库提交PR来分享你的黑客技巧。
本文摘自 https://www.hackingarticles.in/evil-ssdp-spoofing-the-ssdp-and-upnp-devices/
介绍
什么是SSDP?
SSDP或简单服务发现协议是一种用于广告和发现网络服务的网络协议。它可以在没有任何DHCP或DNS配置的情况下工作。它设计用于住宅或小型办公环境。它使用UDP作为底层传输协议,使用端口1900。它使用HTTP方法NOTIFY来向多播组通告服务的建立或撤销。它是发现协议UPnP的基础。
什么是UPnP设备?
UPnP或通用即插即用是一组网络协议,允许网络设备(如个人计算机、打印机、互联网网关、Wi-Fi接入点和移动设备)在网络上发现彼此的可用性并建立用于通信、数据共享和娱乐的网络服务。UPnP架构支持零配置网络。来自任何供应商的UPnP兼容设备可以动态加入网络,获取IP地址,在请求时宣布其名称、广告或传达其功能,并了解其他设备的存在和功能。
流程
UPnP堆栈由六个层组成:寻址、发现、描述、控制、事件和展示。
在寻址层中,UPnP启用的系统尝试通过DHCP获取IP地址。如果这不可能,它们将从169.254.0.0/16范围(RFC 3927)中自动分配一个地址,这个过程称为AutoIP。
接下来是发现层,在该层中,系统使用简单服务发现协议(SSDP)在网络上搜索其他设备。发现设备的两种方法是主动和被动。使用主动方法时,支持UPnP的设备会向多播地址239.255.255.250的UDP端口1900发送一个发现消息(称为M-SEARCH请求)。我们将此请求称为HTTPU(UDP上的HTTP),因为它包含类似于HTTP头的头部。M-SEARCH请求的样式如下:
M-SEARCH * HTTP/1.1
ST: ssdp:all
MX: 5
MAN: ssdp:discover
HOST: 239.255.255.250:1900
UPnP系统监听此请求,并预计通过UDP单播消息回复,宣布描述XML文件的HTTP位置,该文件列出了设备支持的服务。
在使用被动方法发现设备时,UPnP兼容设备会定期通过向UDP端口1900上的多播地址239.255.255.250发送NOTIFY消息来在网络上宣布其服务。以下是类似于对主动发现的响应所发送的消息:
NOTIFY * HTTP/1.1\r\n
HOST: 239.255.255.250:1900\r\n
CACHE-CONTROL: max-age=60\r\n
LOCATION: http://192.168.10.254:5000/rootDesc.xml\r\n
SERVER: OpenWRT/18.06-SNAPSHOT UPnP/1.1 MiniUPnPd/2.1\r\n
NT: urn:schemas-upnp-org:service:WANIPConnection:2
每个UPnP配置文件的描述都在主动发现期间接收到的响应消息的LOCATION字段值或被动发现期间接收到的NOTIFY消息中引用。
控制层可能是最重要的一层;它允许客户端使用描述文件中的URL发送命令到UPnP设备。它们可以使用简单对象访问协议(SOAP),这是一种使用XML over HTTP的消息传递协议。设备通过controlURL端点发送SOAP请求,该端点在描述文件中的<service>标签中描述。<service>标签的示例如下:
<service>
<serviceType>urn:schemas-upnp-org:service:WANIPConnection:2</serviceType>
<serviceId>urn:upnp-org:serviceId:WANIPConn1</serviceId>
<SCPDURL>/WANIPCn.xml</SCPDURL>
<controlURL>/ctl/IPConn</controlURL>
<eventSubURL>/evt/IPConn</eventSubURL>
</service>
IGD - Internet Gateway Device
IGD映射网络地址转换(NAT)设置中的端口。IGD允许应用程序在一定时间段内动态地在路由器上添加临时端口映射(无需用户执行任何手动步骤)。
大多数设备通常不会通过WAN接口接受SSDP数据包,但其中一些设备仍然可以通过开放的SOAP控制点接受IGD命令。
在Umap工具部分,您可以找到利用此向量的方法。
工具
Miranda
Miranda是一个python2的UPnP客户端,可以用于发现UPnP服务,获取详细信息并向其发送命令:
upnp> msearch
Entering discovery mode for 'upnp:rootdevice', Ctl+C to stop...
SSDP reply message from 192.168.1.254:49152
XML file is located at http://192.168.1.254:49152/wps_device.xml
Device is running Unspecified, UPnP/1.0, Unspecified
SSDP reply message from 192.168.1.254:53350
XML file is located at http://192.168.1.254:53350/37699b14/rootDesc.xml
Device is running Linux/3.4.11 UPnP/1.0 MiniUPnPd/1.9
upnp> host list
[0] 192.168.1.254:49152
[1] 192.168.1.254:53350
upnp> host get 0
upnp> host details 0
Host name: 192.168.1.254:49152
UPNP XML File: http://192.168.1.254:49152/wps_device.xml
Device information:
Device Name: WFADevice
Service Name: WFAWLANConfig
controlURL: wps_control
eventSubURL: wps_event
serviceId: urn:wifialliance-org:serviceId:WFAWLANConfig1
SCPDURL: wps_scpd.xml
fullName: urn:schemas-wifialliance-org:service:WFAWLANConfig:1
ServiceActions:
PutMessage
NewInMessage
InMessage:
dataType: bin.base64
[...]
upnp> host send 0 WFADevice WFAWLANConfig PutMessage
Umap
工具umap可以帮助发现WAN接口上可用的upnp命令,即使这些命令没有在这些接口上进行广告宣传(这是由于错误的实现)。请注意,例如,如果您正在测试一个路由器,并且您可以从内部网络和WAN接口访问它,您应该尝试从内部网络枚举所有服务(例如使用miranda),然后尝试从外部网络调用这些服务。
其他UPnP工具
在https://github.com/0x90/upnp-arsenal中找到更多的upnp工具
Evil SSDP
Evil SSDP工具由initstring开发。该工具托管在GitHub上。我们将使用git clone命令将git的所有内容克隆到我们的攻击者机器上。git clone命令将创建一个与GitHub上相同名称的目录。由于该工具是使用Python 3版本开发的,我们将使用python3命令后跟.py文件的名称来运行程序。这里我们可以看到工具的基本帮助界面。
git clone https://github.com/initstring/evil-ssdp.git
cd evil-ssdp/ls
python3 evil-ssdp.py --help
在克隆的目录中,我们会找到一个名为templates的目录。它包含了所有可以用来钓鱼目标用户的预编译模板。
欺骗扫描器SSDP
现在,我们已经成功运行了工具,让我们使用它来获取一些有用的凭证。在这个第一个实践中,我们将伪装一个扫描器作为一个可靠的UPnP设备。首先,我们需要配置模板。
模板配置
为了使用这个工具,我们需要提供网络接口。在我们的攻击者机器上,我们有一个名为"eth0"的接口,你可以使用"ifconfig"命令找到你的接口。
在提供接口之后,我们将使用"--template"参数来传递我们之前在模板目录中找到的模板。为了伪装一个扫描器,我们将运行以下命令。正如我们所看到的,该工具已经完成了它的工作,并在我们的攻击者机器上的8888端口上托管了多个模板文件。我们还托管了SMB指针。
ls temlates/
python3 evil-ssdp.py eth0 --template scanner
操纵用户
下一步是操纵用户点击应用程序。在与目标相同的网络上,我们的伪造扫描器将显示在其资源管理器中。这就是UPnP的工作原理。邪恶的SSDP工具在目标系统上创建了这个看起来真实的扫描器,而无需与目标进行任何强制性的交互。
点击资源管理器中的图标后,我们将被重定向到默认的Web浏览器,打开我们托管的链接。我们在这里使用的模板起到了作用。用户现在意识到他/她确实连接到了我们生成的真实扫描器或伪造的UPnP设备。毫无察觉的目标没有任何线索,会在下面的图像中显示的模板上输入有效的凭据。
获取凭据
一旦目标用户输入凭据,我们检查攻击者机器上的终端,以找到用户输入的凭据。由于每个目标设备都不需要进行对话,我们的伪造扫描器对网络中的每个用户都可见。这意味着这种攻击的范围是无限的。
伪造Office365 SSDP
在之前的实例中,我们伪造了扫描器给目标用户。现在,我们在模板目录中找到了Office365模板。让我们使用它。
模板配置
与之前一样,让我们开始配置模板以及工具。我们将使用python3来运行该工具,后面跟着python文件的名称。然后提供网络接口,接下来是模板参数,即office365。
python3 evil-ssdp.py eth0 --template office365
正如我们所看到的,该工具已经完成了它的工作,并在我们的攻击者机器上的8888端口上托管了多个模板文件。
操纵用户
一旦我们运行该工具,我们就会有一个名为Office365备份的UPnP设备。这是由该工具完成的,而无需向目标用户发送任何文件、有效载荷或任何其他类型的交互。唯一剩下的就是用户点击图标。
当用户点击后,目标用户通过其默认浏览器被重定向到我们的伪造模板页面。这是一个非常真实的微软网页。毫无所知的用户在此页面上输入他们的有效凭据。
获取凭据
一旦用户输入凭据并将其作为POST请求传递给服务器(即我们的目标机器),我们就会在终端上看到这些凭据。
将用户转向密码保险库SSDP
到目前为止,我们成功地欺骗了目标用户,获得了一些扫描器凭据和一些Office365备份凭据。但现在我们要做的最重要的事情是作为UPnP使用的密码保险库。
模板配置
就像我们在之前的实践中所做的那样,我们将不得不为密码保险库设置模板。很快,该工具将在8888端口上托管密码保险库模板。
python3 evil-ssdp.py eth0 --template password-vault
操纵用户
转向目标机器,我们可以看到密码保险库 UPnP 在资源管理器中可见。现在,用户点击设备并陷入我们的攻击。看到类似密码保险库的东西,用户会被诱惑点击图标。
由于毫无所知的用户认为他/她已经通过伪造的密钥和密码获得了最重要的东西。这对用户来说是一个分散注意力的手段,因为这将导致用户尝试这个详尽的凭证列表,但却没有成功。
伪造 Microsoft Azure SSDP
在进行伪造时,最重要的任务之一是不让目标用户知道他/她已经成为伪造的受害者。这可以通过在获取凭证、cookie或攻击者想要获取的任何内容之后将用户重定向来实现。evil_ssdp 工具有一个参数(-u),可以将目标用户重定向到攻击者选择的任何 URL。让我们看看这个参数的工作原理。
首先,我们将使用 python3 加载该工具。然后我们指定应该使用的网络接口。现在,对于这个实践,我们将使用 Microsoft Azure 存储模板。在选择模板之后,我们放置(-u)参数,然后指定我们想要重定向用户的任何 URL。这里我们使用的是 Microsoft 官方链接。但这可以是任何恶意网站。
python3 evil-ssdp.py eth0 --template microsoft-azure -u https://malicous-site.com
操纵用户
现在我们已经启动了工具,它将在目标机器上创建一个UPnP设备,如下图所示。为了攻击成功,目标需要点击该设备。
点击图标后,我们可以看到用户被重定向到微软官方页面。这可以是攻击者想要的任何内容。
这就完成了我们对这个强大的欺骗工具的实际操作。
缓解措施
- 禁用UPnP设备。
- 教育用户以防止钓鱼攻击。
- 监控网络以防止明文传输密码。
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在HackTricks中为你的公司做广告吗?或者你想要获取PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFT收藏品——The PEASS Family
- 获得官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组,或者关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo和hacktricks-cloud repo提交PR来分享你的黑客技巧。