UPnP和DLNA协议

前言

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

UPnP的概念

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

上面的描述摘抄至维基百科;

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

UPnP和DLNA协议_第1张图片

关于UPnP协议栈

UPnP和DLNA协议_第2张图片

关于UPnP工作流程

UPnP和DLNA协议_第3张图片

1.寻址

DHCP协议

2.发现

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

3.描述

UPnP和DLNA协议_第4张图片

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

UPnP和DLNA协议_第5张图片




1
0


urn:schemas-upnp-org:device:InternetGatewayDevice:1 //设备类型,格式为:“urn:schemas-upnp-org:device:deviceType:v”,这里deviceType和v是由设备定义的。
http://192.168.0.1:80
Wireless N Router MW313R //一个更加友好的设备名
MERCURY //制造商
http://www.mercurycom.com.cn
MW313R 5.0
MW313R
5.0
uuid:upnp-InternetGatewayDevice-4D5A5C269D27 //设备的UUID
123456789001


urn:schemas-upnp-org:service:Layer3Forwarding:1
urn:upnp-org:serviceId:L3Forwarding1
/l3f //用于控制的URL
/l3f //用于订阅事件的URL
/l3f.xml //服务描述的URL




urn:schemas-upnp-org:device:WANDevice:1
WAN Device
MERCURY
http://www.mercurycom.com.cn
WAN Device
WAN Device
1.0

12345678900001
uuid:upnp-WANDevice-4D5A5C269D27
123456789001


urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1
urn:upnp-org:serviceId:WANCommonInterfaceConfig
/ifc
/ifc
/ifc.xml




urn:schemas-upnp-org:device:WANConnectionDevice:1
WAN Connection Device
MERCURY
http://www.mercurycom.com.cn
WAN Connection Device
WAN Connection Device
1

12345678900001
uuid:upnp-WANConnectionDevice-4D5A5C269D27
123456789001


urn:schemas-upnp-org:service:WANIPConnection:1
urn:upnp-org:serviceId:WANIPConnection
/ipc
/ipc
/ipc.xml








4.控制

使用SOAP协议来完成控制;

5.事件

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

UPnP相关测试

miranda

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

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

UPnP和DLNA协议_第6张图片
UPnP和DLNA协议_第7张图片

扫描模式:

  • pcap:被动发现设备通过嗅探设备接入网络时发送的NOTIFY消息获取设备信息。

  • msearch:通过主动发送M-serach消息来发现设备。(一般使用msearch比较快) 测试下来,我是msearch发现不了,但是用msearch扫描了一段时间后,切pcap就可以立马出现结果;

UPnP和DLNA协议_第8张图片

信息获取

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

  • host list:查看发现的设备列表

  • host get :获取信息(查询summary之前需执行)

  • host info :显示查询到的信息(n为设备在列表中的编号)

  • host summary 0 :显示xml文件的摘要信息

UPnP和DLNA协议_第9张图片

UPnP和DLNA协议_第10张图片

利用

host info 0 deviceList //设备列表,或者说设备信息
host info 0 deviceList WANConnectionDevice services //设备服务列表
UPnP和DLNA协议_第11张图片
host info 0 deviceList WANConnectionDevice services WANIPConnection serviceStateVariables //服务状态列表
host info 0 deviceList WANConnectionDevice services WANIPConnection actions //服务控制列表,操作功能
UPnP和DLNA协议_第12张图片
host send 0 WANConnectionDevice WANIPConnection AddPortMapping //规则配置
UPnP和DLNA协议_第13张图片

登陆后台可以看到规则已配置,并且生效了;

UPnP和DLNA协议_第14张图片

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

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应该是一系列协议栈的组合统称,并不是一个单独的协议;

UPnP和DLNA协议_第15张图片
  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服务的设备,可以参考: DLNA 协议分析及应用 |

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

总结

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

留个坑,miranda源代码解析;

参考:
https://zh.wikipedia.org/wiki/UPnP
upnp协议简介(一)_braddoris的博客-CSDN博客_upnp协议
DLNA 协议分析及应用 |
https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/DLNA%E7%AE%80%E4%BB%8B.md

你可能感兴趣的:(协议安全,协议,物联网,安全,安全工具)