这个lab的目的在于进一步分析汇编码。由于冯氏体系下数据和程序代码都以二进制存储,而且某些不安全的代码可能会在扫描缓冲区时跨越边界,改变一些不应当改变的值,这就给了著名的buffer overflow attack机会。先期知识:最好搞清楚函数调用的机制,弄明白rsp的值和其指向的值到底是什么(可见这篇博客http://www.cnblogs.com/bangerlee/archive/2012/05/22/2508772.html
PART 1要求我使用经典的buffer overflow attack插入我自己的exploit code。首先看level 1(http://csapp.cs.cmu.edu/3e/attacklab.pdf)
void test()
{
int val;
val = getbuf();
printf("No exploit. Getbuf returned 0x%x\n", val);
}
void touch1()
{
vlevel = 1;
printf("Touch1!: You called touch1()\n");
validate(1);
exit(0);
}
这一关要求我在主程序调用test后以调用touch1结束。
查看getbuf
00000000004017a8 <getbuf>:
4017a8: 48 83 ec 28 sub $0x28,%rsp
4017ac: 48 89 e7 mov %rsp,%rdi
4017af: e8 8c 02 00 00 callq 401a40 <Gets>
4017b4: b8 01 00 00 00 mov $0x1,%eax
4017b9: 48 83 c

本文详细介绍了如何利用缓冲区溢出攻击进行exploit code插入,通过分析Linux下的小端存储模式和函数调用机制,解决Attack Lab的各级挑战。内容涉及汇编代码编写、机器码转换、栈帧操作以及exploit code的定位与构造,旨在深化对x86-64汇编和系统安全的理解。
最低0.47元/天 解锁文章
3023

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



