1、文件上传之黑白名单
(1)基于文件后缀名验证介绍
对于文件上传模块来说,尽量避免上传可执行的脚本文件。为了防止上传脚本需要
设置对应的验证方式。
基于文件后缀名验证方式分类:
1、基于白名单验证:只针对白名单中有的后缀名,文件才能上传成功。
2、基于黑名单验证:只针对黑名单中没有的后缀名,文件才能上传成功。
2、黑名单之扩展名
.php
由于历史原因,部分解释器可能支持符合正则/ph(p[2-7]?|t(ml)?)/的后缀,如php/php5/pht
/phtml/shtml/pwml/phtm等,可在禁止上传php文件时测试该类型。
.jsp
引擎则可能会解析jspx/jspf/jspa/jsw/jsv/jtml等后缀,asp支持asa/asax/cer/cdx/aspx/ascx/
ashx/asmx/asp{80~90}等后缀。
其他
同样可能带来问题,如vbs/asis/sh/reg/cgi/exe/dll/com/bat/pl/cfc/cfm/ini等
3、黑名单之大小写绕过
windows系统下:
对于文件名中的大小写不敏感,例如:test.php和TeSt.pHp是一样的。
linux系统下:对于文件名中的大小写敏感。例如test.php和TesT.Php就是不一样的。
此时可以通过修改文件后缀,使用大小写混合的写法绕过缺少了对上传文件名获取的大小写
转换的黑名单验证(仅限windows)。
4、白名单之00截断
00截断的前提是路径可控
GET传参时:使用%00截断路径
POST传参时:使用00截断路径
注意:PHP版本<5.3.4才可以进行00截断
magic_quotes_gpc=Off(详情看此链接)
6、白名单之内容绕过
7、竞争条件攻击
有的服务器采用了先保存,在删除的不合法文件的方式,在这种服务器中,可以反复上传一个
会生成web shell的文件并尝试访问,多次之后即可获得shell
8、解析漏洞