文件上传的检测方式和绕过方法

一、客户端检测(例:js检测)

客户端检测最典型的方式就是 JavaScript 检测,由于 JavaScript 在客户端 执行的特点,可以通过修改客户端代码或先上传符合要求的文件再在上传过 程使用 BurpSuite 等工具篡改文件等方式来绕过。

绕过方法

  • 抓包:修改文件后缀。
  • 浏览器关闭js

二、MIME 类型检测

  • 是设定某种扩展名的文件用一种应用程序来打开的方式 类型,当该扩展名文件被访问的时候,浏览器会自动使 用指定应用程序来打开。
  • 多用于指定一些客户端自定义的文件名,以及一些媒体 文件打开方式。
  • 标准的文件上传组件中会自动上传文件的 MIME 类型, 但是由于 MIME 类型是从客户端传递的,修改也不影响 文件正常运行,因此通过 BurpSuite 拦截和修改 MIME 类型可以轻易绕过此类检测。

绕过方法:

抓包:修改Content-type
例如修改为image/jpeg

三、文件内容检测

  • 现在的网站多数都具有对文件头、文件内容的检测
  • 一般针对文件头、文件内容检测通常有两种方式。
    • 白名单:检测上传的文件中是否有白名单类型文件的文件头等内容特征信息,满足要 求方能上传。
    • 黑名单:检测一些 WebShell 的特征,如果包含相关特征就不允许上传。
  • 文件内容检测技术:
    • 脚本引擎内置函数
    • API调用

白名单检测绕过

可以在满足要求的文件后插入木马脚本。

黑名单检测绕过

可以通过对关键函数进行各种混淆变化。

四、图片马的利用场景

为什么要使用图片马

  • 用作被包含:当攻击者手上获取到一个网站存在上传点,但是上传做了限制,不能进一步利用 。但却发现该站存在本地文件包含漏洞。攻击可以通过构造图片马进行上传,在结合本地文件 包含漏洞执行图片马中的木马,从而可以导致攻击者获取到 WebShell。
  • 用作绕过内容检测:针对文件头和文件内容的检测有白名单和黑名单两种方式。因此,攻击者 可以通过在图片中插入恶意代码,或者插入关键函数被混淆过的恶意代码来构造图片马进行内 容检测的绕过。

制作方法

可以下载edjpgcom软件

五、扩展名过滤

  • 正常情况下如果用户上传的网页木马文件不是以对应的脚本文件扩展名 上传的,则无法正常运行,达不到控制网站服务器的目的。然而,如果 对文件扩展名检测的实现方式不当的话仍然存在风险。

文件扩展名检测通常分为黑名单检测和白名单检测两种

  • 黑名单:事先设定好不允许上传的文件扩展名(通常是各类脚本的扩展名),如 果上传文件的扩展名与黑名单匹配则不允许上传。
  • 白名单:事先设定好允许上传的文件扩展名(根据业务需求,通常是图片等), 只有上传文件的扩展名与白名单匹配才允许上传。

1.黑名单检测绕过

方法示例
不常见的扩展名PHP3、PHP4、PHP5、PH、CER、CDX、ASA 等。
扩展名大小写PHP、PhP、pHp
特殊字符结尾扩展名后加上小数点或者空格

2.白名单检测绕过

0字符截断

  • 在许多语言的函数中,比如在C、PHP等语言的常用字符串处理函数中,0x00被认为是终止符。
  • 攻击者通常会利用该字符构造特殊的后缀名或目录来绕过白名单的限制。
  • 比如应用原本只允许JPG上传,攻击者修改POST包,构造文件名为xx.php%00.jpg.jpg绕过了应用的上传文件类型判断;但是对于服务端来说,由于有0x00,最终会认为上传的是xx.php文件。
  • 若文件名可控制,可以尝试构造类似于1.asp%00.jpg的方式来进行绕过白名单检测机制;
  • 若文件路径可控制,可以尝试构造文件路径为/upload/1.asp%001.jpg,文件名为符合白名单的扩展名的方式来进行绕过白名单检测机制;
    条件:
    PHP版本小于5.3.4
    PHP.ini 配置文件中的 magic_quotes_gpc = Off

