【fastadmin安全篇】最新thinkphp5.0漏洞修补

xiaopang996 1月前 712

前言

近日thinkphp团队发布了版本更新 其中修复了一处getshell漏洞。
影响范围:5.x < 5.1.31, <= 5.0.23
https://github.com/top-think/framework/commit/b797d72352e6b4eb0e11b6bc2a2ef25907b7756f#diff-d86cf2606459bf4da21b7c3a1f7191f3
危害:远程代码执行

漏洞修补

找到文件

thinkphp\library\think\App.php

大约553行
或者可以直接搜索

$controller = strip_tags($result[1] ?: $config['default_controller']);

然后修改为

        // 获取控制器名
         $controller = strip_tags($result[1] ?: $config['default_controller']);
         if (!preg_match('/^[A-Za-z](\w)*$/', $controller)) {
             throw new HttpException(404, 'controller not exists:' . $controller);
         }
         $controller = $convert ? strtolower($controller) : $controller;

image.png

最后于 1月前 被xiaopang996编辑
最佳回复
  • F4NNIU 1月前

    ThinkPHP5.*版本发布安全更新
    2018 年 12 月 9 日 发布
    本次版本更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。
    更新框架修复
    如果你使用composer安装,并且一直保持最新版本使用的话,使用下面的指令更新到最新版本即可

    composer update topthink/framework
    如果你使用了git版本库安装,也请及时更新你所用的仓库版本。

    如果各种原因暂时无法更新到最新版本(早期版本升级到最新版本可能存在兼容性问题,请首先参考官方手册的升级指导章节),可以参考下面的方式进行手动修正。

    手动修复
    5.0版本
    在thinkApp类的module方法的获取控制器的代码后面加上

    if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
        throw new HttpException(404, 'controller not exists:' . $controller);
    }

    5.1版本
    在thinkroutedispatchUrl类的parseUrl方法,解析控制器后加上

    if ($controller && !preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
        throw new HttpException(404, 'controller not exists:' . $controller);
    }

    https://blog.thinkphp.cn/869075

最新回复 (5)
  • code 1月前
    感谢TA
    0 引用 2

    修改完,后台页面直接404

  • cnqn 1月前
    感谢TA
    0 引用 3

    不会吧???

  • F4NNIU 打赏 最佳回复 1月前
    感谢TA
    0 引用 4

    ThinkPHP5.*版本发布安全更新
    2018 年 12 月 9 日 发布
    本次版本更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。
    更新框架修复
    如果你使用composer安装,并且一直保持最新版本使用的话,使用下面的指令更新到最新版本即可

    composer update topthink/framework
    如果你使用了git版本库安装,也请及时更新你所用的仓库版本。

    如果各种原因暂时无法更新到最新版本(早期版本升级到最新版本可能存在兼容性问题,请首先参考官方手册的升级指导章节),可以参考下面的方式进行手动修正。

    手动修复
    5.0版本
    在thinkApp类的module方法的获取控制器的代码后面加上

    if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
        throw new HttpException(404, 'controller not exists:' . $controller);
    }

    5.1版本
    在thinkroutedispatchUrl类的parseUrl方法,解析控制器后加上

    if ($controller && !preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
        throw new HttpException(404, 'controller not exists:' . $controller);
    }

    https://blog.thinkphp.cn/869075

    最后于 1月前 被F4NNIU编辑
  • ggggkhn 1月前
    感谢TA
    0 引用 5

    楼主的代码有问题,没有复制全.

  • xiaopang996 楼主 1月前
    感谢TA
    0 引用 6

    image.png

  • 未登录
    7
返回