- 用户上传一个可执行的脚本文件,获得了执行服务器端命令的能力
- getshell最为常见、直接的方式
- “文件上传”本事是一个正常的业务需求,问题在于如何安全的上传
一句话木马是最基础的文件上传攻击
- 很多上传点依赖于对访问上传页面的访问权限控制
- 一旦上传页面暴露,直接就可以getshell
- 在浏览加载文件,但还未点击上传按钮时便弹出对话框
- 内容如:只允许上传.jpg/.jpeg/.png后缀名的文件
- 而此时并没有发送数据包
·抓包改包轻松绕过
浏览器在检查判断上传的文件类型后,在向服务器发送请求的包中添加MIME YTPE
服务器在接受文件时,看到的是想要的MIME类型,就会接受文件,否则不会
·同样抓包改包
根据业务需求的限制
- 最直接有效的方法
- web服务器根据文件扩展名来选择不同的方式解析
- 可能使用白名单和黑名单
后端使用到黑名单过滤:
- $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解析漏洞:
4.nginx解析漏洞:
上传图片格式的木马
抓包将文件格式改回.php
.php文件成功上传到服务器
使用蚁剑 实现webshell
同样是抓包,之后更改文件后缀和Content-type为image/jpeg
在抓包后改成.php5的后缀就能实现后面的绕过