Tom*_*a17 15 c security buffer overflow
我阅读了许多关于strcpy,memcpy等不安全函数的文章,这些函数在处理外部数据时可能会导致安全问题,例如文件内容或来自套接字的数据.这可能听起来很愚蠢,但我写了一个易受攻击的程序,但我没有设法"破解"它.
我理解缓冲区溢出的问题.以此示例代码为例:
int main() {
char buffer[1];
int var = 0;
scan("%s", &buffer);
printf("var = 0x%x\n", var);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我执行程序并输入"abcde"时,程序输出0x65646362,它是十六进制+ little-endian中的"edcb".但是我读到你可以修改在堆栈上推送的eip值,以使程序执行一些不需要的代码(例如,在调用system()函数之前).
但是函数的程序集开始如下:
push %ebp
mov %ebp, %esp
and $0xfffffff0, %esp
sub $0x20, %esp
Run Code Online (Sandbox Code Playgroud)
由于%esp的值在函数开始时是随机的,并且由于这个"和",似乎没有可靠的方法将精确值写入推入的eip值.
此外,我读到可以执行你在缓冲区中编写的代码(这里缓冲区只有1个字节长,但实际上它足够大,可以存储一些代码)但是你会给依次提供什么值的eip这样做(考虑到缓冲区的位置是随机的)?
那么为什么开发人员如此担心安全问题(除了程序可能崩溃)?你有一个易受攻击的程序的例子,以及如何"破解"它来执行不需要的代码?我在linux上试过这个,Windows不太安全吗?