WEB安全入门系列之文件上传漏洞详解

内容大纲:

一、文件解析漏洞

二、上传本地验证绕过

三、上传服务器端验证绕过

四、漏洞高级玩法

五、上传漏洞修复

 

一、文件解析漏洞

概念:

黑客将恶意文件上传到服务器中解析漏洞主要说的是一些特殊文件被iis、apache、nginx在某种情况下解释成脚本文件格式的漏洞

 

1.1、IIS6.0解析漏洞

1.目录解析

--创建/xx.asp/,上传图片马,即路径为:/xx.asp/xx.jpg,打开图片会被当着脚本来解析

,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。

2、分号解析

--nfck.asp;.jpg(其他类型nfck.php/.jpg nfck.php.jpg)

在IIS6.0下,分号后面的不被解析,会被服务器看成是xx.asp

3、畸形文件名解析

上传.asa\.cer\.cdx\.asax这四种文件格式也会被当着asp脚本来解析

 

1.2Apache解析漏洞

Apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断

比如nfck.php.owf.rar  ".owf"和“.rar”这两种后缀是Apache不可识别解析,Apache就会把该文件解析成PHP

如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个nfck.php.rara.jpg.png...

把知道的后缀都写一遍,去测试是否为合法后缀

任意不识别的后缀,自动向上识别

比如禁止上传的文件格式为PHP\ASP\ASPX\ASA等

那么把上传的文件这样写,X.PHP.NFCK

让后面的后缀名识别不了,就上传了一个X.PHP的文件

也可以直接将文件改成X.PHP.  后面加个点,或加个下划线_

 

1.3、IIS7.0/7.5/Nginx<8.03岖形解析漏洞

Nginx解析漏洞这个伟大的漏洞是我国安全组织80sec发现的…在默认Fast-CGI开启状况下,黑阔上传一个名字为cracer.jpg,

内容为

\\');?>

的文件,

然后访问cracer.jpg/.php,在这个目录下就会生成一句话木马 shell.php

注:不仅仅是iis7.0/7.5,只要Fast-CGI开启状况下都可以利用该漏洞

 

1.4htaccess文件解析

一般为留后门使用,如果在Apache中.htaccess可被执行.且可被上传.那可以尝试在.htaccess中写入:

<FilesMatch "shell.jpg"> SetHandler application/x-httpd-php

然后再上传shell.jpg的木马, 这样shell.jpg就可解析为php文件

 

1.5ntfs流漏洞

在windows系统的网站下,上传一个名称为:

a.asp.

a.asp_

a.asp. .

等网站无法识别的后缀,网站就把他当做成一个asp文件来进行执行,但是只能在启用黑名单的情况下使用

 

 

二、上传本地验证绕过

2.1、上传检测流程概述

1.png

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

 

2.2、服务器命名规则

第一种类型:上传文件名和服务器命名一致

第二种类型:上传文件名和服务器命名不一致(随机,时间日期命名等)

 

 

2.3、常见的上传检测方式

1.客户端 javascript 检测 (通常为检测文件扩展名)

2.服务端 MIME 类型检测 (检测 Content-Type 内容)

3.服务端目录路径检测 (检测跟 path 参数相关的内容)

4.服务端文件扩展名检测 (检测跟文件 extension 相关的内容)

5.服务端文件内容检测 (检测内容是否合法或含有恶意代码)

 

2.4、JS本地验证绕过

网站会采用白名单或者黑名单的形式限制文件上传的格式,当我们上传一个恶意文件文件时,会弹出窗口阻止,我们用burpsuite抓包,如果没有数据包,则代表网站用的上传验证是本地JS验证,在审查元素中仔细查看是可以发现允许上传文件或禁止上传文件的格式名称,我们添加或者删除就可以了。

把本地检测函数给去掉,如:ongubmit="return checkfile()"

 

 

三、上传服务器端验证绕过

3.1、服务端检测绕过(MIME 类型检测)

MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。

web服务器使用MIME来说明发送数据的种类, web客户端使用MIME来说明希望接收到的数据种类。

Tomcat的安装目录\conf\web.xml 中就定义了大量MIME类型 ,你可也去看一下。

绕过方法:

直接使用burp抓包,得到post上传数据后,将 Content-Type: text/plain改成 Content-Type: image/gif

就可以成功绕过。

 

3.2、服务端检测绕过(目录路径检测)

目录路径检测,一般就检测路径是否合法,可以利用目录路径绕过配合iis解析漏洞

4.png

在上传目录/后加上xx.asp/,这样就创建了一个xx.asp的目录,利用目录解析漏洞可以执行脚本。或者修改目录为/xx.asp;.,那么就上传了一个XX.ASP;.XX.JPG的文件  访问也是可以解析的,也可以进行目录截断,在目录后/xx.asp%00,选择%00点击ctrl shift U,然后上传进行截断,就上传了一个xx.asp脚本。

3.png

通过改变文件名称也可以绕过,比如上传一个文件名为xx.asp/xx.jpg文件,他也会创建一个xx.asp目录。

在上传脚本文件的时候,服务器没有对齐进行限制,但是在上传的目录上却没有执行的权限,可以在xx.asp前面加上../xx.asp 这样文件就上传到了他的上一级目录上,如果没有权限那么就一直返回,直到根目录下。

 

3.3、服务端检测绕过(文件扩展名检测)

3.3.1、检测的两种方式

1、黑名单检测

黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多 一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件例如 fckeditor 2.4.3 或之前版本的黑名单

2、白名单检测

白名单相对来说比黑名单安全一些,但也不见得就绝对安全了

 

3.3.2、黑名检测绕过:

1. 文件名大小写绕过

用像 AsP,pHp 之类的文件名绕过黑名单检测

2. 名单列表绕过

用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类

3. 特殊文件名绕过

比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式 在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会 被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性。

4. 0x00 截断绕过

用像 test.asp%00.jpg 的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑漏洞进行攻击,目前我只遇到过 asp 的程序有这种漏洞,ctrl shift U

 

3.3.3绕过白名单

1. 0x00 截断绕过

用像 test.asp%00.jpg 的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑漏洞进行攻击,目前我只遇到过 asp 的程序有这种漏洞,ctrl shift U

2. 解析漏洞或者配合文件包含

 

3.3.4双文件上传

条件:

接受两个文件同时上传

只检测了第一个文件扩展名

动易、南方、良精等CMS存在该漏洞

用burpsuite抓包,然后将请求头部分下面的内容负责,开头为-----,结尾为----------

其他地方不用负责,然后粘贴到第一个文件结尾-------后面,把第二个文件开头------去掉

将第一个文件的name=xxxx修改为name=xxxx1,修改文件名为cer或者asa等即可上传成功

 

4、服务端检测绕过(文件内容检测)

二次渲染:将图片中不需要的内容进行过滤,留下图片最基本的内容,这样就把一句话代码给去掉了

WAF检查文件内容(阿里云、知道创宇、长亭科技等):将一句话中的标签给过滤等

将标签中的php去掉,变为  密码cmd

可以使用菜刀连接或浏览器输入?cmd=phpinfo();

system(\\'dir\\'); 可以爆网站目录

system(\\'type d:\\phpstudy\\www\\dvwa-1.9\\php.ini\\'); 可以查看网站目录文件内容

\需要转译,而转译后是\,所以是\\

 

 

五、上传漏洞修复:

1、设置上传文件大小和格式内容相匹配

2、存储目录执行权限

3、站库分离(存储目录与web分离)

4、文件上传后压缩重生成

 

作者:linuxsec

本文来源:https://www.cnblogs.com/linuxsec/articles/10050270.html


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。