文件上传漏洞

漏洞原理

上传文件时,如果未对上传的文件进行严格的验证和过滤,就容易造成文件上传漏洞,上传脚本文件(包括asp、aspx、jsp、php等)
造成文件上传漏洞的成因(比较复杂)有:

  • Web应用开放了文件上传功能,并且对上传的文件没有进行足够的限制
  • 程序开发部署的时候,没有考虑到系统特性和过滤不严格
  • 通过其他漏洞绕过限制

前端验证

客户端检测的绕过方法有三种:

1、删除浏览器事件(关闭js)
2、通过抓包修改后缀名
3、伪造上传表单

后端验证

文件上传从客户端进行检测显然是防护不足的,所以需要从服务器端进行防护。
服务端的检测与绕过方法有很多,常见的有:

1. 后缀名检测绕过
2. MIME类型检测与绕过
3. 文件内容检测与绕过
4. 00截断绕过
5. 条件竞争检测与绕过

后缀名检测的绕过方法也有很多,常见的有:

1. 黑名单--大小写绕过
2. 黑名单--名单列表绕过
3. 黑名单--Windows特性(末尾的点【.】)绕过
4. 黑名单--Windows特性(空格【 】)绕过
5. 黑名单--Windows特性(::$DATA)绕过
6. 白名单(需要结合文件包含漏洞或者Web服务器解析漏洞)
7. .htaccess文件攻击--匹配文件内容
8. .htaccess文件攻击--配皮文件名中的关键字
9. .htaccess文件攻击--匹配文件名
10. Apache解析漏洞

后缀名检测

大小写绕过

名单列表绕过

Windows特性(末尾的点【.】)绕过

Windows特性(空格【 】)绕过

Windows特性(::$DATA)绕过

.htaccess文件攻击

 .user.ini文件


注意:apache中间件是无法正确执行的,改为nginx

建立一个 .user.ini文件,写入

auto_prepend_file=phpinfo.png

然后上传

之后再上传一个图片木马

执行readme.php即可执行出图片木马中的代码

注意:apache中间件是无法正确执行的。我们在phpstudy改为nginx

建立一个 .user.ini文件,写入

auto_prepend_file=phpinfo.png

然后上传

之后再上传一个图片木马

执行readme.php即可执行出图片木马中的代码

.htaccess文件是Apache服务器中的分布式配置文件(IIS中不存在该文件),该配置文件会覆盖Apache服务器的全局配置,作用于当前目录及其子目录。在httpd.conf配置文件中,AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件;如果设置为All,那么将启用.htaccess文件,所有在.htaccess文件里的指令都将被重写,即允许.htaccess文件覆盖掉Apache的配置。


如果一个Web应用允许上传.htaccess文件,且.htaccess文件启用,那就意味着攻击者可以更改Apache的配置,这是十分危险。
.htaccess文件攻击有三种方式:

  • 当.htaccess文件内容如下,会将内容符合php语法规则的文件当作php文件解析

  • 匹配文件名中的关键字(比如:当文件名[info.php.png] 中包含关键字[.php],并且.htaccess文件内容如下,info.php.png中的代码会被执行)

  • 匹配文件名,当.htaccess文件内容如下,可以将匹配到的文件名的文件中的代码执行

MIME类型检测

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。常见的MIME类型如下:

文件扩展名Mime-Type
.jsapplication/x-javascript
.htmltext/html
.jpgimage/jpeg
.pngimage/png
.pdfapplication/pdf

在HTTP协议中,使用Content-Type字段表示文件的MIME类型。

文件内容检测

文件幻数

文件内容的检测是利用getimagesize()函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。
文件内容检测的绕过常见的有两种方式:

  • 在脚本文件前面补充对应的文件头
    常见的图片文件头
JPG:FF D8 FF E0 00 10 4A 46 49 46
GIF:47 49 46 38 39 61(GIF89a)
PNG:89 50 4E 47
  • 制作图片马
    制作图片马的方式也有很多,常见的有:
在图片后写入脚本代码
在cmd中使用命令 copy 1.jpg/b+1.php/a 2.jpg
- 参数/b指定以二进制格式复制、合并文件,用于图像类/声音类文件
- 参数/a指定以ASCII格式复制、合并文件,用于txt等文档类文件

图片马

基于GET方式的00截断绕过

截断漏洞出现的核心就是chr(0),这个字符不为空 (Null),也不是空字符 (" "),更不是空格。当程序在输出含有 chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致了漏洞产生。
由于0x00是字符串的结束标识符,PHP会把0x00后面的所有字符删除。攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。
利用00截断绕过需要同时满足两个条件:

1. PHP版本必须小于5.3.4
2. php.ini配置文件中的magic_quotes_gpc为Off状态(GPC关闭)

基于POST方式的00截断绕过

post不会像get对%00进行自动解码。因此要先对%00进行url-decode()解码

条件竞争

条件竞争是一种服务器端的漏洞,由于服务器端在处理不同的请求时是并发进行的,因此如果并发处理不当或相关操作顺序设计的不合理时,将会导致此类问题的发生。
一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。如果在删除之前访问上传的php文件,从而执行上传文件中的php代码。在这整个过程中,会出现以下三种情况:

1. 访问时间点在上传成功之前,没有此文件
2. 访问时间点在刚上传成功但还没有进行见判断检查,该文件存在
3. 访问时间点在判断之后,文件被删除,没有此文件

IIS解析漏洞

IIS6.0文件解析漏洞

1. IIS除了可以解析.asp后缀的脚本以外,还可以解析.cer和.asa后缀的文件
2. 特殊符号“/”,任意文件夹名.asp目录下的任何文件都会被IIS当作asp脚本执行
3. 特殊符号“;”,任意文件名.asp;.jpg,后缀是.jpg,可以绕过限制,但是IIS6.0的特殊符号“;”会将该文件当作asp脚本执行

IIS7.5文件解析漏洞

任意文件名/任意文件名.php,解析为php脚本文件。

Apache解析漏洞

Apache httpd 多后缀解析漏洞

主要是因为Apache默认一个文件可以有多个用.分割得后缀,当最右边的后缀无法识别(mime.types文件中的为合法后缀)则继续向左看,直到碰到合法后缀才进行解析(以最后一个合法后缀为准)

Apache换行解析漏洞(CVE-2017-15715)


影响范围:2.4.0-2.4.29版本
原因:合法后缀配置文件中的正则表达式中$不仅匹配字符串结尾位置,还可以匹配\n或\r,在解析php时,1.php\x0A将按照.php进行解析,而’.php\x0A’ != ‘.php’,可能过滤时过滤了.php但没有过滤.php\x0A从而实现绕过。

Nginx解析漏洞

任意文件名/任意文件名.php,解析为php脚本文件。

后期会继续补充......

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值