freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录