Jshop小程序商城程序前台SQL注入+后台RCE

起因

  • 最近不知道在搞什么,每周一堆目标发来让打,拿安服仔不当人。其中一个目标是用Jshop小程序商城程序,百度搜了一下有源码,就下载回来让大牛(@Joseph)带着一起审计了下。此处特别感谢Joseph、金枪银矛小霸王二位大佬相助。

程序简介

  • Jshop小程序商城,是一款开源的电商系统,包含微信小程序、支付宝小程序、APP、公众号、H5端、PC端、抖音小程序、今日头条小程序、皮皮虾小程序、西瓜视频小程序,前台使用uni-app开发,后台采用Thinkphp5.1框架开发。
    项目地址:https://gitee.com/hnjihai/jshop_mall

  • SQL注入

  1. 拼接导致的注入
  • 文件位置:/application/api/controller/Goods.php
  • 关键代码
public function getPickGoods()
{
.........省略部分代码
    if (isset($postWhere['label_id']) && $postWhere['label_id']) {
     $where[] = ['', 'exp', Db::raw('FIND_IN_SET(' . $postWhere['label_id'] . ',g.label_ids)')];
            }
}

这里产生了拼接导致的注入,我们只需要看postwhere来自哪里

if (input('?param.where')) {
            $postWhere = json_decode(input('param.where'), true);
            //判断商品搜索,
            if (isset($postWhere['search_name']) && $postWhere['search_name']) {
                $where[] = ['g.name|g.bn|g.brief', 'LIKE', '%' . $postWhere['search_name'] . '%'];
            }
            if (isset($postWhere['bn']) && $postWhere['bn']) {
                $where[] = ['g.bn', '=', $postWhere['bn']];
            }

Post提交json_encode后的where参数再经过decode后赋值传给的postwhere
造成了getPickGoods功能where参数的注入

后台RCE

  • 依旧是Goods.php
  • 关键代码:
    public function getGoodsParams()
    {
        $return_data = [
            'status' => false,
            'msg'    => '无参数相关信息',
            'data'   => []
        ];
        $goods_id    = input('id/d', 0); //商品ID
        $goodsModel  = new GoodsModel();
        $brandModel  = new Brand();
        $returnGoods = $goodsModel->getOne($goods_id, 'id,bn,name,brand_id,image_id,params,spes_desc');

        if ($returnGoods['status']) {
            $params = [];
            $data   = $returnGoods['data'];
            if ($data['params']) {
                $goodsParams = unserialize($data['params']);
                $goodsParams = array_filter($goodsParams);
                if ($goodsParams) {
                    foreach ($goodsParams as $key => $val) {
                        if (is_array($val)) {
                            $val      = implode('、', $val);
                            $params[] = [
                                'name'  => $key,
                                'value' => $val ? $val : ''
                            ];
  • 在添加商品 - 商品参数位置可触发反序列化
  • 因为这俩注入对特么我的目标无效!所以后台RCE没有仔细研究!点一下就好了!有兴趣的大佬可以仔细看看,顺便带带我!

刚学怎么用Markdown,排版不好各位勿喷!

2 个赞

不是给你说还有一处order?

图片挂了吧

图片格式有问题 所以调整后可以显示了

感谢分享
图片你传到简书了 但是没有refer 导致 图片不能显示。。。