文件上传
0X00 概述
文件上传漏洞是用户上传了一个可执行的脚本文件,并通过该脚本文件获得服务端可执行命令的能力。该文件上传功能本身没有问题,有问题的是上传成功后,服务端如何处理、如何执行解析该脚本文件。如果服务端的处理逻辑不够安全,就会导致上传的文件被web容器解析执行,从而造成严重的后果。
文件上传可以上传图片,上传相册、上传附件、添加新闻图片、添加背景图片等等
文件漏洞分类:
代码层:开发者对安全意识的不足,或者是在对文件上传的校验不严谨造成的
应用层:Web容器漏洞、配置不当等等
0X01 常见的文件上传绕过漏洞
1.前端绕过
客户端JS验证:上传文件时提示只允许上传.jpg/.png/.jpeg后缀名的文件。
绕过方法:1.通过修改脚本文件,添加上传文件的文本类型后缀名
2.删除JS验证脚本的调用,让其不能对上传文件进行校验
3.修改上传文件的类型后缀名进行绕过,例如:webshell.php改为webshell.jpg,当点击上传时,burp抓包进行修改,以便服务器能够正常解析
2.服务端绕过
服务端的MIME验证:MIME是描述消息内容类型的因特网标准,即Content-type内容
绕过方法:修改Content-type内容,例如:上传Content—type:text/php --> Content--type:image/jpg
3.后缀黑名单验证
服务器程序根据一份文件后缀名的名单来判断是否允许当前文件上传到服务器。
绕过方法:1.文件名大小写绕过
2.名单列表绕过
3.根据系统的内置规定,通过特殊文件名绕过
4.0X00截断绕过,例如通过一些php函数进行绕过,gettype()函数从后往前判断后缀名
5..htaccess文件攻击
服务器端文件内容扩展检测:如果服务器对上传文件检测只能上传图片,可通过上传一个图片木马进行绕过,copy /b 1.gif + 2.txt =2.php 等等
3.配合解析漏洞绕过
Apache解析漏洞
解析文件规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,继续向左解析。例如:webshell.php.jpg,apache默认不解析jpg,继续向左解析直到解析到php文件后缀名 。
IIS解析漏洞
IIS5.x-6.x版本的服务器,只解析.asp后缀名文件
IIS6.0(目录解析)只要文件后缀名中包含.asp,都会解析为asp文件,包括.asp目录下的文件
(文件解析)服务器默认不解;号后面的内容
IIS7.0/7.5是对php解析时有一个类似nginx的解析漏洞,在任意url后面添加“/任意文件名.php”,按照php 方式进行解析。
Nginx解析漏洞
1.(任意文件名)/(任意文件名).php,按照php方式解析漏洞
2.(任意文件名)%00.php,进行解析攻击
文件下载
许多网站上都有下载功能,由于下载功能模块对下载的文件类型,目录没有做限制或者限制不当,可能造成而恶意用户查看或者下载敏感文件等等
攻击者可以下载Web源代码获得数据库配置文件进行脱库、篡改数据库、直接数据库提权。下载Password、web等敏感文件配置文件,就可以进一步获取数据库信息等等。
修复方案:对于用户输入的参数进行严格判断
文件包含
文件包含函数:
require()
require_once()
include()
include_once()
文件包含函数加载时的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他的恶意文件,从而导致了非预期的代码执行
0X00本地文件包含:包含的文件在服务器本地
0X01远程文件包含:包含的文件发生在第三方服务器
修复方案:对用户上传的参数进行严格的校验