文件上传漏洞——服务端校验
白名单校验
白名单的概念与“黑名单”相对应。
白名单是设置能通过的用户,白名单以外的用户都不能通过。
黑名单是设置不能通过的用户,黑名单以外的用户都能通过。
所以一般情况下白名单比黑名单限制的用户要更多一些。
所以,一般白名单是比较难以绕过的,但是配合其他漏洞就可以做到绕过白名单。
例如:配合apache的解析缺陷
原理:apache对文件的解析是从最后一个后缀开始解析,按最后一个合法后缀名来对文件进行解析。
这里我们可以打开我们的apache配置文件查看能解析的文件后缀
(文件很长就截取一部分了)
哪些后缀Apache认识,哪些不认识?
有一个名为mime.types的文件,其中记录着Apache认识的后缀。
在Ubuntu下,该文件位于etc/mime.types,在Windows下,该文件位于C:/apache/conf/mime.types(类似这样的,注意Apache的安装路径)。
该文件是一个一对多的映射表,定义了某一种文件类型,对应的几种后缀。除了该文件,在Apache的配置文件中,还可以用AddCharset语句添加映射
例如:当你上传一个文件为1.php.jpg文件时,apache默认从后往前读取后缀名,如果apache无法识别.jpg文件后缀,那么会将该文件当作php文件解析。
内容头校验
getmagesize()函数可以通过识别文件头来识别文件的格式
每个格式的文件例如jpg,png,都有对应的文件格式,如果可以通过文件内容头来进行文件格式的判断,那么我们是否可以进行文件头的伪造呢?
绕过方法:
在php内容前加入其他格式的文件头进行绕过
例如:GIF89a<?php phpinfo();?>
那么GIF89a是什么呢,我们转码为16进制看看:
可以看到,我们在php内容的前面加入了gif的文件头识别,可以让文件被当作gif文件识别,达到了绕过的目的。
竞争上传
一般是属于逻辑漏洞
原理:
而当服务器进行判断的时候会有时间间隔,就可以进行利用.
方法:
1.手点,要求手速够快;
2.爆破;