一、文件上传漏洞描述
1.1 漏洞原理
- 网站的上传功能没有进行严格的限制,存在任意文件上传漏洞,容易被上传恶意脚本
1.2 漏洞危害
-
攻击者可通过此漏洞上传恶意脚本文件,对服务器的正常运行造成安全威胁影响等
-
攻击者可上传可执行的Webshell(php,jsp,asp,aspx等类型脚本木马),获取利用目录跳转上传html,gif,config覆盖系统原有的文件,达到获取系统权限的目的。
1.3 修复建议
- 1.对上传文件格式进行严格校验及安全扫描,防止上传恶意脚本文件
2.设置权限限制,禁止上传目录的执行权限
3.严格限制可上传的文件类型
4.严格限制可上传的文件路径
5.文件扩展名服务端白名单校验
6.文件内容服务端校验
7.上传文件重命名
8.隐藏上传文件路径
9.MIME类型检测以及限制上传文件的大小,或是将上传的文件放在安全的路径下,尽量放于web server之外的远程服务器等。
二、文件上传各种姿势
2.1 前端绕过
- 删除浏览器中的JS代码 利用插件禁用JS脚本 使用恶意文件名后缀符合白名单策略,用burp修改后缀
2.2 服务器端检测–MIME 类型(文件类型)
-
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME
消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。常见的MIME 类型如下:**文件扩展名 Mime-Type** .js application/x-javascript .html text/html .jpg image/jpeg .png image/png .pdf application/pdf
-
由于服务器在检测Content-Type 类型的时候,取得的变量来自于用户,所以可以用Burp
抓包,修改这个字段,使其合法,即可绕过限制上传任意文件。
2.3 服务器端检测–文件内容
-
除了检测上传文件的Content-Type 类型,为了保持安全性,服务器端还会检测文件内容。PHP
中有一个函数getimagesize(),这个函数本意是检查图片的大小,但是在检查之前,该函数会判断目标文件是否是一张图片。因此,可以用该函数来检测文件的内容。 -
对于文件内容检测,我们可以通过制作,上传图片木马绕过。
2.4 图片马制作
- 1)copy 命令 copy 2.jpg/b+1.php shell.jpg
- 2)16进制编辑器 C32等
需要文件头(文件幻数)GIF89a等
JPEG(jpg) FFD8FF
PNG(png) 89504E47
GIF(gif) 47494638
2.5 服务器端检测–后缀名
- 服务器端还会检测⽂文件后缀名。服务器端在检测文件名的时候,依然会采用黑白名单策略。黑名单策略,不允许上传php、asp、aspx、jsp…等可执行脚本的文件;白名单策略,只允许上传jpg、gif、png、doc、rar…等格式的文件。
黑名单
- 代码中$deny_ext
数据就是一个黑名单,数组元素就是不允许上传的类型。对于黑名单,我们可以寻找其他可允许上传的类型来绕过限制。可以执行脚本后缀名 .php
.php2 .php3 .php5 .phtml .asp .aspx .ascx .ashx .asa .cer .jsp .jspx
白名单
- 对于后缀名白名单策略,我们只能上传在白名单内的文件后缀名。
2.6 00截断
00 就是Null(空)字符,URL 中表现为%00,00 截断会导致文件上传路径截断。我们以upload-labs第十一关为例子说明这个问题
2.7 .htaccess 攻击
.
-
htaccess 是Apache 服务器的分布式配置文件,该配置文件会覆盖Apache 服务器的全局配置,作用域是当前目录及其子目录。如果一个Web 应用允许上传.htaccess 文件,那就意味着攻击者可以更改Apache的配置,这是十分危险。
-
.htaccess 攻击想象空间非常大。首先看Apache 的配置,允许.htaccess 文件覆盖掉Apache 的配置
-
配置如下
将以下代码写入文件,并保存成.htaccess 名字,上传到服务器。
AllowOverride All
*将.png 文件当作PHP 文件解析
AddType application/x-httpd-php .png
*文件名中包含php 关键字
当文件名[info.php.png] 中包含关键字[.php],并且.htaccess 文件内容如下,info.php.png 中的代码会被执行
AddHandler php5-script php
*匹配文件名
以下配置是匹配文件名[MoCo],找打该文件,并执行其中的PHP 代码
<FilesMatch “MoCo”>
SetHandler application/x-httpd-php
2.8 Web容器解析漏洞
。。。
**
2.9windows文件规则
不符合windows文件规则有哪些:
shell.php. ----------文件名后加点‘.’
shell.php(空格) ----------文件名后加括号空格
shell.php:1.jpg ----------文件名后加冒号’:’
shell.php:: D A T A − − − − − − − − − − 文 件 名 后 加 N T F S A D S 特 性 : : DATA ----------文件名后加NTFS ADS特性:: DATA−−−−−−−−−−文件名后加NTFSADS特性::DATA
shell.php:: D A T A . . . . . . − − − − − − − − − − 文 件 名 后 : : DATA...... ----------文件名后:: DATA......−−−−−−−−−−文件名后::DATA…
会被windows系统自动去掉不符合规则符号后面的内容。
- 未完待续