Jus*_*est 8 c stack-overflow ubuntu shellcode
现代编译器GCC非常强大,甚至可以防止编译阶段的缓冲区溢出,因此OS无法在堆栈空间上运行代码.
例如:
void function(char *str)
{
char buffer[16];
strncpy(buffer, str, 256);
}
void main()
{
char large_string[256];
int i;
for( i = 0; i < 256; i++)
large_string[i] = 'A';
function(large_string);
}
Run Code Online (Sandbox Code Playgroud)
我可以获得神奇的0x41414141的唯一方法是设置GCC编译参数,如:
gcc -fno-stack-protector -z execstack stackoverflow.c -o stackoverflow
Run Code Online (Sandbox Code Playgroud)
(我在ubuntu 10.04 x86清晰32位盒子上测试过它)
有什么方法可以绕过GCC堆栈粉碎保护吗?
编译时应禁用堆栈保护:
gcc -fno-stack-protector -z execstack stackoverflow.c -o stackoverflow
Run Code Online (Sandbox Code Playgroud)
您可能还想禁用地址空间随机化(ASLR):
sudo sh -c 'echo 0 > /proc/sys/kernel/randomize_va_space'
Run Code Online (Sandbox Code Playgroud)
现在你可以尝试缓冲区溢出,我建议阅读Smashing the Stack for Fun and Profit
编辑:
就像我在评论中所说的那样,可以安全地假设在你的任务中可以接受禁用堆栈保护,但是,如果你想绕过堆栈保护,你应该检查SOF以查询与这些问题相关的金丝雀问题:
有没有办法绕过SSP(StackSmashing Protection)/ Propolice?
| 归档时间: |
|
| 查看次数: |
1187 次 |
| 最近记录: |