文件上传复习(upload-labs14-17关)

因为14-16关需要用到图片码,所以了解一下图片码

利用copy命令合成一个图片马使用_copy 图片马-CSDN博客

图片木马制作方法详细教程_如何制作图片马-CSDN博客

Pass-14(文件包含+图片马)

首先,图片的格式在防护中通常是不会使用后缀进行判断的依据,文件头是文件开头的一段二进制码,不同类型的图片也就会有不同的二进制头。
JPEG (jpg),文件头:FF D8 FF E1
PNG (png),文件头:89 50 4E 47
GIF (gif),文件头:47 49 46 38

查看源码

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

copy 2005.jpg /b + 2005.php /a 0811.php

使用这条命令可以创建一个图片码,操作如下:


制作完成后就直接上传这个图片码,然后直接访问上传的图片的url会看见这个图片:

想要看见上传成功与否需要构造一个命令:

构造:include.php?file=upload/8020240424181057.jpg

发现上传成功了

利用文件包含漏洞  将含有php代码的图片马当做php文件解析

文件包含就相当于将其他目录的php文件复制粘贴到所在的php文件 减少代码的重复书写

这里利用get传参 将图片木马里面的代码复制过来并执行

 Pass-15(文件包含+图片马)

代码和第14关差不多,查看提示,发现它给出了一个函数

关键函数是getimagesize,getimagesize函数会对目标的十六进制的前几个字符串进行读取。比如GIF的文件头问GIF89a,png的文件头为塒NG。尝试读取上传文件(图片)的大小,如果该函数能够成功读取上传文件的大小,就说明该文件是一个图片;如果不能成功读取,那么就说明该文件不是一张图片,是一个恶意文件。

具体的关于getimagesize()函数参考:

渗透测试-文件上传之getimagesize函数绕过-CSDN博客

其他的就和第14关类似,还是利用上一题用到的图片码

构造url:

include.php?file=upload/3820240425124822.jpeg

访问url,上传成功

  Pass-16(文件包含+图片马)

注意:php5.6以上的版本才能成功解析图片木马

查看提示,要用到exif_imagetype()函数

代码和前一关差不多,这里就不看了

函数exif_imagetype()

exif_imagetype() 读取一个图像的第一个字节并检查其签名。

但是这一关要注意:需要开启php_exif模块

更改php版本以及开启php_exif后再上传图片码

然后构造url:

include.php?file=upload/9620240425051339.jpg

上传成功

注意:(14,15,16关)访问文件路径时需要构建url,利用文件包含漏洞upload-labs/include.php?file=upload/文件名

Pass-17(二次渲染+图片马/条件竞争)

二次渲染就是在我们上传的图片后,网站会对图片进行二次处理,比如对图片的尺寸、格式、以及网站对图片进行定义的一些要求等进行处理,并且服务器会对里面的内容进行二次替换更新,在处理完后,会生成一个合规的图片在网站上显示出来。

imagecreatefromjpeg()函数,二次渲染是由Gif文件或 URL 创建一个新图象。成功则返回一图像标识符/图像资源,失败则返回false,导致图片马的数据丢失,上传图片马失败。

函数介绍

basename — 返回路径中的文件名部分

给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。

Note:

basename() 纯粹基于输入字符串操作, 它不会受实际文件系统和类似 ".." 的路径格式影响。

例子如下:

<?php
echo "1) ".basename("/etc/sudoers.d", ".d").PHP_EOL;
echo "2) ".basename("/etc/sudoers.d").PHP_EOL;
echo "3) ".basename("/etc/passwd").PHP_EOL;
echo "4) ".basename("/etc/").PHP_EOL;
echo "5) ".basename(".").PHP_EOL;
echo "6) ".basename("/");
?>
 
1) sudoers
2) sudoers.d
3) passwd
4) etc
5) .
6)

imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像
imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像
imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像

imagejpeg()

(PHP 4, PHP 5, PHP 7, PHP 8)

imagejpeg — 输出图象到浏览器或文件。
说明

imagejpeg ( resource $image , string $filename = ? , int $quality = ? ) : bool

imagejpeg() 从 image 图像以 filename 为文件名创建一个 JPEG 图像。
参数

image

由图象创建函数(例如imagecreatetruecolor())返回的图象资源。

filename

文件保存的路径,如果未设置或为 null,将会直接输出原始图象流。

如果要省略这个参数而提供 quality 参数,使用NULL。

quality

quality 为可选项,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。默认为 IJG 默认的质量值(大约 75)。
返回值

成功时返回 true, 或者在失败时返回 false。

查看提示,存在二次渲染漏洞

二次渲染说白了就是上传的图片

他会重新创建画布 然后把里面的东西重新渲染一边

如果你的代码在里面也可能被渲染一遍 (具体怎么渲染得看底层代码了)

代码变成图片一部分那就失效了

上传前面制作图片码用到的.png文件,访问路径只发现了图片的内容,没有解析到图片中的PHP代码。因为系统把我上传的图片重新渲染了一遍,或者说是压缩了我所上传图片的内容。基于这样的原因,我们可以把原来的图片马和上传后被渲染的图片进行比较,比较的是图片的16进制形式。

接下来先把被渲染的图片下载下来,直接右键图片,点击“另存图像为”

将两个图像使用010工具中的比较文件打开

将被渲染后的图片与原来的图片进行对比,利用工具可以明显的看到渲染前后图像文件的异同

复制一句话木马的16进制

在已经被渲染的图像里面,未被渲染的区域插入一句话木马

修改以后保存,然后再上传修改后的文件

再进行访问url,发现上传成功了

访问文件路径时需要构造URL

利用文件包含漏洞upload-labs/include.php?file=upload/文件名

文件上传:Upload靶场11到17关详解。_upload第十一关-CSDN博客

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值