客户端检测与绕过
客户端(Client):或称用户端(前端),与服务器相对应。由于客户端对于文件上传漏洞的防御是通过JS代码实现的,所以客户端检测与绕过也成为JS检测与绕过
检测原理
调用JS的selectFile()函数,先将文件名转换为小写,然后通过substr获取文件名最后一个点号后面的后缀(包括点号)进行判断
对于文件上传,只从Web前端进行检测显然防护不足,那么服务器端检测就特别重要。一般服务检测包括以下几个方面:
后缀名检测与绕过
MIME类型检测与绕过
文件内容检测与绕过
00截断检测与绕过
条件竞争
服务检测与绕过
后缀名检测与绕过
检测原理
通过函数pathinfo()获取文件后缀,之后判断是不是php
绕过方法1:黑名单——名单列表绕过(黑名单之外的后缀名)
有些中间件润许解析其他文件后缀名,如asa、cer之类的火灾httpd.conf配置文件中,配置如下代码,则能解析php、php3、phtml文件。所以上传一个后缀名为php3、phtml的文件即可
绕过方法2:黑名单——Windows特性
一些特殊的文件名命名方式在Windows下是不被允许的,利用Burpsuit抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但是注意Unix / Linux系统没有这个特性,如:
末尾的点( . ) [1.php.]
空格( ) [1.php ]
::$DATA [1.php::$DATA]
绕过方法3:白名单
白名单绕过需要配合文件包含漏洞或者解析漏洞
绕过方法4:.htaccess文件攻击
.htaccess文件是Apache服务器中的分布式配置文件(IIS中不存在该文件),该配置文件会覆盖Apache服务器端全局配置,作用于当前目录及其子目录。
如果一个Web应用允许上传.htaccess文件,那就意味着攻击者可以更改Apache的配置,这是十分危险的。
.htaccess文件攻击方式
将内容符合php语法规则的文件当作php文件解析
匹配文件名中的关键字
比如:当文件名[info.oho.png]中包含关键字[.php],并且.htaccess文件内容如下,info.php.png中的代码会被执行。
绕过方法5:利用Apache解析漏洞
结合Apache文件解析机制,从右向左开始解析文件后缀,若后缀名不可识别,则继续判断直到遇到可解析的后缀为止。
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
文件内容检测与绕过
检测原理:文件幻数检测
.jpg:FF D8 FF E0 00 10 4A 46 49 46
.gif:47 49 46 38 39 61 (GIF89a)
.png:89 50 4E 47
绕过方法
在脚本文件开头补充图片对应的头部值,或在图片后写入脚本代码。
文件相关信息检测与绕过
绕过方法:制作图片马
1.在图片后写入脚本代码
2.copy 1.jpg/b+1.php/a 2.jpg
(参数/b指定以二进制格式复制、合并文件,用于图像类/声音类文件)
(参数/a指定以ASCII格式复制、合并文件,用于txt等文档类文件)
00截断检测与绕过
截断漏洞出现的核心是chr(0),这个字符不为空(Null),也不是空字符(""),更不是空格。当程序在输出含有chr(0)变量时,chr(0)后面的数据会被停止,即误将其当作结束符,后面的数据直接忽略,这就导致该漏洞产生。由于00代表结束符,PHP会把00后面的所有字符删除。
截断条件:PHP版本小于5.3.4、magic quotes gpc为OFF状态
条件竞争检测与绕过
检测原理
一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。这里使用sleep()函数来模拟判断是否含有脚本所需要的时间
绕过方法
利用成功上传到删除文件的时间差,上传一个.php文件,在为删除之前立即访问,则会自动生成一个新php文件,新文件不会被删除
翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 谷歌翻译(国内)译
原文:https://www.cnblogs.com/z6h6a6zuhya/p/12748299.html