Pass-13

1.根据题意,本题要求上传图片马到服务器,需保证上传后的图片马中仍然包含完整的一句话木马,同时符合三种后缀。

function getReailFileType($filename){
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);    
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    
    $fileType = '';    
    switch($typeCode){      
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    
        return $fileType;
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_type = getReailFileType($temp_file);

    if($file_type == 'unknown'){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

2.源码标示是只读取文件头的前两个字节,前两个字节符合上传的三种文件格式即可。那么只需要上传shell.php在内容的头部加入三种格式的文件头即可。

根据查询,

GIF   GIF89A

JPEG(JPG)    FFD8FF

PNG    89504E87

GIF    47494638

利用图片马,将一张正常的图片jpg,和一句话php合成一张新的jpg文件:copy 13.jpg /b + 13.php /a  14.php)

 

 

  上传成功。

posted @ 2021-07-21 18:07  Nuyoah_QQ  阅读(95)  评论(0)    收藏  举报