网络空间测绘核心技术之:协议识别(DCERPC篇)

  • A+
所属分类:云安全
dcerpc这个协议,是一个另一个非常非常基础的Windows系统的通信协议,它比rdp协议更普遍,默认开启。由于内容丰富,接口众多,早期的安全人员基于它写了很多蠕虫病毒,一度让微软和运营商非常头疼。dcerpc的默认端口是135,上面承载了包含wmi,有认证就有ntlmssp,还有epmapper等一系列丰富的系统信息,甚至还能获取网卡IP地址列表。
用人话说就是,可以:

- 获取操作系统版本信息

- 获取系统的IP地址列表(是的,你没看错,包含ipv6地址)

- 获取系统的软件服务信息

- 获取系统服务开放的动态端口

- 获取系统的芯片架构(32位/64位)

- 账号的暴力破解(wmi)

好了,我说了这么多,大家会说这些技术应该比较基础,很多其他工具应该都能做到吧?这里特别有意思,我把结论先写出来:目前没有任何一个工具或者平台能够完成全面且准确的信息提取,无论是nmap,metasploit,zmap,还是shodan,censys,zomeye,quake等所有公网平台。网络空间测绘平台或者产品一般是基于两种逻辑:要么是基于nmap/zmap做集成,要么是自己写协议深入识别。事实上,nmap的一个script的小bug导致识别不了,metasploit的那个模块最接近,但是也是一个字节的问题导致dump不了接口,zmap压根就没实现。所以我经常说,不要老迷信国外技术,哪怕是nmap这样的集大成者很多细节功能也欠缺的比较多,我们可以借鉴参考学习,同时也要现在巨人的肩膀上看的更远。

我们分别就这几个效果对应的技术进行说明。

( 1 ) 默认情况下dcerpc的ping包并不会启动认证流程,当然你可以手动直接带上ntlmssp的包结构,这样对方就会对应的返回挑战信息,里面带有完整的系统版本信息:

网络空间测绘核心技术之:协议识别(DCERPC篇)

看服务器的返回响应包:

网络空间测绘核心技术之:协议识别(DCERPC篇)

在rdp中也是如此,windows在很多接口中只要带有认证属性,基本上都是通过ntlm来进行的,这种情况下都能够利用,往往就给出了大量的系统信息。

( 2 ) 通过无需认证的epmapper接口,我们可以dump出来所有注册到rpc的程序服务,每一个uuid都能够准确的对应上可执行文件或者服务名称,比如sqlserver等等,这个非常有用。另外对于绑定了TCP端口的高端随机端口,也能返回,省去了全端口扫描的效率问题。

网络空间测绘核心技术之:协议识别(DCERPC篇)

( 3 ) 通过一个无需授权的接口OXIDResolver接口,调用ServerAlive2(opnum为5),能够得到目标系统网卡的所有IP地址,这个就太有用了。

网络空间测绘核心技术之:协议识别(DCERPC篇)

看看服务器的返回,丰富的宝矿,我甚至认为这绝对算得上是一个信息泄漏的漏洞了。

网络空间测绘核心技术之:协议识别(DCERPC篇)

( 4 ) 关于wmi的接口认证对应的暴力破解,在我没用go语言写出一个完整的协议实现情况下,我暂时不进行深入说明了。

最后,大家可以通过fofa和goby来完整感受一下完整的实现效果:https://fofa.so/result?qbase64=cHJvdG9jb2w9ZGNlcnBjICYmIHBvcnQ9MTM1

网络空间测绘核心技术之:协议识别(DCERPC篇)

Goby来感受:

网络空间测绘核心技术之:协议识别(DCERPC篇)

鉴于大家对于我提及其他的平台比较敏感,大家可以自行到其他的大网测绘系统或者内网测绘系统看一看,对比对比感受一下。我一直说shodan做的比较稳,就在于他们确实是踏踏实实做了一些细节的,虽然shodan只实现了epmapper的部分,但是相比其他平台只有一对二进制内容(还有大量误报数据),shodan绝对属于稳稳的老大哥。

网络空间测绘核心技术之:协议识别(DCERPC篇)

做个小对比表,大家自行去确认:


NTLM信息提取
EPMapper提取
ServerAlive2
shodan
-

-
censys
-
-
-
zoomeye
-
-
-
quake
-
-
-
fofa

由于之前出现大量的蠕虫都是通过smb和rpc接口来进行,所以国内的运营商为了安(sheng)全(shi),大部分地方直接把139/445这两个罪魁祸首进行了端口流量阻断,顺带把135端口也搞掉了。所以国内的很多网络默认从公网是扫描不到的,但是国外还是非常好用的。即便是公网不好用,在内网绝对是信息采集的一个大杀器。未来还有多少是可以挖掘的呢?咱们拭目以待。

补充说明:

( 1 ) metasploit的bug与解决

直接扫描的话它的模块做不了epmapper的dump:

网络空间测绘核心技术之:协议识别(DCERPC篇)

为了分析原因,去除干扰,咱们需要关闭fake_bind_multi的设置:

set DCERPC::fake_bind_multi false

可以看到填写的数据为一堆0,在Endpoint Mapper接口中0对应的opnum为insert,导致了报错,明显是作者偷了懒,没有做深入分析。lookuo的opnnum为2。

把 res = dcerpc.call(0, NDR.long(0) * 128)

改成:

res = dcerpc.call(0x02, "x00x00x00x00x00x00x00x00x00x00x00x00x01x00x00x00"
"x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00"
"x00x00x00x00xf4x01x00x00"

就能看到返回了。

( 2 ) nmap的bug

nmap本来就有一个script,名为msrpc-enum是来做epmapper的dump效果的,然而它对135无效,我估计也是作者在后来的改动情况下改出了错误。或者作者也把135跟139/335的smb接口没有梳理的很清楚。基于nmap封装的那些系统,你们稍微留点意,这个懒偷不得。

( 3 ) 其实还有其他很多工具都实现了一部分功能,比如最近泄漏的canvas,还有impacket,以及rpcdump,或多或少都有一点,我知道对于大家来说已经属于仰望,但是对于我们做网络空间测绘而言,还是不够用。



原文来源:赵武的自留地

网络空间测绘核心技术之:协议识别(DCERPC篇)

本文始发于微信公众号(关键基础设施安全应急响应中心):网络空间测绘核心技术之:协议识别(DCERPC篇)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: