web安全之文件上传(五)

一、文件上传漏洞介绍

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。显然这种漏洞是getshell最快最直接的方法之一,需要说明的是上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。
web安全之文件上传(五)_第1张图片

二、文件上传漏洞原理

大部分的网站和应用系统都有上传功能,而程序员在开发任意文件上传功能时,并未考虑文件格式后缀的合法性校验或者是否只在前端通过js进行后缀检验。这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如(jsp、asp、php、aspx文件后缀)到服务器上,从而访问这些恶意脚本中包含的恶意代码,进行动态解析最终达到执行恶意代码的效果,进一步影响服务器安全。

三、上传检测流程

通常一个文件以HTTP协议进行上传时,将以POST请求发送至Web服务器,Web服务器接收到请求并同意后,用户与Web服务器将建立连接,并传输数据。

1.客户端javascript校验(一般只校验文件的扩展名)
2.服务端校验
3.文件头content-type字段校验(image/gif)
4.文件内容头校验(GIF89a)
5.目录路经检测(检测跟Path参数相关的内容)
6.文件扩展名检测 (检测跟文件 extension 相关的内容)
7.后缀名黑名单校验
8.后缀名白名单校验
9.自定义正则校验
10.WAF设备校验(根据不同的WAF产品而定)

四、绕过方法

同上面检测流程一样,10种类型,每种类型不一样
1.前端JS验证
基于本地验证文件是否符合要求:直接将JavaScript禁用。或者burp抓包后修改后缀,将php文件后缀现先改为jpg,burp抓包后后缀改回php。
2.服务端检测绕过(MIME 类型检测)
burp抓包修改Content-Type: 为允许的字段
Content-Type: image/gif
Content-Type: image/png
Content-Type: image/jpeg
3.服务端检测绕过(文件扩展名检测)
3.1 文件名大小写绕过
用像 AsP,pHp 之类的文件名绕过黑名单检测
3.2 名单列表绕过
用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类
3.3 特殊文件名绕过
比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方
在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性。
3.4 htaccess 文件
配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测
3.5 写入方法
首先名字为1.php:jpg,会写入一个1.php的空文件,然后再上传一个文件,然后修改名字为3.<<<
这样就会把我们这个文件的内容写入到我们上传的那个1.php空文件中
参考:https://www.waitalone.cn/php-windows-upload.html
3.6 00截断绕过上传
1.php .jpg 空格二进制20改为00
还有一些图片木马之类的,需要结合文件包含漏洞来解析。
4.黑名单验证
①寻找没有过滤的类型:
phtml php3 php4 php5 PHP phtm
例如phtml php3 php4 php5 PHP phtm这些后缀名首先得让服务器支持这些解析为php脚本运行,httpd.conf配置文件中可以查看设置。
web安全之文件上传(五)_第2张图片
从图中可以看到,我安装的Apache默认解析php和phtm的,如果黑名单并没有过滤phtm,就可以上传phtm的木马。
②大小写绕过
例如phP,黑名单上不存在的话就可以绕过,过滤严格的话一般会用个strtolower()把后缀全变为小写,那个时候就不行了。
5.iis解析漏洞
5.1 目录解析
以*.asp命名的文件夹里的文件都将会被当成ASP文件执行。
5.2 文件解析
*.asp;.jpg 像这种畸形文件名在“;”后面的直接被忽略,也就是说当成 *.asp文件执行。
IIS6.0 默认的可执行文件除了asp还包含这三种 *.asa *.cer *.cdx
5.3 默认解析
.asp .aspx .ashx .asa .cer这是系统默默认的后缀名
6.Apache解析漏洞
Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断。比如xxx.php.rar对apache来说rar是不可解析的,所以就会解析成xxx.php
7.nginx解析漏洞
开启cgi:SCRIPT_NAME FASTCGI:
www.xx.com/a.jpg/.php(任何不存在文件)-----可以解析为.php文件
a.jpg:
a.php%00.jpg----解析为a.php

五、靶场推荐

upload-labs经典文件上传靶场

六、防御与修复

1.上传文件的存储目录禁用执行权限
2.文件的后缀白名单,注意0x00截断攻击
3.不能有本地文件包含漏洞
4.及时修复web上的代码
5.升级web server

你可能感兴趣的:(web安全)