一、触发条件
- 用户能够从Web网页访问到被上传的文件(直接或间接)
- 上传的文件被Web容器解释执行
- 用户上传的文件通常不能被网站程序压缩、修改内容
二、直接上传一句话
一句话木马是最基础的文件上传攻击
三、常见的文件上传防御
1.客户端JavaScript校验(前端校验)
·抓包改包轻松绕过
2.检查MIME类型
·同样抓包改包
3.随机文件名,随机文件地址
根据业务需求的限制
4.检查文件扩展名
后端使用到黑名单过滤:
<?php
$name = $_FILES['myfile']['name'];
$ext_name = substr($name,-4);
if($ext_name == ".php")
die("NONONO");
上面的代码先是获取上传文件的名字,判断名字的后四位是否是.php,如果是则不允许上传
·绕过: 因为黑名单往往很难列举全情况
php3、php5、phtml、PHP、pHp、phtm 这些都是php的等价代换,使用替换后缀绕过黑名单
后端使用到白名单过滤:
绕过办法:
1.文件包含漏洞:
2.截断绕过:test.php%00.jpg
3.apache解析漏洞:
- apache解析文件的规则是从右到左开始判断解析
- 如果后缀名为不可识别文件解析,就再往左判断
- 例如,test.php.owf.rar,如果白名单只允许上传rar文件,那么这个就可以利用apache解析漏洞上传php文件
4.nginx解析漏洞:
- 当cgi.fix_pathinfo开启时
- 当访问www.xx.com/phpinfo.jpg/1.php时,且1.php不存在时,会将phpinfo.jpg当作.php进行解析
四、例题
1.只在前端使用js对上传文件类型进行控制
上传图片格式的木马
抓包将文件格式改回.php
.php文件成功上传到服务器
使用蚁剑 实现webshell
2.使用MIME type上传文件过滤
同样是抓包,之后更改文件后缀和Content-type为image/jpeg
3.使用黑名单,不允许上传.asp,.aspx,.php,.jsp后缀文件!
在抓包后改成.php5的后缀就能实现后面的绕过