文件上传漏洞小结

1.原理

利用web容器特性和上传过滤不严谨上传含恶意代码的文件。

2. 解析漏洞

学习文件上传漏洞是离不开web容器解析漏洞的,下面介绍一些常见web容器IIS、APACHE、NGINX的解析漏洞

2.1 IIS解析漏洞

2.1.1 IIS 6.0
(1)目录解析
建立*.asp/asa文件夹时,包含一个1.txt文件,则访问1.txt时,因为在 *.asp/asa文件夹中1.txt文件会被当做asp脚本执行。
(2)截断
当文件为*.asp;1.jpg时,也会被当做asp脚本执行。
2.1.2 IIS7/7.5
在Fast-CGI运行模式下,在一个文件路径(/1.jpg)后面加上/2.php会将/1.jpg/2.php 解析为 php 文件。
条件:php.ini里默认cgi.fix_pathinfo=1;
2.2 Apache解析漏洞
Apache在解析文件时,从右往左解析,遇到不认识的扩展名就向前继续解析,直到遇到认识的扩展名,如果都不认识,则暴露其源代码
当一个文件为1.php.rar.ss.aa,不认识aa,会一直向前解析,直到遍历到认识的扩展名。
2.3 NGINX解析漏洞
也叫PHPCGI漏洞,实质上是因为php.ini中的cgi.fix_pathinfo默认是开启的。
在访问1.jpg这个文件时以这种去访问/1.jpg/1.php(1.php实际上不存在),会被当做PHP代码去执行。

3. 上传检测类型

3.1 客户端检测

3.1.1 原理
利用javascript对选择的文件后缀进行检测,在没有点击上传前就已做判断。
3.1.2 绕过方法
(1)在firebug更改jsp代码,删除相应代码的函数
(2)关掉浏览器js执行
(3)将脚本文件扩展名改成允许上传的扩展名,上传时抓包,更改为原扩展名即可。

3.2 服务器端类型检测

3.2.1 黑/白名单过滤

  • 黑名单:设置过滤器,过滤掉不允许上传的文件类型
  • 白名单:列出允许上传的文件类型,不满足则不允许上传

3.2.2 MIME类型检测
MIME类型用来设定某种扩展名文件的打开方式,当文件被访问时,浏览器自动使用指定的应用程序来打开。如GIF图片MIME为image/gif。

  • 利用方法:
    抓包更改MIME类型。
    3.2.3 目录验证
    上传文件时,如果指定的目录存在就将文件写入该目录,要是不存在则新建该目录。
  • 利用方法:
    结合IIS 6.0解析漏洞,自定义文件夹为1.asp,当服务器不存在该目录时创建,上传的1.jpg则会被当做asp脚本执行。
    3.2.4 截断上传
    %00截断漏洞,在asp程序中最常见

4. 修复方法

  • 对文件进行重命名、
  • 接收文件时用临时路径存放、
  • 获取扩展名与白名单对比,没有则退出

猜你喜欢

转载自blog.csdn.net/syy0201/article/details/88850380
今日推荐