看個(gè)AV也中招之cve-2010-2553漏洞分析

來(lái)源:http://bbs.ichunqiu.com/thread-10108-1-1.html?from=ch

試想:某一天,你的基友給你了一個(gè)視頻文件蜈漓,號(hào)稱是陳老師拍的蒼老師的老師題材的最新電影.avi模叙,你滿心歡喜梁丘,在確定文件格式確實(shí)為avi格式后趋厉,愉快的脫下褲子準(zhǔn)備欣賞,打開(kāi)后卻發(fā)現(xiàn)什么也沒(méi)有汰现,而隨后你的基友就控制了你的電腦挂谍,把你辛辛苦苦珍藏了二十年的片源全部偷走了…….

今天我們分析的漏洞就是一個(gè)利用播放器解壓縮時(shí)處理不當(dāng)引起的遠(yuǎn)程執(zhí)行漏洞,這個(gè)漏洞并沒(méi)有大規(guī)模流行瞎饲,我們只是從技術(shù)角度解析漏洞成因口叙。

0x 00漏洞介紹

CVE 2010-2553漏洞,也稱為MicrosoftWindows Cinepak 編碼解碼器解壓縮漏洞嗅战,影響的操作系統(tǒng)版本有:Microsoft Windows XP SP2和SP3妄田,WindowsVista SP1和SP2,以及Windows 7驮捍。

漏洞原因在于Cinepak 編碼解碼器對(duì)媒體文件解壓縮時(shí)代碼控制不恰當(dāng)疟呐,可導(dǎo)致遠(yuǎn)程代碼執(zhí)行。如果用戶打開(kāi)特制的媒體文件东且,此漏洞可能允許執(zhí)行代碼启具。如果用戶使用管理用戶權(quán)限登錄,成功利用此漏洞的攻擊者便可完全控制受影響的系統(tǒng)珊泳。

漏洞利用wmplay.exe富纸,而wmplay.exe這個(gè)播放器在國(guó)內(nèi)很少有人使用囤踩,如果被攻擊者使用了第三方的視頻播放軟件旨椒,很難攻擊成功晓褪,這可能也是這一漏洞不被分析重視的一大原因。

0x 01漏洞觸發(fā)

本文分析環(huán)境如下:

操作系統(tǒng)

Xp sp3

iccvid.dll版本

1.10.0.12

通過(guò)在exploit-db網(wǎng)站上得到觸發(fā)漏洞的python腳本综慎,運(yùn)行python腳本后涣仿,生成可觸發(fā)漏洞的poc.avi,這就是我們分析的樣本文件示惊。(python腳本在文末的附件中)

通過(guò)公告可知好港,這個(gè)漏洞是個(gè)堆溢出漏洞,在分析堆漏洞時(shí)米罚,肯定是hpa + ust大法好铡俐。所以喂饥,首先我們要開(kāi)啟hpa、ust

使用windbg加載wmplay.exe,使用g命令售睹,運(yùn)行wmplay.exe

將poc.avi拖入wmplay中,windbg會(huì)觸發(fā)異常

通過(guò)崩潰信息猜測(cè)是堆中的內(nèi)存被破壞了程拭,我們看下edi的值建蹄,并看下這個(gè)值是不是堆地址

可以看到堆底地址為: 76ad000+600=76b3000,這個(gè)地址也正好是edi的地址动看,這正是由于我們使用glags.exe開(kāi)啟了頁(yè)堆檢查尊剔,堆管理器會(huì)在堆塊中增加不可訪問(wèn)的柵欄頁(yè),當(dāng)溢出覆蓋到柵欄頁(yè)時(shí)就觸發(fā)了異常菱皆。

崩潰的指令為rep movs指令须误,我們看下此時(shí)movs的內(nèi)存大小保存在ecx,內(nèi)存大小為:

只能知道此時(shí)仇轻,是因?yàn)橄騟di中拷貝800大小字節(jié)的內(nèi)容時(shí)京痢,導(dǎo)致了堆溢出。

在rep movs這條指令的上一條指令下斷拯田,重新運(yùn)行

bu iccvid!CVDecompress+0x118:

第一次斷下后历造,查看edi,ecx的值:

走過(guò)rep movs指令后,此時(shí)并沒(méi)有崩潰船庇,這就說(shuō)明吭产,并不是一次rep movs就導(dǎo)致了堆溢出,而是通過(guò)多次運(yùn)行rep movs指令鸭轮,逐漸到到達(dá)堆尾臣淤,然后就溢出了。窃爷。邑蒋。姓蜂。

第二次斷下的,

第二次調(diào)用rep movs時(shí)医吊,還是沒(méi)有到達(dá)堆尾钱慢,還沒(méi)有溢出

第三次斷下時(shí),

