hacktricks/generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md
2023-08-03 19:12:22 +00:00

17 KiB
Raw Blame History

使用EvilSSDP欺骗SSDP和UPnP设备

☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

本文摘自 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请求。我们将此请求称为HTTPUUDP上的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 🎥