• 2008-07-14

    [zz]Phpcms 2007 远程文件包含漏洞

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://superhei.blogbus.com/logs/24755478.html

    [zz]Phpcms 2007 远程文件包含漏洞

    url:http://www.wolvez.org/forum/redirect.php?tid=182&goto=lastpost

    这个漏洞是一个比较普通的变量覆盖漏洞,这里转一下是由于发现这个漏洞如果是白盒那要都仔细看代码才行 :)

    引用 :

    ------------------------------------------------
    //从头开始看
    $rootdir = str_replace("\\", '/', dirname(__FILE__));

    require $rootdir.'/include/common.inc.php';//通过extract可以覆盖$rootdir为任意值

    require PHPCMS_ROOT.'/languages/'.$CONFIG['adminlanguage'].'/yp_admin.lang.php';

    if(!$_username) showmessage($LANG['please_login'],$PHPCMS['siteurl'].'member/login.php?forward='.$PHP_URL);
    require $rootdir.'/web/admin/include/common.inc.php ';//触发远程文件包含
    ------------------------------------------------

    注意看里面的2个require,第一个那引进的extract的代码,第2个require才导致漏洞的函数。

    伪代码:

    <?php
    $rootdir = str_replace("\\", '/', dirname(__FILE__));

    //下面就是require $rootdir.'/include/common.inc.php';引入的代码
    @extract($_POST, EXTR_OVERWRITE);
    @extract($_GET, EXTR_OVERWRITE);
    unset($_POST, $_GET);

    require $rootdir.'/web/admin/include/common.inc.php
    ?>

    不知道看到这里,看官们有什么感想?如果这里用grep等软件去找静态的上跟踪这个的话障很再可能就会漏调着可能分析得到的结果是:

    $rootdir = str_replace("\\", '/', dirname(__FILE__));
    require $rootdir.'/include/common.inc.php'
    require $rootdir.'/web/admin/include/common.inc.php

    一看$rootdir被过滤了,就会认为这里安全了?

    所以一味的grep等静态去找,是找不到这样的bug的上...

    来个“马后炮”,对于这样的上用灰盒测试可能效果很好:就是先看代码看common.inc.php这个躯干里发现用变量覆盖,然后黑盒去找跑那些变量可以覆盖.....



    收藏到:Del.icio.us




    评论

  • 补充一下 系统是linux 插入php一句话有\
  • 请教博主 pw6后台能获得shell吗 谢谢
  • 从某人在我blog上的那段怨气冲天的留言推断。。。
    某人用的采集器可能有XSS漏洞。。。
  • 能给个远程包含的URL吗?EXTR_OVERWRITE参数的描述是如果有冲突,覆盖已有的变量。
    用GET提交真能覆盖变量$rootdir吗?我没看全部的源码。