技术分享:如何利用文件上传执行XSS?

boyanx16小时前技术教程2

利用文件上传实现XSS攻击是一个Hacking Web应用的很好机会,特别是无处不在的用户头像上传案例中,这就给予我们很多发现开发者错误的机会。基本的文件上传 XSS 攻击有以下几种。

1) 文件名

文件名本身可能就是网页的一部分可以造成反射,所以可以通过将 XSS 语句插入文件名中来触发反射。

尽管不是有意为之,但是这个 XSS 可以实践在
http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_fileupload_value。

2) 元数据

使用 exiftool(
http://www.sno.phy.queensu.ca/~phil/exiftool/) 工具可以修改 EXIF 元数据,从而在某些地方造成反射:

$ exiftool -FIELD=XSS FILE

例子:

$ exiftool -Artist=’ “><img src=1 onerror=alert(document.domain)>’ brute.jpeg

3) 内容

如果 Web 应用允许上传 SVG(一种图像类型)扩展名,则以下内容可以用来触发 XSS:

<svg xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)"/>

一个 POC 可以在这里看到 brutelogic.com.br/poc.svg。

4)源码

我们可以很容易的创建一张包含 javascript payload 的 GIF 图片,然后将这张图片当做源码加以引用。如果我们可以成功的注入相同的域名,如下所示,则这样可以有效的帮我们绕过 CSP(内容安全策略)防护(其不允许执行例如<script>alert(1)</script>

创建这样一张图片可以使用如下内容并将文件命名为 .gif 后缀:

GIF89a/*<svg/onload=alert(1)>*/=alert(document.domain)//;

GIF 文件标识 GIF89a 做为一个 javascript 的变量分配给 alert 函数。中间注释部分的 XSS 是为了以防图像被检索为 text/HTML MIME 类型时,通过请求文件来执行 payload。

我们通过下图可以发现,类 UNIX 命令的 PHP 函数 exif_imagetype() 和 getimagesize() 都会将这个文件识别为 GIF 文件。而一般的 Web 应用都是使用这些函数来验证图像类型的,所以这样一个文件是可以被上传的(但上传后可能会被杀毒软件查杀)。

更多可以用作 javascript 变量赋值的 ASCII 文件类型标识符,请参见
https://en.wikipedia.org/wiki/List_of_file_signatures 。

更多关于文件上传 XSS 的详尽示例,包括绕过像 GD 库等过滤的例子,请参见
https://github.com/d0lph1n98/Defeating-PHP-GD-imagecreatefro.gif 。

转自FreeBuf黑客与极客(FreeBuf.COM),黑客迷修改发布!

标签: js文件上传

相关文章

往服务器上传大文件

往服务器上传大文件,如何往服务器上传大文件,怎样往服务器上传大文件,往服务器上传大文件方法,往服务器上传大文件配置,往服务器上传大文件代码,往服务器上传大文件源码,往服务器上传大文件源代码,往服务器上...

js获取上传文件类型以及大小的方法

前端web上传文件时,需要在上传之前判断一下文件的类型以及文件的大小,HTML为前端的标记语言是无法做到这一点,只能使用javascript 动态脚本代码来实现。js获取上传文件大小的方法示例代码:&...

常用JSP文件上传,下载的一些方法

常用JSP文件上传,下载的一些方法,Java实现文件分片上传、大文件秒传,大文件如何做断点续传?JAVAWEB 文件上传及下载,JAVA大文件上传,大文件下载解决方案,JAVA实现文件分片上传并且断点...

文件太大上传不了?看这里,秒传

前言相信很多开发者,都做过文件上传的功能。简单的文件上传很容易,在PHP里两个函数就能搞定:file_existsmove_uploaded_file第一个函数判断文件是否存在,第二个函数上传文件。但...

DeepSeek从入门到精通(13)——上传文件功能

DeepSeek 提供的 上传文件功能 让你可以上传本地文件(如 PDF、Word、Excel、PPT、TXT 等),然后DeepSeek可以帮助你阅读、解析和提取文件中的信息,并回答你的相关问题。主...

Axure高保真教程:上传本地图片

编辑导语:上传图片是常见功能之一,但是Axure里没有上传图片的元件,因此,若想画出高保真的上传图片原型,我们则需要另想方法。本篇文章里,作者介绍了利用代码制作上传图片原型模板的操作流程,不妨来看一下...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。