php escapeshellcmd多字节编码漏洞解析及延伸

php escapeshellcmd多字节编码漏洞解析及延伸

ID:38344410

大小:22.34 KB

页数:7页

时间:2019-06-10

php escapeshellcmd多字节编码漏洞解析及延伸_第1页
php escapeshellcmd多字节编码漏洞解析及延伸_第2页
php escapeshellcmd多字节编码漏洞解析及延伸_第3页
php escapeshellcmd多字节编码漏洞解析及延伸_第4页
php escapeshellcmd多字节编码漏洞解析及延伸_第5页
资源描述:

《php escapeshellcmd多字节编码漏洞解析及延伸》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、phpescapeshellcmd多字节编码漏洞解析及延伸    PHP5<=5.2.5    PHP4<=4.4.8    一些允许如GBK,EUC-KR,SJIS等宽字节字符集的系统都可能受此影响,影响还是非常大的,国内的虚拟主机应该是通杀的,在测试完这个漏洞之后,发现还是十分有意思的,以前也有过对这种类型安全漏洞的研究,于是就把相关的漏洞解释和一些自己的想法都写出来,也希望国内的一些有漏洞的平台能迅速做出响应,修补漏洞。    这个漏洞出在php的用来转义命令行字符串的函数上,这些函数底层是用的php_escape_

2、shell_cmd这个函数的,我们先来看看他的处理过程:/*{{{php_escape_shell_cmd  Escapeallcharsthatcouldpossiblybeusedto  breakoutofashellcommand  Thisfunctionemalloc'sastringandreturnsthepointer.  Remembertoefreeitwhendonewithit.      *NOT*safeforbinarystrings*/  char*php_escape_shell_cmd

3、(char*str){    registerintx,y,l;    char*cmd;    char*p=NULL;    l=strlen(str);    cmd=safe_emalloc(2,l,1);        for(x=0,y=0;x

4、l-x-1))){                    /*noop*/                }elseif(p&&*p==str[x]){                    p=NULL;                }else{                    cmd[y++]='\';                }                cmd[y++]=str[x];                break; #endif             case'#':/*This

5、ischaracter-setindependent*/            case'&':            case';':            case'`':            case'

6、':            case'*':            case'?':            case'~':            case'<':            case'>':            case'^':            case'(':            case

7、')':            case'[':            case']':            case'{':            case'}':            case'$':            case'\':            case'x0A':/*excludingthesetwo*/            case'xFF':#ifdefPHP_WIN32            /*sinceWindowsdoesnotallowustoescapethesechar

8、s,justremovethem*/            case'%':                cmd[y++]='';                break;#endif                cmd[y++]='\';                /*fall-through*/            default:                cmd[y++]=str[x];        }    }    cmd[y]='';    returncmd;}/*}}}*/    

9、可以看到,php通过将",',#,&,;.....等等在shell命令行里有特殊意义的字符都通过在前面加上变成".',#,&,;......来进行转义,使得用户的输入被过滤,来避免产生commandinjection漏洞。在php看来,只要过滤了这些字符,送入到system等函数中时,参数就

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。