文件上传漏洞(客户端绕过,MIMEtipe绕过,getimagesize绕过)

客户端绕过

文件上传的前端绕过主要验证手段为前端的  javascript  代码执行

js验证代码如下:

---------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------

直接把前端代码修改掉就行

--------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------

直接删除把checkFileExt(this.value) 函数删除,即可上传

如果不行就换浏览器吧

测试链接  http://45.32.81.200:8080/vul/unsafeupload/clientcheck.php  

 

服务器绕过(MIMEtype绕过)

 

-------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------测试链接 http://45.32.81.200:8080/vul/unsafeupload/servercheck.php

首先上传一张普通图片,用burpsuite抓取数据包,发现content-type为

----------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------

image/jpeg

继续上传一个php文件,用burpsuite抓取数据包,发现content-type为

--------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------

application /octet-stream

将数据包发送到repeat 模块,将 content-type 修改为 image/jpeg,

发送数据包,发现文件上传成功

 

 

getimagesize 绕过  

测试链接:http://45.32.81.200:8080/vul/unsafeupload/getimagesize.php

getimagesize() 函数用于获取图像大小及相关信息

根据判断文件类型和文件大小(构造文件头)来判断上传文类型                                                           

在cmd中输入命令    copy /b test.png +muma.php ccc.png                                       //伪造头部

其中test.png为 原始图片 ,此命令将 test.png 和muma.php 合成,重新生成ccc.png

然后上传 ccc.png 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在HTML页面中实现文件上传,需要使用HTML表单和服务器端脚本。以下是一个简单的示例: HTML代码: ``` <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="上传文件" name="submit"> </form> ``` 解释: - `action` 属性指定表单数据提交到的服务器端脚本的URL。 - `method` 属性指定HTTP请求的方法。在文件上传中,必须使用POST方法。 - `enctype` 属性指定表单数据编码的类型。在文件上传中,必须使用 `multipart/form-data`。 在表单中包含一个 `input` 元素,类型为 `file`,它允许用户选择一个文件进行上传。文件选择后,表单提交时,文件将作为表单数据的一部分发送到服务器。文件数据可通过服务器端脚本进行处理。 服务器端脚本(示例中为PHP): ``` <?php $target_dir = "uploads/"; // 上传文件保存的目录 $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); // 上传文件的完整路径 $uploadOk = 1; $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); // 获取上传文件的扩展名 // 检查文件是否为真正的文件类型 if(isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if($check !== false) { echo "文件是一个" . $check["mime"] . "类型的文件。"; $uploadOk = 1; } else { echo "文件不是一个图片文件。"; $uploadOk = 0; } } // 检查文件是否已经存在 if (file_exists($target_file)) { echo "文件已经存在。"; $uploadOk = 0; } // 检查文件大小 if ($_FILES["fileToUpload"]["size"] > 500000) { echo "文件太大。"; $uploadOk = 0; } // 允许上传的文件类型 if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "只允许上传 JPG, JPEG, PNG 和 GIF 文件。"; $uploadOk = 0; } // 检查上传过程中是否发生了错误 if ($uploadOk == 0) { echo "文件没有成功上传。"; // 如果一切正常,将文件从临时目录移动到目标目录 } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "文件". basename( $_FILES["fileToUpload"]["name"]). "已经成功上传。"; } else { echo "上传过程中发生了错误。"; } } ?> ``` 解释: - `basename($_FILES["fileToUpload"]["name"])` 获取上传文件的文件名。 - `strtolower(pathinfo($target_file,PATHINFO_EXTENSION))` 获取上传文件的扩展名。 - `move_uploaded_file()` 函数将上传的文件从临时目录移动到目标目录。 - 代码中的其他部分用于验证上传文件的大小、类型和是否已经存在。 以上是一个简单的文件上传示例,可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值