• 0
  • 0

图片上传时检测时候有恶意脚本

2021-02-02 469 0 admin 所属分类:PHP 记录

图片挂马 一般分为两个步骤

① 先把携带恶意脚本的图片上传到网站目录

② 利用网站漏洞修改图片后缀 如 .php

可以借助工具将恶意代码写入到图片中 通常是头部或者尾部追加 如果用纯文本编辑器打开后修改会破坏图片文件格式

我们可以将数据以二进制的方式读取,然后转换成十六进制的格式 全局匹配有没有类似脚本标记的代码


防止PHP 脚本  如果是尾部追加 不要求标记闭合 因此只检测前缀,闭合标记不区分大小写。

为了安全,禁止开启短标记。

一共有8种组合

<?php 3c3f706870
<?phP 3c3f706850
<?pHp 3c3f704870
<?pHP 3c3f704850
<?Php 3c3f506870
<?PhP 3c3f506850
<?PHp 3c3f504870
<?PHP 3c3f504850

防止 JS脚本 只需要检测 <s < /S 之类的组合即可  需要判断闭合 

<s  </s  3c73  3c2f73
<s  </S  3c73  3c2f53
<S  </s  3c53  3c2f73
<S  </S  3c53  3c2f53

以DZ 代码为例,在上传图片前Hook资源检测 

class plugin_xxx_misc extends plugin_xxx
{
    function swfupload_check()
    {
        global $_G, $imgexts;
        require_once libfile('function/upload');
        $swfconfig = getuploadconfig($_G['uid'], $_G['fid']);
        $imgexts = explode(",", str_replace(array(';', '*.', " "), array(',', '', ''), $swfconfig['imageexts']['ext']));
        foreach ($_FILES as $k => $v) {
            if (strpos($v['type'], "image/") !== false) {
                $ext = str_replace("image/", "", $v['type']);
                if (in_array($ext, $imgexts)) {
                    //指定规格文件 检测时候携带木马
                    $fp = fopen($v['tmp_name'], "rb");
                    // 以十六进制方式读取所有文件
                    $hexCode = bin2hex(fread($fp, $v['size']));
                    fclose($fp);
                    if (preg_match("/(3c3f706870)|(3c3f706850)|(3c3f704870)|(3c3f704850)|(3c3f506870)|(3c3f506850)|(3c3f504870)|(3c3f504850)|(3c73.+?3c2f73)|(3c73.+?3c2f53)|(3c53.+?3c2f73)|(3c53.+?3c2f53)/is", $hexCode)) {
                        // 没有合法的文件被上传
                        if($_GET['simple'] == 1) {
                            echo 'DISCUZUPLOAD|-9|0|1|0';
                        } elseif($_GET['simple'] == 2) {
                            echo 'DISCUZUPLOAD|'.($_GET['type'] == 'image' ? '1' : '0').'|-9|0|1||'.$v['name'].'|0';
                        } else {
                            exit("-9");
                        }
                    }
                }
            }
        }
    }
}


 安全的处理方式

① 网站源码 和 上传的附件 分离 OSS 开发

② 非脚本目录禁止执行权限

③ 禁用系统函数 如 eval 

返回顶部