网络安全 文件上传漏洞-13 第十三关 Pass-13

点击第十三关,并点击选择显示源码。可以看到,题目要求我们上传一个图片马到服务器:

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 = "上传出错!";
        }
    }
}

分析代码,我们可以看到服务器首先使用 fopen 和fread函数读取我们的文件:

fopen(file_parh,mode)  打开某个文件。file_path为文件路径;mode为打开模式,r表示以只读模式打开,b表示以二进制的方式打开。

fread(file_handler,len):读取文件的内容。file_handler为文件指针,是fopen的返回值,len表示读取文件的长度。

因为这一关采用读取文件的方式判断文件类型,我们不能简单的提交php木马文件。此时我们可以尝试将一句话木马的内容写进图片中。这里可以使用copy命令,copy命令的语法格式(命令提示符中 copy /? 命令可查看copy命令的用法):

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ]  source [/A | /B]  [+ source [/A | /B] [+ ...]] [destination [/A | /B]]

其中各个参数的含义如下:

/A 表示一个 ASCII 文本文件。

/B 表示一个二进位文件。

/D:允许解密要创建的目标文件。

/V:验证新文件写入是否正确。

/N:复制带有非 8dot3 名称的文件时,尽可能使用短文件名。

/Y:不使用确认是否要覆盖现有目标文件的提示。

/-Y:使用确认是否要覆盖现有目标文件的提示。

/Z:用可重新启动模式复制已联网的文件。

/L           如果源是符号链接,请将链接复制到目标而不是源链接指向的实际文件。

其中我们用到一张图片和我们创建的一句话木马文件,再命令提示符(按住 win+r 快捷键,然后输入 cmd 并回车即可打开)中执行命令,然后回车

copy pic_body.png /b + info.php /a myphp.png

这里 /b 表示以二进制的方式打开图片, /a 表示以ascii码的方式打开文件 + 号表示将两个文件进行合并

我们发现文件已经被成功合并,可以用记事本打开图像进行确认,在文件的末尾出现一句话木马的代码:

此时我们上传我们生成的图片马,然后右键单击复制图像地址,然后点击 “文件包含漏洞” 进行测试:

可以看到测试代码,需要我们传一个 file 参数:

那么我们使用刚刚的图像地址构建url并回车,获得目标服务器的php信息:

同样的方式,可以上传jpg和gif的图片马

上一关(网络安全 文件上传漏洞-12 第十二关 Pass-12

下一关(网络安全 文件上传漏洞-14 第十四关 Pass-14

  • 31
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值