文件解析漏洞绕过

ISS
  • 对于IIS6.0而言,若文件目录名以.ASP或.ASA等脚本文件扩展名形式结尾,则该文件目录下的所有文件都会被当做ASP文件解析,因此如果上传功能允许用户自定义上传的文件路径,则可以通过将文件路径设置为以.ASP结尾的形式进行攻击,此时即使上传的网页木马文件符合扩展名白名单仍会被作为脚本解析。
  • 例如:文件路径设置为/1.asp/,文件名为1.jpg,此时访问/1.asp/1.jpg,1.jpg会被当做ASP文件解析。
  • 在IIS6.0的环境下,分号以后的内容在解析过程中会被忽略,因此如果上传类似于1.php;1.jpg形式的网页木马文件,会被当做PHP文件解析。
Apache

apache在解析文件时如果遇到无法识别的扩展名,将会从后向前解析,直到碰到认识的扩展名为止,如果扩展名白名单中包含Apache无法解析的扩展名(以.7z为例),则可以构造类似于:1.php.7z这样的文件名进行上传,由于7z文件Apache无法解析,Apache最终会将该文件作为PHP脚本解析。

Nginx

Nginx的环境下,在一个文件路径/xx.jpg后面加上/.php会将/xx.jpg/.php解析为PHP文件。

3.特殊的上传绕过方式

.htaccess

  • .htaccess叫分布式配置文件,它提供了针对目录改变配置的方法,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录;
  • .htaccess文件可以实现很多特殊功能,其中一个功能可以修改扩展名的解析方式,如:在文件中添加以下内容,可以将.jpg文件解析为PHP文件。
    AddTypeapplication/x-httpd-php.jpg
    在这种情况下我们只需要上传一个图片马以及上述.htaccess文件,即可通过WebShell控制服务器;

双文件上传

  • 双文件上传是一种特殊的攻击方式,该类型的攻击主要是利用程序员在编写白名单检测机制时没有考虑到一次性上传多个文件的情况下,检测机制的不完整性来进行上传攻击。
  • 通常可以通过修改html页面的方式来实现一次上传多个文件,其中第一个文件为正常的文件,第二个文件为WebShell文件,服务端在校验了第一个文件通过后,检测机制对第二个文件失效,使得WebShell文件上传成功。

示例:
在这里插入图片描述
复制一下input并更改其name
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件功能是一个常见的Web应用程序功能,攻击者可能会试图利用此功能来上恶意文件,从而实现攻击目的。以下是五种可能用于绕过文件方法: 1. 修改文件扩展名:攻击者可能会将文件的扩展名修改为能够通过上验证的类型(如将.php文件的扩展名改为.jpg),以绕过文件类型检测。 2. 修改文件内容:攻击者可能会修改文件的内容,使其成为一个有效的图片或文档文件,以绕过文件类型检测。例如,攻击者可以使用图片编辑软件来将恶意代码嵌入到一个看似合法的图片文件中。 3. 绕过客户端检测:客户端脚本通常会对上文件进行检测,以防止上恶意文件。攻击者可以禁用客户端脚本或使用其他技术来绕过检测。 4. 绕过服务端检测:服务端脚本通常会对上文件进行检测,以防止上恶意文件。攻击者可能会通过修改HTTP请求头或使用其他技术来绕过检测。 5. 利用文件目录的权限:如果文件目录的权限设置不当,攻击者可能会通过上恶意文件并执行它来获取系统权限,进而对系统进行攻击。 为了防止文件绕过攻击,开发者可以采取以下措施: 1. 对上文件进行严格的类型检测,不仅要检测文件扩展名,还要检测文件头部信息。 2. 对上文件进行安全的存储和处理,例如将上文件保存在一个独立的目录中,限制上文件的大小和数量等。 3. 对上文件进行安全的权限设置,不要允许上目录直接执行上文件。 4. 对上文件进行病毒扫描和恶意代码识别,防止上恶意文件。 5. 及时更新和修复已知的漏洞,以保持应用程序的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值