文件上传造成因素:
文件路径过滤不严格,可能通过遍历目录来获得文件,也可能通过文件上传对重要文件案进行覆盖,还可能对文件拓展名和文件类型过滤不严格,可以上传任意文件到web公开目录上,进而远程控制服务器
绕过
这篇文章判断漏洞类型的图片很言简意赅一文解读文件上传漏洞 - 2xixi3 - 博客园
前端-js绕过
原理:
我理解的前端一般就是过滤文件拓展名,如果不符合过滤条件就会拦截在前端(上传后F12网络就看不到数据流),所以目的是先过去再解析
这是上传png之类的有文件流
这是其他类型文件根本上传不到后端
参考【文件上传绕过】——前端检测_前端js验证漏洞_实验四:文件上传漏洞【实验名称】文件上传漏洞【实验目的】绕过javascript验证检-CSDN博客
方法:
(1)直接网页禁用js
(2)bp抓包放包,把jpg图片码上传抓包改为.php
常见的也就这两种方法
后端
检查后缀
黑名单
可能会限制.php/.asp,随便上传文后缀件名例如.stp,可以就是黑名单
(1)上传可解析特殊后缀
(2)上传.htaccess文件,其实就是改变目录配置,在目标目录上上传一个命令文件作用于该目录及其所有子目录,【前提看web站点架构为:php+apache , 保证文件上传到本地 , apache开对.htaccess支持;(bp抓包看请求头来判断)】
<FilesMatch "evil.gif">
SetHandler application/x-httpd-php #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
AddHandler php5-script .gif #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
</FilesMatch>
(3) 后缀大小写绕过
(4)点绕过:随便输后缀名不行就是白名单1.php.(Windows 系统下,文件后缀名最后一个点会被自动去除,Linux 系统下不会)
(5)空格绕过(Windows系统下,对于文件名中空格【demo.php(空格)
】会被作为空处理,程序中的检测代码却不能自动删除空格,从而绕过黑名单。)
(6)::$DATA: a.php::$DATA(在windows下,无法直接测试::$DATA,因为windows不允许后缀名中存在特殊字符;因为windows会将 a.php::$DATA认为NTFS文件的一个数据流而不是文件,因此会被当成非法文件名)
(7)配合解析漏洞
Apache:
一般解析:后缀名无法识别就像上解析(从右到左)eg:a.php.a.s会解析成a.php
换行解析:在2.4.0~2.4.29版本里有一个解析漏洞,如果在文件名后面加一个换行符x0A服务器依旧会把文件当成php解析,但是可以绕过黑名单(注意:不能是\x0D\x0A,只能是一个\x0A)
IIS:
上传文件抓包在server Microsoft里的版本是IIS/6.0,三个方法,一个创建.asp目录,在目录上上传1.php木马文件,会当作asp解析;一个图片第三个,直接改名;另一个是.asp;.jpg会被当作.asp解析(省略分号后面的部分) 至于怎末创建.asp目录,bp抓包上传请求
POST /upload.php HTTP/1.1...Content-Disposition: form-data; name="file"; filename="shell.jpg"Content-Disposition: form-data; name="path"; filename="image.asp" // 尝试创建目录
至于怎末上传文件到指定目录
Content-Disposition: form-data; name="path"; filename="image.asp" // 指定目录
也可以用穿越目录(没过滤../的情况下)
Content-Disposition: form-data; name="file"; filename="../image.asp/shell.jpg"
IIS/7.0
制作图片码,打开图片,访问图片路径并且在后加上 /.php
Nginx:
解析漏洞:Server是nginx/1.17.8上传 图片码,在访问路径下加上.php
换行解析:nginx因为00截断错误地解析了请求的 URI ,将获取到用户请求的文件名解析为对应的脚本程序,导致出现权限绕过、代码执行等连带影响(版本Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7)上传图片码抓包,服务器通常有以下配置
location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;include fastcgi_params;
}
参考资料:“文件上传”配合中间件“解析漏洞”_中间件解析漏洞配合文件上传-CSDN博客
白名单
反之白名单
(1)MIME绕过(HTTP请求头中的Content-Type属性绕过,eg:Content-Type: text/html
)
(1)(2)(3)补充知识看:文件上传漏洞总结(含原因+防御措施)+白名单+黑名单+内容、头+解析漏洞/修补方案_00截断修复方案-CSDN博客
(2)%00截断:%00被服务器解码为0x00发挥了截断作用
(3)0x00截断:利用ASCII码为0这个特殊字符,让系统认为字符串已经结束