网站挂马了,几个月没打开的网站突然发现被挂马了

@Ta 2020-07-09发布,2020-07-09修改 6048点击

Snipaste_2020-07-09_12-48-47.png

/public/index.php 文件已经被删了,我说打开网站怎么老是 404

用的 ThinkPHP V5.1.29 LTS ,我才发现有一个 /admin 文件夹,没有鉴权,任何人都能用,本意我是拿来上传成绩的,考虑到也就只有为数不多的人用,也就没有去管了,检查了下代码,就只有一处有上传文件的代码,各位审计下哪里有问题:

    //导入成绩
    public function import()
    {
        $semester = intval(Request::param('semester', '0'));//第几个学期
        $find = Db::table('final_grade_index')->where('semester', $semester)->find();

        if($semester < 1 || $find === null){
            return json([
                'code' => 1,
                'msg' => '不存在该学期,请重新选择“哪个学期”!'
            ]);
        }

        if($find['import'] !== 0){
            return json([
                'code' => -1,
                'msg' => '第 '.$semester.' 学期的期末成绩数据已经导入了,请确认无误后再上传!'
            ]);
        }

        if($_FILES['exam_data']['error'] > 0){
            return json([
                'code' => -2,
                'msg' => '上传文件失败,请稍后再试!'
            ]);
        }

        if(substr($_FILES['exam_data']['name'], -4)!=='.csv' || $_FILES['exam_data']['type'] !== 'application/vnd.ms-excel'){
            return json([
                'code' => -3,
                'msg' => '仅能够上传 .csv 文件!'
            ]);
        }

        if($_FILES['exam_data']['size'] > 1048576){
            return json([
                'code' => -4,
                'msg' => '文件大小超出限制,只能够上传小于或等于 1MB 的文件,请重新选择!'
            ]);
        }

        $tmp = file_get_contents($_FILES['exam_data']['tmp_name']);
        $tmp = str_replace("\r\n", "\n", $tmp);
        $tmp = trim($tmp, "\xEF\xBB\xBF");

        $arr = explode("\n", $tmp);
        $arr_count = count($arr);
        unset($arr[$arr_count-1]);
        $field = explode(",", $arr[0]);

        $i = 0;
        $data = [];

        foreach ($arr as $k=>$v) {
            if($k > 0){
                $ex = explode(",", $v);
                foreach ($field as $key=>$value) {
                    if($key === 'semester'){
                        $value = $semester;
                    }
                    $data[$i][$value] = $ex[$key];
                }
                if(!isset($field['semester'])){
                    $data[$i]['semester'] = $semester;
                }
                $i += 1;
            }
        }

        try{
            Db::table('final_grade_index')
                ->where('semester', $semester)
                ->data(['import' => 1])
                ->update();//更新索引,表明已经导入数据

            Db::table('final_grade')
                ->insertAll($data);//插入数据

            $this->score_sort();//成绩排名
        }catch (\Exception $e){
            return json([
                'code' => -5,
                'msg' => '[SERVER_ERROR]请稍后再试'
            ]);
        }

        return json([
            'code' => 0,
            'msg' => '导入数据成功!'
        ]);
    }

cc.php(122.85 KB)

回复列表(3|隐藏机器人聊天)
添加新回复
回复需要登录