@rg070836rg
2017-11-14T16:16:31.000000Z
字数 1142
阅读 2454
USTC网络安全
SA17011008 陈实 2017年11月14日 实验 4
32位Linux系统下的C函数如下:
void foo01()
{
char buff[16];
char Lbuffer[] = "01234567890123456789========ABCD";
strcpy (buff, Lbuffer);
}
void foo02()
{
char Lbuffer[] = "01234567890123456789========ABCD";
char buff[16];
strcpy (buff, Lbuffer);
}
用foo01()和foo02()替换buffer_overflow.c中的foo(), 通过GDB调试,
说明foo01()和foo02()是否存在缓冲区溢出漏洞。
ubuntu 16.04
①关闭地址随机化
sudo sysctl -w kernel.randomize_va_space=0
②关闭栈随机化设置
sudo /sbin/sysctl -w kernel.randomize_va_space=0
①编写并编译运行
#include <stdio.h>
#include <string.h>
char Lbuffer[] = "01234567890123456789========ABCD";
void foo()
{
char buff[16];
strcpy (buff, Lbuffer);
}
int main()
{
foo();
return 0;
}
②GDB调试
gdb buf
r
③ 反编译main&foo
disas main
disas foo
①编写并编译运行foo1
#include <stdio.h>
#include <string.h>
void foo1()
{
char buff[16];
char Lbuffer[] = "01234567890123456789========ABCD";
strcpy (buff, Lbuffer);
}
int main()
{
foo1();
return 0;
}
②调试
发生错误
①编写并编译运行foo2
#include <stdio.h>
#include <string.h>
void foo02()
{
char Lbuffer[] = "01234567890123456789========ABCD";
char buff[16];
strcpy (buff, Lbuffer);
}
int main()
{
foo02();
return 0;
}
②调试
未发生错误
通过本次实验,对缓冲区溢出攻击的原理有了更进一步的理解,需要更进一步的去了解shellcode原理与攻击。