本质:用户可通过伪造后缀、文件类型等方式上传恶意代码 / 文件,一般来说通过上传 webshell ;
<?php assert($_POST['a']);?>
一般出现在,头像上传、用户个人信息、文件处理(交接、存储、管理)、注册、申请;
$_FILE 预定义变量
黑白名单
黑名单:不允许上传文件类型
白名单:仅允许上传的文件类型
绕过
1 、 js 绕过
①修改 js 文件
直接删除 js 触发条件即可
![](https://img-blog.csdnimg.cn/direct/f660a80d6ed84c519eafcdd8362a8f97.png)
②抓包重放
提交正常数据,再重放数据包
![](https://img-blog.csdnimg.cn/direct/ffbbd35695394559a894d4b8403d4a32.png)
③禁用 js
使用插件禁用 js ,或使用浏览器配置禁用
![](https://img-blog.csdnimg.cn/direct/048bb7c4687d4f81b2be98cea8d519d4.png)
如何区分前后端校验:
正常上传数据包,有校验提示,但无数据包的传递,此时可判断为 js 校验(部分服务器前后都校验)
2 、 mime type 限制,文件类型限制,直接修改类型即可
图片相关 mime 类型:
image/gif 、 image/png 、 image/jpeg
![](https://img-blog.csdnimg.cn/direct/712d3be1b60a43d2afb223866c11cf83.png)
3 、黑名单限制
①尝试生僻后缀: .phtml 、 .php1-8 、 html (仅受中间件配置限制,需要在中间件内添加对应配置才能生效,否则无法解析生僻后缀)
②尝试大小写后缀
③ windows 特性
I 、对大小写不敏感
II 、在生成文件的时候自动会去除空格、
III 、在生成文件的时候自动处理文件名后缀的 .( 点 ) ,及点空点组合
IV 、 windows 处理文件的时候 ”::$DATA“ 会把其之后的数据当作文件流处理,不会检测后缀名,同时保持其之前的文件名
IIV 、利用 php+windows 先上传数据包
![](https://img-blog.csdnimg.cn/direct/910460e4423442e48712cc6d0189481c.png)
此时会生成一个空文件
再次上传第二条数据包修改原有文件
![](https://img-blog.csdnimg.cn/direct/b9d951eba4384094bae6b1a88e37344f.png)
此时会重新将文件内容添加进去,此方法适用于上传时源文件名不被修改的情况
④过滤后缀
尝试使用双写或者
4 、白名单限制
① 00 截断
当操作系统识别字符串读到 \0 字符时,意味者停止,结束,通过这个特性可达到 00 截断的目的,或某些
waf 的绕过
条件:
php 版本:小于 5.3.29
magic_quote_gpc:off
get 请求中在 url 地址栏里增加 %00
![](https://img-blog.csdnimg.cn/direct/ef92d36e303643c690b4dde7ac578cdb.png)
post 请求下
需修改 hex 编码为 00
![](https://img-blog.csdnimg.cn/direct/f32121a7014a4f72892e0ff122dbb1b7.png)
注: 00 截断可应用于代码处理功能逻辑中;