文件上传的危害是上传木马文件可以获得服务器权限
绕过方式:
1.如果服务器是前端js检验文件后缀名
可以直接在前端删掉js代码
或者抓包修改文件后缀名绕过
2.如果服务器是通过后端代码MIME判断
抓包修改content-type 请求头
3.基于文件后缀名黑名单 白名单原则
如果是黑名单原则 上传除黑名单以外的文件类型
那么就尝试不同的文件后缀名比如php网站 可以尝试 php1 php2 php大小写
4.基于操作系统的绕过
windows
windows不区分大小写 大小写混杂绕过
文件名双写绕过 (有的过滤机制是利用正则表达式去掉后缀)
加文件末尾.绕过 传到windows会去掉.后面的东西
文件末尾加空格绕过 windows会去掉空格
末尾添加 ::$DATA 绕过
%00截断PHP 版本<5.3.4 php的magic_quotes_gpc为OFF状态
条件竞争绕过
(服务器端在处理不同的请求时是并发进行的,因此如果并发处理不当或相关操作顺序设计的不合理时,可能导致漏洞。
服务器如果认为这个文件符合要求就会留下了重新命名 如果不符合就删掉 如果一边上传一边访问该文件
<?php
$f=fopen("shell.php","w");
fputs($f,'<?php phpinfo(); ?>');
?>
图片木马配合文件解析漏洞
.access 文件
linux
https://www.bilibili.com/read/cv6978946/
https://www.jianshu.com/p/8babf113d59e
web中间件解析漏洞:
1、Apache
从后往前解析文件名,直至遇到一个Apache认识的文件类型。
比如.rar是合理的文件上传,上传xxx.php.rar.rar.rar,由于Apache不认识.rar这个文件类型,因此会一直遍历后缀到.php,然后认为是一个php文件,从而导致脚本攻击。
IIS
(1)存在“;”截断,也就是说文件名为abc.asp;xx.jpg,会被解析为abc.asp
(2)处理文件夹扩展名出错,导致/*.asp/目录下的所有文件都作为asp进行解析
(3)支持PUT功能(WebDav中定义的一个方法),允许用户上传文件到指定路径。
首先使用PUT上传一个指定的文本文件,最后通过MOVE改写为脚本文件
3、Nginx
Nginx配置fastcgi使用PHP时,或存在文件类型解析问题
访问http://www.xxx.com/path/test.jpg/noexist.php时,test.jpg会被当做php解析。noexist.php是不存在的文件。
编辑器解析漏洞
实战困惑:文件上传单独利用就是要上传对应的可以执行的文件比如php服务器.php文件。文件上传配合文件包含利用就是当不能上传.php文件时,可以上传图片木马(因为文件包含漏洞 会把所有文件内容先按php文件解析)
文件上传本质:就是上传一个可以被web服务器执行解析的文件 同时可以访问到