這時(shí)卿堂,可以看到束莫,edi=76b3000, 76b3000這個(gè)就是我們?cè)谝婚_(kāi)始崩潰的地方啊2菝琛@缆獭!

在這里穗慕,可以看下esi的值

可以看到饿敲,現(xiàn)在用來(lái)覆蓋目標(biāo)地址的數(shù)據(jù)并不直接就是我們?cè)趐oc.avi中填充的數(shù)據(jù),而是一些不知來(lái)自何處去向哪里的數(shù)據(jù)逛绵。這點(diǎn)就造成了我們對(duì)這個(gè)漏洞的利用不能向cve 2010 0158之類的漏洞利用一樣通過(guò)修改文件內(nèi)容即可實(shí)現(xiàn)覆蓋怀各。

0x 02 漏洞分析

定位函數(shù)

現(xiàn)在我們就定位到漏洞所在的函數(shù),然后通過(guò)ida分析漏洞所在函數(shù)的功能暑脆。

在崩潰位置通過(guò)kb進(jìn)行椙。回溯來(lái)定位所在的函數(shù)

我們so easy的就把漏洞所在的函數(shù)找到了,這個(gè)函數(shù)就是iccvid!CVDecompress函數(shù)添吗。

使用IDA查看iccvid.dll文件沥曹,找到函數(shù)73b7cbee,發(fā)現(xiàn)ida并不能識(shí)別出函數(shù)為CVDecompress函數(shù)碟联,納尼妓美??這一定是在逗我

這是因?yàn)镮DA沒(méi)有找到pdb文件鲤孵,但是我們windbg卻找到了pdb文件壶栋,我們將windbg的pdb文件拷貝出來(lái),

在windbg中查看pdb文件路徑

使用ida file --- load file ---pdb file選擇pdb文件路徑普监,就可以在ida中看到函數(shù)名稱了贵试。

效果如圖

分析函數(shù)

在函數(shù)73B7CAD6頭下斷點(diǎn)后,重新加載程序凯正,斷下后毙玻,可以看到CVDecompress函數(shù)有七個(gè)參數(shù):

還記得上面分析的rep movs指令嗎?調(diào)用它第三次后就會(huì)崩潰廊散,而第一次調(diào)用這條指令時(shí)的edi的值為076af000桑滩,這個(gè)076af000是什么鬼呢?來(lái)自于哪里呢允睹?

答案就是它是CVDecompress函數(shù)的從第一個(gè)參數(shù)运准,偏移1c的值(076ad000)加上2000后得到的……

CVDecompress函數(shù)的第三個(gè)參數(shù)68幌氮,代表了未解壓的數(shù)據(jù)長(zhǎng)度。

這個(gè)函數(shù)首先會(huì)對(duì)cinepak的壓縮格式結(jié)構(gòu)進(jìn)行判斷胁澳,隨后會(huì)按照cinepak壓縮格式解析結(jié)構(gòu)该互。

Cinepak壓縮格式的總體框架如下:

+-----------------------+

| Frame Header? ?? ?? ? |

+-----------------------+

| Strip 1 Header? ?? ???|

+-----------------------+

| Strip 1 Codebooks? ???|

+-----------------------+

| Strip 1 Frame Vectors |

+-----------------------+

| Strip 2 Header? ?? ???|

+-----------------------+

| Strip 2 Codebooks? ???|

+-----------------------+

| Strip 2 Frame Vectors |

+-----------------------+

| Strip 3 Header? ?? ???|

其中Frame Header的結(jié)構(gòu)如下:

7 6 5 4 3 2 1 0? ?? ???Field Name? ?? ?? ?? ?? ?? ???Type

+---------------+

0??|? ?? ?? ?? ? | |? ?? ? Flags? ?? ?? ?? ?? ?? ?? ?? ? Byte

+---------------+

1??|? ?? ?? ?? ?? ?|? ?? ? Length of CVID data? ?? ?? ???Unsigned

+-? ?? ?? ?? ? -+

2??|? ?? ?? ?? ?? ?|

+-? ?? ?? ?? ? -+

3??|? ?? ?? ?? ?? ?|

+---------------+

4??|? ?? ?? ?? ?? ?|? ?? ? Width of coded frame? ?? ?? ? Unsigned

+-? ?? ?? ?? ? -+

5??|? ?? ?? ?? ?? ?|

+---------------+

6??|? ?? ?? ?? ?? ?|? ?? ? Height of coded frame? ?? ?? ?Unsigned

+-? ?? ?? ?? ? -+

7??|? ?? ?? ?? ?? ?|

+---------------+

8??|? ?? ?? ?? ?? ?|? ?? ? Number of coded strips? ?? ???Unsigned

+-? ?? ?? ?? ? -+

9??|? ?? ?? ?? ?? ?|

+---------------+

函數(shù)首先判斷未解壓縮的數(shù)據(jù)長(zhǎng)度是不是小于20H大小

