亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

從MS03-049漏洞利用看調(diào)試系統(tǒng)進(jìn)程(圖)

 更新時(shí)間:2007年01月16日 00:00:00   作者:  
適合讀者:漏洞分析員、黑迷
前置知識(shí):溢出漏洞基本調(diào)試步驟、Softice基本使用方法
WTF:Windows XP
SP2相信是大家都在關(guān)注的一個(gè)系統(tǒng),這個(gè)版本剛推出的時(shí)候,由于其具有溢出保護(hù)機(jī)制,傳統(tǒng)的溢出利用方式已經(jīng)不行了,它也因此而備受青睞。記得當(dāng)時(shí)同行們也開始嘀咕著是否還有繼續(xù)研究溢出漏洞利用技術(shù)的必要。但是隨著時(shí)間的推移,XP
SP2也慢慢暴露出與以前的操作系統(tǒng)版本存在的兼容性問題,比如,有的軟件在Windows 2000或XP SP0、SP1上能正常使用,在SP2上卻不行;XP
SP2對(duì)利用原始套接字傳送TCP數(shù)據(jù)包做了很大的限制,導(dǎo)致我們開發(fā)某些網(wǎng)絡(luò)程序的時(shí)候出現(xiàn)障礙,等等。于是,出現(xiàn)了大量的用戶仍然堅(jiān)持長(zhǎng)期使用其它版本系統(tǒng)的情況。我并不是一個(gè)守舊者,我只是想借此來說明一下其實(shí)MS是給了我們很大的時(shí)間來繼續(xù)研究傳統(tǒng)的溢出漏洞的——針對(duì)XP SP2的IE漏洞不就出了好幾個(gè)了嗎?好了,廢話到此為止,看文章先:
菜鳥版Exploit編寫指南之九——
     
從MS03-049漏洞利用看調(diào)試系統(tǒng)進(jìn)程
   本文我主要是從前段時(shí)間利用WorkStation服務(wù)溢出漏洞(MS03-049)過程中遇到的一些問題為基礎(chǔ),談?wù)勎沂窃鯓油ㄟ^對(duì)該系統(tǒng)進(jìn)程的調(diào)試來達(dá)到利用該漏洞為自己服務(wù)的。我的目的不完全是講這個(gè)漏洞,而是更想通過介紹漏洞的利用過程來探討一下以后在沒有公布利用代碼,或則有人公布了利用代碼但是在關(guān)鍵的地方有所保留的情況下,如何能一步一步地寫出自己的利用代碼。當(dāng)然,現(xiàn)在的方法只是很初步的。
   盡可能地利用現(xiàn)有的資料
   前段時(shí)間閑得無聊,想看看有什么新的溢出漏洞可以利用,但是打開Xfocus和Nsfocus一看,實(shí)在找不到新的基于Windows的堆棧溢出漏洞。于是就想起了去年的WorkStation漏洞好象沒有爆發(fā)蠕蟲,也就是說雖然網(wǎng)上已有相關(guān)補(bǔ)丁,但該漏洞還是有廣泛存在的可能性。于是,我決定拿它來練練手。
   EEYE發(fā)現(xiàn)的MS03-049溢出是在Wkssvc.dll的某個(gè)API中Call
vsprintf函數(shù)時(shí)發(fā)生的。我后來找到了Snake的兩個(gè)分析文章,了解了漏洞的原理以及適用范圍,這里不再多講。遺憾的是,可能由于輿論的壓力,Xfocus或Nsfocus都沒有在顯要的位置公布利用代碼,最后費(fèi)了好大的力氣才從論壇上找到了Sbaa的寫的那篇代碼。有了利用代碼,那當(dāng)然馬上試一試。好家伙!居然很快就進(jìn)了朋友的一臺(tái)機(jī)器,如圖1、2所示:

javascript:if(this.width>500)this.width=500" border=0>


圖1

javascript:if(this.width>500)this.width=500" border=0>



圖2
   居然這么順利?!既然如此,看看能否將利用代碼改寫為自動(dòng)傳送文件。好在這方面的ShellCode以前編寫過,那就用現(xiàn)成的?,F(xiàn)在剩下的就是找到溢出點(diǎn)再往下修改即可,為了方便起見,以下的工作都是針對(duì)Windows
2000,并且當(dāng)前系統(tǒng)分區(qū)為Fat32。
   溢出點(diǎn)的確定
  
溢出點(diǎn)當(dāng)然是從現(xiàn)成的代碼中找了。再次打開開DOS窗口的源代碼,發(fā)現(xiàn)其中有兩處值得注意的地方,一個(gè)地方如圖3所示:

javascript:if(this.width>500)this.width=500" border=0>


 圖3
另一個(gè)是代碼中發(fā)送數(shù)據(jù)包的安排如下:
| ShellCode| AAAAAAAA…| 跳轉(zhuǎn)地址|
AAAA…|
   奇怪!整個(gè)代碼中只有這個(gè)地址覆蓋,但是0x7ffa4a1b是Windows 2000下通用的JMP
EBX的地址。我最初的理解是作者要覆蓋SEH的處理函數(shù)地址,但是為什么在兩處使用0x7ffa4a1b呢?而且沒有向前跳轉(zhuǎn)的指令,為何剛好跳到ShellCode開始的地方呢?還有,究竟溢出點(diǎn)在什么地?WorkStation服務(wù)究竟分配了多少個(gè)字節(jié)的空間來存儲(chǔ)參數(shù)?Snake在分析文章中大概指出在2023附近,那就先試試這個(gè)。
   我填充好數(shù)據(jù)后,在第2023字節(jié)開始的地方覆蓋上通用的JMP
