首页 电脑 电脑学堂 查看内容

简单绕过堆栈不可执行保护

2009-2-20 06:24 1479 0

摘要: 对付缓冲区溢出的常见方法就是堆栈不可执行保护。众所周知溢出成功后都是执行shellcode,而shellcode一般都是在缓存区里,只要操作系统限制堆栈中的数据只可读写...
关键词: nbsp 堆栈 execl shellcode 程序 可将 可读写 运行 参数 保护

对付缓冲区溢出的常见方法就是堆栈不可执行保护。众所周知溢出成功后都是执行shellcode,而shellcode一般都是在缓存区里,只要操作系统限制堆栈中的数据只可读写,不可执行,一旦堆栈中的数据被执行立即报告错误,并退出。那么溢出成功后也不能执行shellcode。     但如果在堆栈中构造号参数然后跳转到标准C库中去运行,那么也就避开了堆栈保护。如下简单程序演示其原理: #include#includeint main(int argc,char * argv[]){        long p[1];        char *cmd = "/bin/sh";        printf("execl addr = %p\n",execl);        p[2] = execl;        p[3] = exit;        p[4] = cmd;        p[5] = 0;} 运行程序可将得到一个/bin/sh   shell注意:程序没有构造机器指令,仅通过溢出填写了一个返回地址->execl及execl所需参数。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部