freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

UPnP和DLNA协议
2022-03-21 15:21:32
所属地 浙江省

前言

没有情情爱爱,只有技术相伴,给大家分享一下UPnP和DLNA协议;

UPnP的概念

通用即插即用(英语:Universal Plug and Play,简称UPnP)是由“通用即插即用论坛”(UPnP™ Forum)推广的一套网络协议。该协议的目标是使家庭网络(数据共享、通信和娱乐)和公司网络中的各种设备能够相互无缝连接,并简化相关网络的实现。UPnP通过定义和发布基于开放、因特网通讯网协议标准的UPnP设备控制协议来实现这一目标。 UPnP这个概念是从即插即用(Plug-and-play)派生而来的,即插即用是一种热拔插技术。

通俗点讲目前一般都用在路由器上面,如下截图所示;

1647846760_62382568b6be3fa806a1d.png!small?1647846761232

关于UPnP协议栈1647846767_6238256f5141c03a3f4b3.png!small?1647846767601

关于UPnP工作流程

1647846778_6238257adaac44d77e51e.png!small?1647846779106

1.寻址

DHCP协议

2.发现

使用的是SSDP协议,这是一个工作在UDP上的HTTP协议;

3.描述

1647846789_62382585c2babb6a8a736.png!small?1647846790156

通过扫描端口,遍历路径,可以发现路由器的UPnP服务接口;当然每家厂商有自己的固定路径后缀,也可以网上搜索;

1647846803_62382593bcecd4b3ff31d.png!small?1647846804295

1647846808_62382598aeb960a743363.png!small?1647846811176

<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:InternetGatewayDevice:1</deviceType> //设备类型,格式为:“urn:schemas-upnp-org:device:deviceType:v”,这里deviceType和v是由设备定义的。
<presentationURL>http://192.168.0.1:80</presentationURL>
<friendlyName>Wireless N Router MW313R</friendlyName> //一个更加友好的设备名
<manufacturer>MERCURY</manufacturer> //制造商
<manufacturerURL>http://www.mercurycom.com.cn</manufacturerURL>
<modelDescription>MW313R 5.0</modelDescription>
<modelName>MW313R</modelName>
<modelNumber>5.0</modelNumber>
<UDN>uuid:upnp-InternetGatewayDevice-4D5A5C269D27</UDN> //设备的UUID
<UPC>123456789001</UPC>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:Layer3Forwarding:1</serviceType>
<serviceId>urn:upnp-org:serviceId:L3Forwarding1</serviceId>
<controlURL>/l3f</controlURL> //用于控制的URL
<eventSubURL>/l3f</eventSubURL> //用于订阅事件的URL
<SCPDURL>/l3f.xml</SCPDURL> //服务描述的URL
</service>
</serviceList>
<deviceList>
<device>
<deviceType>urn:schemas-upnp-org:device:WANDevice:1</deviceType>
<friendlyName>WAN Device</friendlyName>
<manufacturer>MERCURY</manufacturer>
<manufacturerURL>http://www.mercurycom.com.cn</manufacturerURL>
<modelDescription>WAN Device</modelDescription>
<modelName>WAN Device</modelName>
<modelNumber>1.0</modelNumber>
<modelURL></modelURL>
<serialNumber>12345678900001</serialNumber>
<UDN>uuid:upnp-WANDevice-4D5A5C269D27</UDN>
<UPC>123456789001</UPC>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1</serviceType>
<serviceId>urn:upnp-org:serviceId:WANCommonInterfaceConfig</serviceId>
<controlURL>/ifc</controlURL>
<eventSubURL>/ifc</eventSubURL>
<SCPDURL>/ifc.xml</SCPDURL>
</service>
</serviceList>
<deviceList>
<device>
<deviceType>urn:schemas-upnp-org:device:WANConnectionDevice:1</deviceType>
<friendlyName>WAN Connection Device</friendlyName>
<manufacturer>MERCURY</manufacturer>
<manufacturerURL>http://www.mercurycom.com.cn</manufacturerURL>
<modelDescription>WAN Connection Device</modelDescription>
<modelName>WAN Connection Device</modelName>
<modelNumber>1</modelNumber>
<modelURL></modelURL>
<serialNumber>12345678900001</serialNumber>
<UDN>uuid:upnp-WANConnectionDevice-4D5A5C269D27</UDN>
<UPC>123456789001</UPC>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:WANIPConnection:1</serviceType>
<serviceId>urn:upnp-org:serviceId:WANIPConnection</serviceId>
<controlURL>/ipc</controlURL>
<eventSubURL>/ipc</eventSubURL>
<SCPDURL>/ipc.xml</SCPDURL>
</service>
</serviceList>
</device>
</deviceList>
</device>
</deviceList>
</device>
</root>

4.控制

使用SOAP协议来完成控制;

5.事件

通过返回xml消息,使用GENA格式;

UPnP相关测试

miranda

了解到原来kali是自带这个工具,但是新版本删掉了,找到了github的源文件,可以使用;https://github.com/0x90/miranda-upnp;

没太清楚为什么新版kali删掉这个工具,但是了解下来,UPnP基本上路由器都会默认开启,虽然UPnP协议没有任何身份验证机制,但是实际利用场景还是比较弱,如果路由器是公网ip还说可以建一条出网的通道,一般来说路由器是局域网ip,然后能开启的场景下也就已经进入内网了,其他出网的办法也很多,UPnP协议也只是建一条转发路由,前提还得是转发的ip存在问题;

1647846833_623825b1c490121cd48ff.png!small?16478468341731647846839_623825b7d4c3b7bbe97d4.png!small?1647846840275

扫描模式:

  • pcap:被动发现设备通过嗅探设备接入网络时发送的NOTIFY消息获取设备信息。
  • msearch:通过主动发送M-serach消息来发现设备。(一般使用msearch比较快) 测试下来,我是msearch发现不了,但是用msearch扫描了一段时间后,切pcap就可以立马出现结果;1647846851_623825c36d1bd584bc555.png!small?1647846851681

信息获取

发现设备后可用host命令来查看详细信息。

  • host list:查看发现的设备列表
  • host get<n>:获取信息(查询summary之前需执行)
  • host info<n>:显示查询到的信息(n为设备在列表中的编号)
  • host summary 0 :显示xml文件的摘要信息

1647846870_623825d6586656c2688dd.png!small?1647846870665

1647846882_623825e207ff118640bad.png!small?1647846882460

利用

host info 0 deviceList //设备列表,或者说设备信息
host info 0 deviceList WANConnectionDevice services //设备服务列表

1647846889_623825e9cc2d65c2af571.png!small?1647846890157

host info 0 deviceList WANConnectionDevice services WANIPConnection serviceStateVariables //服务状态列表
host info 0 deviceList WANConnectionDevice services WANIPConnection actions //服务控制列表,操作功能

1647846905_623825f931901dc37e888.png!small?1647846905592

host send 0 WANConnectionDevice WANIPConnection AddPortMapping //规则配置

1647846913_623826018860a96d9915c.png!small?1647846913992登陆后台可以看到规则已配置,并且生效了;

1647846924_6238260c5b35b612a63c5.png!small?1647846924665

其他功能解析,这部分其实有些是厂商自定义的,有些是默认自带的功能;

AddPortMapping : {}
GetNATRSIPStatus : {}
GetGenericPortMappingEntry : {}
GetSpecificPortMappingEntry : {}
ForceTermination : {}
GetExternalIPAddress : {}
GetConnectionTypeInfo : {}
GetStatusInfo : {}
SetConnectionType : {}
DeletePortMapping : {}
RequestConnection : {}

小技巧:由于发现upnp服务比较困难,掉线或者退出进程后,需要重新发现,又只能等;找了一下,官方提供了存储和恢复的功能;

upnp> save info 0 wrt54g
Host info for '192.168.1.1:2869' saved to 'info_wrt54g.mir'

upnp> save data wrt54g
Host data saved to 'struct_wrt54g.mir'

upnp> load struct_wrt54g.mir 
Host data restored:
[0] 192.168.1.1:2869

DLNA简要概述

数字生活网络联盟(英语:Digital Living Network Alliance,简称:DLNA)是一个由消费性电子、移动电话以及电脑厂商组成的联盟组织。该组织的目标在于创建一套可以使得各厂商的产品互相连接,互相适应的工业标准,从而为消费者实现数字化生活。联盟成员包括飞利浦、三星电子、松下、惠普、索尼、微软、英特尔和诺基亚在内的众多业界领袖。

其实DLNA应该是一系列协议栈的组合统称,并不是一个单独的协议;

1647846945_62382621bfe31cddf08cc.png!small?1647846946157

  1. NetWorking Connectivity 网络互联方式:802.3 以太网,802.11WiFi,802.15 蓝牙
  2. NetWorking Stack 网络协议栈:IPv4、IPv6
  3. Device Discovery&Control 设备发现和控制:UPnP,具体参考UPnP的相关文档
  4. Media Management媒体管理:识别、管理、分发、记录;
  5. Media Transport 媒体传输:HTTP
  6. Media Formats媒体格式:各种音频图片格式:avi、rmvb、mkv。。。
  7. Remote UI 远程用户接口:接口;

可以看到风险点主要在3、5、7, 3的分析还是参考 UPnP部分章节,5、7也就是常规的http服务,由于不管是DLNA的设计还是UPnP原协议的设计均不存在认证授权这一环节,主要是服务发现,以及请求构造;只要进入局域网能够连接服务,均可以任意调用服务;

由于手上没有DLNA服务的设备,可以参考: https://breezetemple.github.io/2019/02/25/dlan-introduction/

从文章中可以发现,不管是DLNA还是UPnP,都是通过soap来完成控制调用,格式也都是xml; 但是miranda-upnp是针对upnp的,不知道是否也能发现基于UPnP的DLNA服务,即使能发现估计后续的服务发现需要调整源码的xml解析;具体参考源代码解析。

总结

不管是UPnP还是DLNA都是不存在验证授权机制,也就是说只要进入局域网就可以任意调用,如果只是UPnP,一般用于路由器上路由配置,链路转发,然后服务一般默认开启,这个利用场景相对风险较低一些,因为需要在其他设备存在问题,且路由器为公网ip的情况,才能实现公网直接访问的利用场景,其他场景的利用都是没有必要使用到这个场景的(也可能是我没有想到);DLNA服务一般用于投屏,这个就是直接可以利用的;然后还有特殊场景,视频流拉取,操作指令控制等。

留个坑,miranda源代码解析;

参考:
https://blog.csdn.net/braddoris/article/details/41646789
https://breezetemple.github.io/2019/02/25/dlan-introduction/
https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/DLNA%E7%AE%80%E4%BB%8B.md

# 工具 # 无线安全 # 协议安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录