ThinkPHP5.x rec 漏洞分析与复现

https://help.aliyun.com/noticelist/articleid/1000081331.html?spm=5176.2020520001.1004.7.2e874bd363uLuf

先贴个漏洞预警,这里做一些内容摘要:

漏洞描述

由于ThinkPHP5框架对控制器名没有进行足够的安全检测,导致在没有开启强制路由的情况下,黑客构造特定的请求,可直接GetWebShell。

影响版本

ThinkPHP 5.0系列 < 5.0.23
ThinkPHP 5.1系列 < 5.1.31

漏洞分析

我们从补丁上来对漏洞做一定的分析
5.0.x
再放一个5.0.20源码
下面使补丁中修改的内容
在这里插入图片描述
于是我们从 $ controller开始分析
补丁对$ controller的名称做了过滤,接着往下看代码:
在这里插入图片描述
这里对controller实例化,到Loader里看看:

    public static function controller($name, $layer = 'controller', $appendSuffix = false, $empty = '')
    {
   
        list($module, $class) = self::getModuleAndClass($name, $layer, $appendSuffix);

        if (class_exists($class)) {
   
            return App::invokeClass($class);
        }

        if ($empty) {
   
            $emptyClass = self::parseClass($module, $layer, $empty, $appendSuffix);

            if (class_exists($emptyClass)) {
   
                return new $emptyClass(Request::instance());
            }
        }

大体意思就是如果这个类name存在就实例化,接着跟进getModuleAndClass:

    protected static function getModuleAndClass($name, $layer, $appendSuffix)
    {
   
        if (false !== strpos($name, '\\')) {
   
            $module = Request::
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值