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

news/2024/10/20 0:27:31/

因为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博客


http://www.ppmy.cn/news/1442663.html

相关文章

应用实战 | 别踩白块小游戏,邀请大家来PK挑战~

“踩白块会输”是一个简单的微信小程序游戏&#xff0c;灵感来自当年火热的别踩白块游戏&#xff0c;程序内分成三个模块&#xff1a;手残模式、经典模式和极速模式&#xff0c;分别对应由易到难的三种玩法&#xff0c;可以查看游戏排名。动画效果采用JS实现&#xff0c;小程序…

【真实体验】使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试【YashanDB迁移体验官】

一、前言 说一下我和崖山数据库的结缘&#xff0c;大概在去年吧&#xff0c;因为我经常在墨天轮写文章&#xff0c;看到崖山数据库推出了一崖山体验官的活动&#xff0c;我就报名参加了。第一次体验了崖山数据库&#xff0c;也测试了我司数据库到崖山数据库的兼容性&#xff0…

【Java Spring MVC项目异常解决】HTTP 404

报404错误多数情况下是因为路径问题&#xff0c;特别是在基于MVC框架的Web应用中。HTTP 404错误是客户端错误响应代码&#xff0c;表明服务器无法找到客户端请求的资源&#xff08;例如&#xff0c;Web页面、图片、文件&#xff09;。在Spring MVC项目中&#xff0c;404错误常见…

electron 中的 ipcMain 介绍

在 Electron 应用中&#xff0c;ipcMain 是主进程中的一个模块&#xff0c;用于处理与渲染进程之间的进程间通信 (IPC, Inter-Process Communication)。Electron 应用程序通常分为两个主要的进程&#xff1a;主进程和渲染进程。主进程&#xff08;通常是 main.js 文件&#xff…

asp.net表单上传文件

asp.net表单上传文件 可以用自己的主机搭建服务器环境测试 1.借鉴文章&#xff1a; 原文链接&#xff1a;http://www.cnblogs.com/gxwang/p/4883902.html 2.html端示例代码&#xff0c; 文件名为index.aspx <% Page Language"C#" AutoEventWireup"true…

Java23种设计模式-行为型模式之访问者模式

访问者模式&#xff08;Visitor Pattern&#xff09;&#xff1a;主要用于解决对象结构中元素的行为操作问题。这种模式允许在不修改对象结构的情况下&#xff0c;为其添加新的操作。 主要角色&#xff1a; 访问者&#xff08;Visitor&#xff09;&#xff1a;定义了一个访问元…

汽车信息安全--如何理解TrustZone(1)

目录 1.车规MCU少见TrustZone 2. 什么是TrustZone 2.1 TrustZone隔离了什么&#xff1f; 2.2 处理器寄存器和异常处理 3.小结 1.车规MCU少见TrustZone 在车规MCU里&#xff0c;谈到信息安全大家想到的大多可能都是御三家的HSM方案&#xff1a;英飞凌的HSM\SHE、瑞萨的ICU…

Babylon.js 读取GLB模型元数据

如果你熟悉将 3D 资源导出到游戏引擎的过程&#xff0c;那么无疑也会熟悉 3D 资源的 PBR 和 GLB 导出过程。 这是我们之前概述的内容&#xff0c;也是我们交互式工作的所有资产准备的基石。 然而&#xff0c;从传统的管道意义上来说&#xff0c;能够用元数据标记网格有很多逻辑…