您的位置:首页 > 运维架构 > Shell

栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限(四)linux下进程内存布局

2015-02-23 10:37 423 查看
传统的32位模式下的linux内存布局,而对64位大概布局是一样的,只是分配的开始地址不同而已。



我们的主要目的是研究栈的分配,在图上我们可以看到kernel space 到stack中有一段random stack offset,而这块区间的存在是让攻击者更难以猜到被攻击栈的起始地址,从而增加栈溢出攻击的难度,但在linux上是可以配置这段random stack offset是否存在。

/proc/sys/kernel /randomize_va_sapce

通过设置参数为0 可以关闭random stack offset.

echo 0 >/proc/sys/kernel/randomize_va_space
当设置参数为0的时候,这样每次起来的相同的程序的栈空间地址分配是一样的,我们可以通过/proc/[processid]/maps 来观察进程的内存分布。

运行下面的代码多次在randomize_va_space为0或者1的情况下

buff.c

#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
char buffer[500];
printf("buf's 0x%8x\n",&buffer);
return 0;
}


gcc -o buff buff.c

你会发现在0的时候,多次的结果是一样的,而在1的时候多次结果是不相同的,下面系列中,我们会针对这2种不同的情况下的采用不同的策略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: