MS 07004分析和利用

2021-04-18 06:00:15 字數 2377 閱讀 8399

相信大家對去年的ms06-055還記憶猶新吧,微軟的向量標記語言vml中的method變數ie未對其進行長度進行檢查,導致了乙個棧溢位漏洞。2023年的新年鐘聲剛剛敲響,又乙個關於vml的漏洞**了,cvmlrecolorinfo::internalload() 中的recolorinfo 方法中存在整數溢位,milw0orm上國外有人第一時間公布了poc**,無疑為我們的分析過程提供了方便,我們可以從二進位制補丁對比中定位到了出現問題的**,補丁中加了乙個對eax檢查的指令'cmp eax, 0x5d1745d',如圖1:

圖1.text:6ff176a7 loc_6ff176a7:                           ; code xref: sub_6ff17642+21j

.text:6ff176a7                 mov     eax, [esi+8]

.text:6ff176aa                 add     eax, [esi+4]

.text:6ff176ad                 test    eax, eax

.text:6ff176af                 jle     short loc_6ff176c4

.text:6ff176b1                 imul    eax, 2ch

.text:6ff176b4                 push    101h

.text:6ff176b9                 push    eax             ; size_t

.text:6ff176ba                 call    sub_6fecfef4

.text:6ff176bf                 pop     ecx

.text:6ff176c0                 pop     ecx

.text:6ff176c1                 mov     [esi+14h], eax

eax是從html**中得到的,由於32位暫存器所能表示數的範圍是有限的,所以假如我們提交乙個很大的數,那麼乘以2ch以後就反而變小了,6ff176ba中的**呼叫了malloc申請堆記憶體,所以這個漏洞本質上來說是因為整數溢位而間接導致了堆溢位,那麼我們如何定位這一段**呢?我們首先在od中在上面這段**中下硬斷點,在命令列中輸入he 7ff176ad,然後開啟poc頁面,很快od斷了下來,如圖2:

圖2然後跟進6fecfef4得到了malloc返回的指標003a8320,在這個位址上下寫斷點,hw 003a8320,斷在處,如圖3

圖**ush 0b pop ecx和下面的rep movs這三條指令是將rgb(x,x,x)(參見後面的exp)的顏色引數經過一定的演算法(下文簡稱rgb演算法)算出的結果拷貝到堆中,每次0b位元組。recolorinfo 中共有五個引數,分別是tocolor、lbcolor、forecolor、backcolor、fromcolor需要經過rgb演算法得出,0b*5=2c,我們可以猜測下面每個recolorinfoentry都會拷貝2c個位元組到堆中,我們來看看od下方的資料視窗來驗證一下我們的猜測,果然是從003a83fc處開始每2c(十進位制的44)位元組的資料都是重複的。然後我們按下f9鍵讓ie跑起來,od提示有異常,如圖4:

圖4很明顯某些函式指標被覆蓋了,我們在記憶體中搜尋6e006f00,在00010101的地方發現了這串串行,而00010101就是出現在堆記憶體中的資料,假如我們能將指標指向我們的shellcode,嘿嘿...如何利用呢?這個漏洞又和普通的堆溢位的利用方式有點不同,傳統的堆溢位是通過二次alloc或free改寫rtlentercriticalsection 或者unhandled exception filter等指標來獲得**的執行權,而ie裡則可以通過一種「暴力擴張堆」的方法來獲得**執行權,就是連線成05050505+shellcode這樣的形式,堆是從低位址向高位址增長的,再看看堆中被我們覆蓋的資料,假如我們call的不是[00010101]而是[01010100]那就正好跳轉到了05050505這個位址,在一連串的add eax,5050505h指令之後,這些指令是無關緊要的,最終跳入了我們的shellcode中執行,堆中的資料都是由recolorinfo 中的一些引數得到的,具體的演算法我也沒有細細的跟,頭大啊,但rgb(x,x,x)的三個引數最終會直接決定函式指標的指向,網上公布的poc中rgb(1,1,1)生成的位址是00010101。另外這個漏洞因機子而異不會有100%的成功率,相信看到現在讀者朋友也該明白是什麼原因。然後我們把shellcode換成自己的down&exec的,關於怎麼寫shellcode大家可以翻翻黑防以前的文章。但是有一點就是記得前面要加4個nop,否則可能出現失敗的情況,因為連續的050505會破壞你的shellcode,需要幾個nop緩衝一下,害我鬱悶好一陣子,汗...我在中文xp sp2 + ie6下測試成功了,測試的**如下,測試結果如圖5:

圖6

MS 07004分析和利用

文 圖 gyzy 相信大家對去年的ms06 055還記憶猶新吧,微軟的向量標記語言vml中的method變數ie未對其進行長度進行檢查,導致了乙個棧溢位漏洞。2007年的新年鐘聲剛剛敲響,又乙個關於vml的漏洞 了,cvmlrecolorinfo internalload 中的recolorinfo...

深度 CVE 2017 8565分析和利用

本文講的是深度 cve 2017 8565分析和利用,如果你在最近的更新如 kb4025342 中看到以下三個關鍵字,請不要驚慌,保持冷靜,並閱讀新的安全更新指南門戶 上的cve 2017 8565 是的,cve 2017 8565於2017年7月11日發布。來自hewlett packard en...

狀態碼502和504分析

一.戲說 不管你是做運維還是做開發,哪怕你是遊客,時不時會遇到502 bad gateway或504 gateway time out。出現這頁面,把服務重啟下,再實在不行重啟下伺服器,問題就解決了,但是,這問題還是會困擾著你,特別是做運維的人員。夜黑風高正酣睡時,乙個 響起,讓你重啟服務或iisr...