文件上传漏洞介绍
文件上传漏洞的原因:
1、对于上传文件的后缀名(扩展名)没有做较为严格的限制
2、对于上传文件的MIMEETYPE(content-type)(用于描述文件的类型的一种表述方法)没有做检查
3、权限上没有对于上传的文件目录设置不可执行权限
4、web server 对于上传文件或者指定目录的行为没有做限制
在WEB中进行文件上传的原理是通过将表单设为multipart/form data,同时加入文件域,而后通过HTTP协议将文件内容发送到服务器,服务器读取这个分段(multiparty)的数据信息,并将其中的文件内容提取出来并保存的。
通常,在进行文件保存的时候,服务器端会读取文件的原始文件名,并从这个原始文件名得出文件的扩展名,而后随机为文件起一个文件名(为了防止重复),并且加上原始文件的扩展1名来保存到服务器上。
上传漏洞的危害:
- 上传web木马文件,控制web服务器文件、远程命令执行等。
- 上传系统病毒、木马文件进行挖矿、僵尸网络。
- 上传系统溢出程序进行权限提升。
- 修改web页面实现钓鱼、挂马、暗链等操作。
- 内网渗透。
- 在权限得到提升的情况下,想做什么就做什么。
文件上传合法性检查方法:
- 前端JS验证
- MIME类型验证
- 黑名单/白名单
- 检查文件内容(getimagesize()函数用于获取图像信息、检验关键字)
- 禁止本地文件包含漏洞
- 使用安全的web服务(apache、nginx(/test.pen/xxx.php)、IIS解析漏洞(1.php;jpg))
文件上传漏洞20种绕过方法:
- 前端绕过
- MIME类型绕过
- 后缀名大小写绕过/php4、php5
- 00截断
- 覆盖.htaccess
- Windows文件流特性绕过
- 双写文件名绕过
- 条件竞争
- 等等…
文件下载漏洞概念
- 一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。
- 下载服务器任意文件,如脚本代码、服务及系统配置文件等可用得到的代码进一步代码审计,得到更多可利用漏洞。
如何查找任意文件下载漏洞:
-
查找传入文件名的参数:
- 导入文件等参数,要是直接输入文件名,就有可能有注入点
-
注意如下几个参数名:
- RealPath,FilePath,filepath,Path,path,inputFile,url,urls,Lang,dis,data,readfile,filep
- src,menu,META-INF,WEB-INF
-
代码中如何查看漏洞:
- PHP为例,有如下代码,就有可能存在任意文件下载漏洞
- readfile,fopen,file_get_contents
Windows\Linux敏感文件路径:
修复文件下载漏洞:
PHP为例
- 过滤 . (点),使用户在url中不能回溯上级目录
- 正则严格判断用户输入参数的格式
- php.ini配置open_basedir限定文件访问范围