用到的靶機為:WinXP
漏洞原理:
一、漏洞觸發機制與核心組件
漏洞根源:RTF文件解析邏輯缺陷
觸發組件:Microsoft Word的RTF(Rich Text Format)解析引擎,具體涉及 mso.dll 模塊中的
路徑規范化函數(如 pfragments 相關函數)。
漏洞觸發條件:當用戶打開包含超長控制字屬性字符串的RTF文件時,Word未對輸入數據長度進行
驗證,直接將數據復制到固定大小的棧緩沖區中,導致溢出。
關鍵控制字與數據構造
惡意RTF結構:攻擊者在RTF文件中插入 {\*\pnfragments 等控制字,并設置超長的 屬性字符串
(如字體名稱或路徑參數)。例如:{\rtf1\ansi{\*\pnfragments XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}}
溢出觸發點: pnfragments 控制字對應的屬性字符串長度超過棧緩沖區容量(通常為64-128字
節),引發棧溢出。
二、內存破壞原理與利用技術
棧緩沖區溢出過程
棧空間分配:在解析RTF文件時,函數 sub_XXXXX (位于 mso.dll )會在棧上分配固定大小的緩沖區(如 0x00123E98 至 0x0012FFFF )。當輸入數據長度超過此范圍時,溢出覆蓋相鄰內存區域。
關鍵寄存器覆蓋:
返回地址覆蓋:溢出數據覆蓋棧中保存的 EIP (指令指針),指向攻擊者預設的地址(如 JMP
ESP 指令地址)。
SEH鏈劫持:若溢出未直接覆蓋返回地址,可能通過覆蓋 結構化異常處理鏈(SEH) 中的異常處理函數指針,觸發異常后跳轉至Shellcode。
Shellcode布局與執行
內存布局操控:攻擊者通過插入NOP雪橇( 0x90 指令)和跳轉指令,確保溢出后的控制流準確跳
轉到Shellcode區域。
載荷注入方式:
直接嵌入:將Shellcode編碼為十六進制字符串插入RTF文件。
遠程加載:通過 data: 協議或惡意URL動態加載Shellcode,例如:
html <iframe src="data:text/html;base64,XXXXXXXXXXXX"></iframe>
三、影響范圍與歷史危害
1. 受影響版本
操作系統:Windows XP SP3、Windows Server 2003、Vista、7。
Office版本:Office 2003 SP3、2007 SP2、2010、Mac版Office 2004-2011。
2. 實際攻擊案例
大規模掛馬攻擊:2010-2011年,MS10-087被集成至“黑頁”攻擊鏈,全球超過50%的掛馬網站利用
此漏洞傳播木馬。
APT攻擊載體:高級持續性威脅(APT)組織利用該漏洞投遞惡意文檔,竊取政府及企業數據。
四、防御與修復措施
1. 官方補丁分析
補丁編號:KB2423930(MS10-087)修復了 mso.dll 中的路徑處理邏輯,增加輸入長度校驗并重
構棧緩沖區分配策略。
補丁驗證方法:使用 Bindiff 對比補丁前后DLL文件,可發現關鍵函數(如
CanonicalizePathName )的指令修改。
2. 臨時緩解方案
禁用RTF解析:通過組策略禁用Word的RTF文件解析功能(設置路徑:
HKCU\Software\Microsoft\Office\...\Word\Security )。
啟用防護機制:強制啟用DEP(Data Execution Prevention)和Office沙箱(Protected View)。
3. 網絡與終端防護
流量監控:檢測HTTP/郵件流量中異常的 pnfragments 控制字或超長屬性字符串。
行為分析:監控 winword.exe 進程的異常棧操作或Shellcode執行行為。
詳細步驟:
1.執行msfconsole。









