上传文件
1. 客户端校验(本地)——JavaScript校验
-
原理:本地JavaScript进行校验
-
绕过方法:
- 1.抓包解包
- 2.禁用JavaScript
2.服务器端校验——content-type校验
- 原理:MIME类型检测
- 绕过方法:
- 1.修改数据包
gif——image/gif
png——image/png
jpg——image/jpeg
js ——text/javascript
htm——text/html
html——text/html
- 2.改文件名后上传抓包后再改回文件名
- 3.上传正常文件修改文件内容
- 目的:构造包使content-type 正确
- 1.修改数据包
3.服务端校验——后缀名黑名单校验
- 原理:开发人员禁止了某些后缀名
- 绕过:
- 1.大小写绕过,例如:Php、PhP
- 2.利用黑名单没有的,但是能被中间件解析的后缀名,例如:PHP、php3、php4、php5、pht、php7、phtml、phps
Apache的配置文件正则规则 .+\.ph(p[3457]?|t|tml)$
- 3.上传Apache的.htaccess 文件 ,与php文件在同一目录
<FilesMatch "php7.jpg">sethandler application/x-httpd-php</FilesMatch>
- 4.使用00截断:使用bp的hex修改0x00
- 基于一个组合逻辑漏洞造成的,通常存在于构造上传文件路径的时候
- 5.超长文件名截断上传Windows: 258 byte Linux: 4096 byte
4.服务端校验——后缀名白名单校验
- 原理:猜测是因为Apache服务器识别文件名时是从后向前推
5.服务端校验——内容头校验
- 原理:文件头
getimagesize()
- 绕过:gif89a<?php phpinfo();?>
6.竞争上传
- 情景:文件上传后,检测是否合法,不合法就删除,所以意味着文件在服务器上存在过,只是存在时间短,理论上是能访问的。
- 绕过:使用爆破,一直发,访问速度大于他的删除速度。生成小文件。。。
- 趁代码不注意,赶紧访问!!!
来源:CSDN
作者:aloogu.kylin
链接:https://blog.csdn.net/qq_34332964/article/details/104769939