再判斷未解壓縮的數(shù)據(jù)長(zhǎng)度是不是小于FrameHeader中的數(shù)據(jù)長(zhǎng)度

比較Frame Header中的Number of coded strips是不是小于0

然后就會(huì)對(duì)每個(gè)strip進(jìn)行遍歷,以下都是在對(duì)每個(gè)strip的處理中

對(duì)未解壓的數(shù)據(jù)大小做比較

對(duì)編碼條數(shù)據(jù)大小做判斷

判斷編碼條ID為10還是11:

對(duì)strip header中的底部Y坐標(biāo)與頂部Y坐標(biāo)做差听哭,結(jié)果乘以一個(gè)數(shù)后存儲(chǔ)起來(lái)慢洋。

當(dāng)strip header中的編碼條ID為10時(shí),會(huì)向堆中拷貝數(shù)據(jù)陆盘。

最后,會(huì)指向下一個(gè)stripHeader結(jié)構(gòu)败明。上面這些是對(duì)每個(gè)strip的處理

結(jié)合poc.avi的內(nèi)容隘马,與上面IDA中的結(jié)果

每次當(dāng)解析到chunkID為20時(shí),此時(shí)妻顶,不會(huì)向堆里覆蓋內(nèi)容酸员,當(dāng)解析到chunkid=0x1100時(shí),就會(huì)向堆數(shù)據(jù)中復(fù)制數(shù)據(jù)讳嘱。

因?yàn)閜oc.avi中有三處chunkid為11的數(shù)據(jù)塊幔嗦,因此向堆中復(fù)制了三次數(shù)據(jù),而正是第三交復(fù)制時(shí)沥潭,使堆溢出而崩潰邀泉。

0x 04 漏洞利用

在metasploit 平臺(tái)中暫時(shí)沒(méi)有該漏洞利用的相關(guān)模塊,在互聯(lián)網(wǎng)搜索引擎中也暫未找到相關(guān)利用樣本钝鸽。本人感覺(jué)這個(gè)漏洞利用最大的難點(diǎn)在于汇恤,拷貝時(shí)觸發(fā)堆溢出時(shí),拷貝的內(nèi)容很難通過(guò)文件內(nèi)容進(jìn)行控制拔恰,因而無(wú)法很好的控制EIP指針因谎,無(wú)法精準(zhǔn)的執(zhí)行payload。怎樣精準(zhǔn)的控制esi中的內(nèi)容颜懊,是我以后將在研究學(xué)習(xí)的內(nèi)容财岔。本文不再深入。

附件:鏈接:http://pan.baidu.com/s/1bLLx98密碼:mlbj

0x 05 參考資料

http://www.cvedetails.com/cve/CVE-2010-2553/

https://technet.microsoft.com/library/security/ms10-055

http://www.cnblogs.com/Ox9A82/p/5715673.html

http://cve.scap.org.cn/CVE-2010-2553.html

https://www.exploit-db.com/moaub-26-microsoft-cinepak-codec-cvdecompress-heap-overflow-ms10-055/

http://multimedia.cx/mirror/cinepak.txt

《漏洞戰(zhàn)爭(zhēng)》83頁(yè)-90頁(yè)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末河爹,一起剝皮案震驚了整個(gè)濱河市匠璧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昌抠,老刑警劉巖患朱,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異炊苫,居然都是意外死亡裁厅,警方通過(guò)查閱死者的電腦和手機(jī)冰沙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)执虹,“玉大人拓挥,你說(shuō)我怎么就攤上這事〈” “怎么了侥啤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)茬故。 經(jīng)常有香客問(wèn)我盖灸,道長(zhǎng),這世上最難降的妖魔是什么磺芭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任赁炎,我火速辦了婚禮,結(jié)果婚禮上钾腺,老公的妹妹穿的比我還像新娘徙垫。我一直安慰自己,他們只是感情好放棒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布姻报。 她就那樣靜靜地躺著,像睡著了一般间螟。 火紅的嫁衣襯著肌膚如雪吴旋。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天寒亥,我揣著相機(jī)與錄音邮府,去河邊找鬼。 笑死溉奕,一個(gè)胖子當(dāng)著我的面吹牛褂傀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播加勤,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼仙辟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了鳄梅?” 一聲冷哼從身側(cè)響起叠国,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎戴尸,沒(méi)想到半個(gè)月后粟焊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年项棠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悲雳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡香追,死狀恐怖合瓢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情透典,我是刑警寧澤晴楔,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站峭咒,受9級(jí)特大地震影響税弃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讹语,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一钙皮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顽决,春花似錦、人聲如沸导匣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贡定。三九已至赋访,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缓待,已是汗流浹背蚓耽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旋炒,地道東北人步悠。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瘫镇,于是被迫代替她去往敵國(guó)和親鼎兽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容