概述
文章目录
- 上传流程概述
- 客户端检测绕过检测(js检测)
- 绕过方式
- 1. 利用谷歌游览器设置里禁用js
- 2. 通过brup等代理工具
- 服务端检测绕过(MIME检测)
- 绕过方式
- 通过brup等代理工具
- 服务端检测绕过(扩展名检测)
- 绕过方式
- 文件名大小写绕过
- 名单列表绕过
- 特殊文件名绕过
- %00截断绕过
- .htaccess 文件攻击
- 服务端检测绕过(文件内容检测)
- 文件头检测
- 文件加载检测
- 解析漏洞攻击
- 直接攻击
- 配合攻击
- 常见的解析漏洞
- 1,Apache 解析漏洞
- 2,IIS 解析漏洞
- 3,Nginx <8.03 空字节代码执行漏洞
- 4,PHP CGI 解析漏洞
- 文件上传漏洞的防御方法
上传流程概述
一个文件以http协议上传的时候,将以post请求发送至web服务器。服务器接受并同意后,用户与web服务器建立连接,并且传输数据
而一般文件上传过程中检测部分由
- A 客户端javascript检测 (检测文件扩展名)
- B 服务端MIME类型检测 (检测Content—Type)
- C 服务端目录路径检测(检测和path相关参数)
- D 服务端文件扩展名检测 (检测文件扩展名)
- E 服务端内容检测 (检测是否含有恶意代码)
客户端检测绕过检测(js检测)
这一类型特征就是你会收到一个javascript的弹窗(不允许上传)
绕过方式
1. 利用谷歌游览器设置里禁用js
2. 通过brup等代理工具
即可上传成功
服务端检测绕过(MIME检测)
服务端主要检查文件头部的content-type字段信息
仅仅对文件名后缀进行判断并不能有效阻止恶意文件的上传(比如某服务器只允许上传jpg文件格式),不允许上传后缀为php等文件,但是把后缀为php改为jpg上传到服务器,某些情况下也能执行上传文件,因此对文件格式(content-type)检测十分必要,也就是服务端MIME类型检测。
绕过方式
通过brup等代理工具
通过brup代理工具抓包修改提交http头部的content-type字段信息,或者使用挂马图片(mime限制的文件类型挂马)等
服务端检测绕过(扩展名检测)
采用一个黑名单或者白名单,对上传的文件的扩展名进行检测,符合条件才允许上传
绕过方式
文件名大小写绕过
如果,在代码层没有进行大小写统一,用AsP,pHp类似的文件名绕过黑名单
名单列表绕过
后缀名检测
后缀黑名单检测:找查blacklist(黑名单列表)的漏网之鱼,例如
大小写:如果检测的时候不忽略大小写,那么可以改变后缀名的大小写绕过
扩展名:列表中如果忽略了某些后缀
能被解析的文件扩展名列表:
jsp jspx jspf
asp asa cer aspx
php php php3 php4 pht
exe exee
后缀白名单检测:白名单检测还是会比黑名单强一点,常见的绕过方法有%00截断,还有服务器的解析漏洞
利用黑名单里没有的,并且能够成功执行的命名,进行绕过,例如php3,php4之类的
白名单,截断绕过
特殊文件名绕过
在windows下有些文件名是不被允许的,将http包里将文件名改为test.asp.或test.asp_(此处下划线为空格)这种命名方式在windows系统自动去掉点和空格
%00截断绕过
存在这类漏洞,那么后缀名的检测都可以绕过,此时我们可以如下命名一个上传文件进行绕过,文件名如下:
test.php%00.jpg
.htaccess 文件攻击
在apache里,这个文件作为一个配置文件,可以用来控制所在目录的访问权限以及解析设置。即是,可以通过设置可以将该目录下的所有文件作为php文件来解析,即可绕过
方式
利用某些写文件函数复写.htaccess文件,即可任意定义解析名单
通过一个.htaccess 文件调用 php 的解析器去解析一个文件名中只要包含”haha”这个字符串的
任意文件,所以无论文件名是什么样子,只要包含”haha”这个字符串,都可以被以 php 的方
式来解析,是不是相当邪恶,一个自定义的.htaccess 文件就可以以各种各样的方式去绕过很
多上传验证机制
建立一个.htaccess文件内容如下
<FilesMatch "haha">
SetHandler application/x-httpd-php
</FilesMatch>
服务端检测绕过(文件内容检测)
文件头检测
在木马内容的前面插入对应的文件头内容,例如:GIF89a
,更保险的方法是在可上传的文件中插入木马代码,然后修改后缀
方式
常见图片一句话形式
GIF89a
(...some binary data for image...)
<?php phpinfo(); ?>
(... skipping the rest of binary data ...)
文件加载检测
这个检测应该是最难绕过的,一般是调用API函数去进行文件加载测试,更有甚者二次渲染
方式
对渲染/加载测试攻击 代码注入绕过
对二次渲染攻击 攻击加载器
代码注入,和文件头的处理方式大致相同不过有了一个限定,你不能破坏这张图片,只能把你要的代码添加在空白区。保持文件结构的完整
二次渲染
单独列出来这个方式有点特殊
我们如果还是上传一个过加载检测的图片
然后再从服务器上下载回本地
并且图片里多了CREATOR: gd-jpeg v1.0 (using IJG JPEG v62)
说明使用GD php 的gd库
这里是某后台的调用GD库二次渲染的代码
function image_gd_open($file, $extension)
{
$extension = str_replace('jpg', 'jpeg', $extension);
$open_func = 'imageCreateFrom'. $extension; //函数名变成 imageCreateFrompng 之类
if (!function_exists($open_func))
{
return FALSE;
}
return $open_func($file); //变成 imagecreatefrompng('/tmp/php0lbTOn')
}
将你上传的文件中属于图片部分的数据抓取出来,再使用自己的API或者函数重新将这张图片生成出来保存在服务端
解析漏洞攻击
直接攻击
直接能上传一个php文件绕过客户端js检测或者服务端MIME检测
配合攻击
先将代码以任意文件形式上传到服务器,通过php文件包含
web服务器解析漏洞.htaccess解析等
相互配合达成解析为目标文件类型的攻击
常见的解析漏洞
1,Apache 解析漏洞
解析:test.php.jkl
并没.jkl
后缀的文件,而Apache的某些版本中会直接当成php来解析
描述:若一个文件名abc.x1.x2.x3
,Apache会从x3
开始解析,如果x3
不是一个能解析的扩展名,就往前解析x2
以此往复,直到能遇到一个能解析的文件名为止
对应版本:
WampServer2.0 All Version (WampServer2.0i / Apache 2.2.11) [Success]
WampServer2.1 All Version (WampServer2.1e-x32 / Apache 2.2.17) [Success]
Wamp5 All Version (Wamp5_1.7.4 / Apache 2.2.6) [Success]
AppServ 2.4 All Version (AppServ - 2.4.9 / Apache 2.0.59) [Success]
AppServ 2.5 All Version (AppServ - 2.5.10 / Apache 2.2.8) [Success]
AppServ 2.6 All Version (AppServ - 2.6.0 / Apache 2.2.8) [Success]
2,IIS 解析漏洞
IIS6.0 在解析文件时存在以下两个解析漏洞 .
①当建立 .asa 、.asp 格式的文件夹时 , 其目录下的任意文件豆浆被 IIS 当作 asp 文件 来解析 .
② 在 IIS6.0 下 , 分 号 后面 的 扩 展 名 不 会 被 解 析 , 也 就 是 说 当 文 件 为 *.asp;.jpg
时,IIS6.0 同样会以 ASP脚本来执行 .
3,Nginx <8.03 空字节代码执行漏洞
影响版本 :0.5,0.6,0.7<=0.7.65 0.8<=0.8.37
Nginx 在图片中嵌入 PHP代码 , 然后通过访问 xxx.jpg%00.php
可以执行其中的代码 .
注意
任意文件名/任意文件名.php这个漏洞是因为php-cgi
4,PHP CGI 解析漏洞
在 PHP的配置文件中有一个关键的选项 : cgi.fi: x_pathinfo.
这个选项在某些版本是
默认开启的 , 在开启时访问 url, 比如 :http://www.xxx.com/x.txt/x.php,x.php 是不存在的 文件 , 所以 php 将会向前递归解析 , 于是就造成了解析漏洞 . 由于这种漏洞常见于 IIS7.0 、 IIS7.5 、 Nginx
等 Web服务器 , 所以经常会被误认为是这些 Web服务器的解析漏洞 .
文件上传漏洞的防御方法
-
检查文件上传路径 ( 避免 0x00 截断、 IIS6.0 文件夹解析漏洞、目录遍历 )
-
文件扩展名检测 ( 避免服务器以非图片的文件格式解析文件 ),验证文件扩展名 通常有两种方式 : 黑名单和白名单 .
-
文件 MIME验证 ( 比如 GIF 图片 MIME为 image/gif,CSS 文件的 MIME为 text/css 等 ) 3. 文件内容检测 ( 避免图片中插入 webshell)
-
图片二次渲染 ( 最变态的上传漏洞防御方式 , 基本上完全避免了文件上传漏洞 )
-
文件重命名 ( 如随机字符串或时间戳等方式 , 防止攻击者得到 webshell 的路径 )
-
隐藏上传路径
最后
以上就是尊敬大山为你收集整理的文件上传漏洞绕过方法和防御方法上传流程概述客户端检测绕过检测(js检测)服务端检测绕过(MIME检测)服务端检测绕过(扩展名检测)服务端检测绕过(文件内容检测)解析漏洞攻击文件上传漏洞的防御方法的全部内容,希望文章能够帮你解决文件上传漏洞绕过方法和防御方法上传流程概述客户端检测绕过检测(js检测)服务端检测绕过(MIME检测)服务端检测绕过(扩展名检测)服务端检测绕过(文件内容检测)解析漏洞攻击文件上传漏洞的防御方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复