ESP地址0x7ffa4512,后面大約40個(gè)字節(jié)為\xeb\xfe(為什么要這樣做,繼續(xù)往后看!),然后打開Softice,如果溢出點(diǎn)在這里的話,Softice回彈出來將停在“eb
fe”處??上В@次沒有出現(xiàn)想要的效果,顯然2023不是溢出點(diǎn)。但是不用急,再?gòu)?001到2040這段區(qū)域內(nèi)依次填寫“ABCD…XYZ0123456789JJJJ”,剛好40個(gè)字節(jié)。編譯,連接,得到可執(zhí)行文件,然后重啟系統(tǒng)(這是比較繁瑣的地方,每次試驗(yàn)后都得重啟),正好彈出來如下圖4所示的信息:

javascript:if(this.width>500)this.width=500" border=0>



圖4
  
現(xiàn)在就清楚了,0x54535251對(duì)應(yīng)的是“QRST”,對(duì)應(yīng)位置是在2017處。也就是說,可以認(rèn)為WorkStation服務(wù)分配了2013個(gè)字節(jié)的緩沖區(qū)來存放參數(shù),而函數(shù)返回地址是在第2017(下標(biāo))字節(jié)處。溢出點(diǎn)找到了,下面的事情也就好做一些了。
   檢測(cè)EIP之后的保留地址
   前面我在探測(cè)2023是不是包含函數(shù)返回地址時(shí),在后面約40個(gè)字節(jié)填滿了\xeb\xfe,目的其實(shí)在于檢查JMP
ESP后面是否有保留地址。因?yàn)橛袝r(shí)候,BUF中填寫JMP ESP的后面是不能直接跟ShellCode的。例如RPC(MS03-026)漏洞就是在JMP
ESP后面必須留8字節(jié)的保留地址,那么在WorkStation服務(wù)漏洞中呢?按前面的方法一試,如圖5所示:

javascript:if(this.width>500)this.width=500" border=0>



圖5
   從圖5可以看出,0x7ffa4512之后到執(zhí)行“eb
fe”的地方剛好有12個(gè)字節(jié),換句話說這12個(gè)字節(jié)就是保留地址。一般情況下,那我們就只需要把ShellCode放在這12個(gè)字節(jié)之后就可以了。
   檢測(cè)服務(wù)的接收緩沖區(qū)大小
   其實(shí)我覺得這是一個(gè)比較容易忽略的地方,在有的漏洞利用過程中,可能會(huì)出現(xiàn)該服務(wù)用于接收網(wǎng)絡(luò)參數(shù)的緩沖區(qū)大小受限。如果是這種情況,我們就不能把ShellCode放在JMP
ESP地址的后面,而應(yīng)該考慮放在前面。這個(gè)檢驗(yàn)方法從Softice里查看內(nèi)存就知道了,這里不再多講。當(dāng)然,經(jīng)過測(cè)試WorkStation服務(wù)漏洞不存在這個(gè)問題。
   使用通用跳轉(zhuǎn)地址
   能采用通用的跳轉(zhuǎn)地址最好,即使找不到通用的JMP ESP 的地址,也可以找找其他通用跳轉(zhuǎn)地址,而且有的服務(wù)本身就有通用的跳轉(zhuǎn)地址。例如SQL
Resolution服務(wù)漏洞中,就有一個(gè)通用的JMP
ESP的地址0x42b0c9dc, 而RPC溢出漏洞中有通用的具有JMP ESI功能的跳轉(zhuǎn)地址0x0100139d。
   如果要想跳轉(zhuǎn)地址更通用,這里推薦現(xiàn)在比較流行的兩個(gè):對(duì)Windows 2000、XP、2003都通用的具有JMP
EBX功能的地址是0x7ffa1571,通用的具有JMP ESP功能的地址是0x7ffa4512。在WorkStation服務(wù)漏洞中,我用的是0x7ffa4512。
  
接下來,就可以改寫我想要的傳送文件并執(zhí)行的利用代碼了,ShellCode是以前編寫好了的,這里不在講述。寫好的利用代碼和下載Sbaa的利用代碼都附在光盤的代碼中。
   利用JMP ESP
  
這里在補(bǔ)充一點(diǎn)。前面已經(jīng)說過,Sbaa的代碼中其實(shí)有效的覆蓋函數(shù)返回地址的代碼只有一句:memcpy(szBuffer+2017,
“\x1b\x4a\xfa\x7f”,
4),但是他的ShellCode是放在SzBuffer的最前面的。從前面的分析入手,肯定是函數(shù)返回時(shí)ebx指向了SzBuffer!通過Softice查看如下圖6所示:

javascript:if(this.width>500)this.width=500" border=0>



圖6
EBX = 0x00109744,而szBuffer的首地址也是0x00109744,果然和想象的一樣!
   我之所以要說這一點(diǎn),其實(shí)是想說明我們對(duì)漏洞利用的原理其實(shí)都是差不多的,但是實(shí)現(xiàn)的手法卻可以有多種。具體怎么實(shí)現(xiàn),那是八仙過海,各顯神通。
   好了,上面就是我通過利用WorkStation服務(wù)漏洞中得出的一些體會(huì),可能有的地方寫的不是很清楚,希望能和大家相互交流。此外,本文中對(duì)Softice的抓屏我沒有其它辦法,是用數(shù)碼相機(jī)直接照下來的,所以有點(diǎn)模糊,希望大家見諒。

相關(guān)文章

最新評(píng)論