小心我“DIR”溢出你!(上)

來源:互聯網
上載者:User

好吧,我承認我昨天是在弄DIR溢出

不是sharpxxxxx那個。

dir溢出其實有好幾個,有的和cmd有關,有的需要特定環境。

我今天整的這個又是一個YY漏洞。

微軟一直沒有補,因為在微軟看來,這個應該不屬於漏洞吧,溢出了也提不了許可權,頂多算一個bug。

所以很多牛人都不整這個bug,而最近dummy爆了一個暴風影音的0day,也是個unicode的,我只在IE裡觸發了,不知道在perl指令碼下咋觸發,後來想起了這個dir漏洞。

我最喜歡做的事情就是整些沒用的,僅僅用來YY的東西,時不時自虐一下,所以今天看看這個dir溢出。

在我的xp sp2 cn上,cmd版本

Microsoft Windows XP [版本 5.1.2600]
(C) 著作權 1985-2001 Microsoft Corp.

首先,觸發漏洞:

D:>dir //?/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA......(超長)

就溢出了,cmd crash,簡單吧

大概200多個A就可以造成溢出。

看看溢出時候的狀況:

發現輸出的參數: A 經過unicode編碼後,一路覆蓋到了棧底,異常了~~~

異常時寄存器如下:

停在這裡:
77C17EA2    66:8901         MOV WORD PTR DS:[ECX],AX     ; //===> EIP指向這裡
77C17EA5    41              INC ECX
77C17EA6    41              INC ECX

SEH也被覆蓋了:
0013FF30   00410041 A.A.
0013FF34   00410041 A.A. 指向下一個 SEH 記錄的指標
0013FF38   00410041 A.A. SE處理常式
0013FF3C   00410041 A.A.
0013FF40   00410041 A.A.
0013FF44   00410041 A.A.

其實棧溢出也好利用,要麼覆蓋返回地址,要麼覆蓋seh。

第二次找到漏洞原因,重新設定好斷點,觸發之:

溢出就發生在這個該死的 wcscpy 裡

實際上是 wcscpy( [ebp-210h], [ebp-41C] );

跟進去後:
77C17E94 > 8BFF            MOV EDI,EDI
77C17E96    55           PUSH EBP
77C17E97    8BEC        MOV EBP,ESP
77C17E99    8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
77C17E9C    8B55 0C       MOV EDX,DWORD PTR SS:[EBP+C]
77C17E9F    66:8B02        MOV AX,WORD PTR DS:[EDX]
77C17EA2    66:8901        MOV WORD PTR DS:[ECX],AX
77C17EA5    41               INC ECX
77C17EA6    41             INC ECX
77C17EA7    42           INC EDX
77C17EA8    42             INC EDX
77C17EA9    66:85C0       TEST AX,AX
77C17EAC ^ 75 F1        JNZ SHORT msvcrt.77C17E9F
77C17EAE    8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]
77C17EB1    5D                POP EBP
77C17EB2    C3                RETN

跟完之後才發現一個見鬼的地方,由於src和dest相距不遠,所以在拷貝的過程中,dest把src的末尾的0位元組給覆蓋掉啦~~ 這樣這個拷貝就因為找不到src的0位元組而無法結束,所以會一直拷貝下去。

最後的結果就是在棧裡有了若干個拷貝的鏡像,最後因為一路覆蓋到了棧底,所以異常了!

注意看 /./.?./. 是分隔不同拷貝的地方

如果這個溢出是發生在堆裡,那麼就heap spray了,最後會造成記憶體泄露。

這裡是發生在棧裡的,那就叫做 stack spray吧!

由於這裡肯定會異常,wcscpy根本就無法正常返回,所以覆蓋返回地址控制的方法可以不同考慮了。

那麼正常人都會想到這裡覆蓋seh利用

而在這裡seh也確實是被我們覆蓋掉了。

不過可惜的是,xp sp2已經有了safeseh的保護了。而我們這個漏洞更是可憐的很。

可以看到,載入的模組居然沒有一個可以利用的~!

然後詭異的事情發生了,本以為字碼頁是可以跳轉的,結果在這裡都不行。

經過測試,唯一能跳轉的是記憶體中屬性為 ”RE" 的段,以及cmd.exe自己註冊的seh handler

到了這裡,基本可以判斷在正常情況下這個漏洞在xp sp2下是無法利用的了,當然如果有什麼牛人有啥新的利用方法,也請告訴我。

欲知後事如何,且聽下回分解。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.