1. 程式人生 > >[漏洞樣本分析]CVE-2012-0158

[漏洞樣本分析]CVE-2012-0158

環境:

Windows7專業版32位
Office2003 XP3 完全版

POC來源:

網路樣本
工具:
IDA OD 010Ediotr windbg

漏洞成因以及分析:

棧記憶體拷貝溢位漏洞,控制元件安全檢查不嚴

查詢漏洞觸發點:

如果分析有錯誤,謝謝大家幫我指正
開啟WORD 使用OD 附加WORD 開啟POC
觸發溢位
在這裡插入圖片描述
由於棧溢位會破壞向下的棧空間,如果足夠大,那基本是找不到線索 所以我們往溢位點的棧往上看 找點線索定位溢位點
在這裡插入圖片描述
往上看發現兩個返回地址 先看第一個
在這裡插入圖片描述
可能是棧溢位的函式位置 我們現在這裡下斷試試

然後再開,單步步過,觀察堆疊返回地址是否被破壞
經過觀察我們發現是這個函式執行完後堆疊被破壞
在這裡插入圖片描述


我們進函式裡面觀察一下 有沒有可疑的記憶體拷貝語句
經觀察 極有可能是這句拷貝語句造成的溢位
在這裡插入圖片描述
但是在彙編裡不好觀察,我們搜尋一下最初在棧裡發現那兩個返回地址的名字
找到了這個模組,我們使用IDA觀察一下
通過在OD裡的位置 定位到了IDA裡的函式
在這裡插入圖片描述
進去溢位函式裡面看 發現是這句造成的溢位的函式
在這裡插入圖片描述
而對傳進來的長度引數只有一句簡單的判斷
所以只要使這個區域性變數V7 和傳進來的引數相等就可以了,我們往上觀察傳參的地方
在這裡插入圖片描述
發現是定義的區域性變數 而且要=>8 沒有上限 這樣更是我們shellocde的最佳利用點
我們開啟010Ediotr 使用WinExec 然後使用OD動態除錯 快速定位這兩個區域性變數的位置就是
在這裡插入圖片描述

所以我們在寫shellocde時候也要往後移動八個位元組

執行指令我們就是用跳板指令JMP ESP 接下來我們就要在裡面搜尋這個指令
我們開啟windbg 附加 使用mona外掛搜尋模組
在這裡插入圖片描述
我們選擇一個保護比較少 而且通用性高的模組 大家可以自己判斷 我選擇的是WININET.dll 這個模組
在這裡插入圖片描述
選一個地址作為我們的跳板
在這裡插入圖片描述
完成利用
在這裡插入圖片描述