文件上传漏洞

文件上传也是很常见的一种漏洞

一、概述

1.漏洞简介

文件上传,顾名思义就是上传文件的功能行为,之所以会被发展为危害严重的漏洞,是程序没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。文件上传漏洞是漏洞中最为简单猖獗的利用形式,一般只要能上传获取地址,可执行文件被解析就可以获取系统WebShell。

2.漏洞原理

网站WEB应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型时,就可以上传任意文件甚至是可执行文件后门。

3.漏洞危害

恶意文件传递给解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。根据网站使用及可解析的程序脚本不同,可以上传的恶意脚本可以是PHP、ASP、JSP、ASPX文件。

二、常见校验上传文件的方法

客户端校验

  1. 通过javascript来校验上传文件的后缀是否合法,可以采用白名单,也可以采用黑名单的方式
  2. 判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。

绕过方法:

  1. 禁用JS
  2. bp抓包修改后缀

服务端校验

1.MIME类型检测

MIME类型是什么?

在把输出结果传送到浏览器上的时候,浏览器必须启动应用程序来处理这个输出文档。这可以通过多种类型MIME(多功能网际邮件扩充协议)来完成。
在HTTP中,MIME类型被定义在Content-Type header中。

常见的MIME类型:

mine类型是描述消息内容类型的因特网标准

常见的有:

1
2
3
4
5
6
text/html (HTML文档)
image/gif (gif图像)
text/plain(纯文本)
image/png (png图像)
application/xml(xml)
application/msword (word文档)

绕过方法:

通过burpsuite来修改文件的类型(Content-Type)进行过滤即可

2.文件内容头检测

通过检测文件头内容判断上传文件的合法性

img

绕过方法:

在恶意脚本前加上允许上传文件的头标识(比如GIF89a,会解析成gif文件)

3.黑名单与白名单

通过判断后缀名来确定上传文件的合法性

黑名单绕过方法:

  1. 大小写绕过,例如Php、PhP

  2. 利用黑名单中没有的,但是又能够被解析的后缀名,例如php、 php3、 php4、php5、php7、pht、phtml、phps

  3. 配合解析利用方法,将上传的文件当作php代码执行

  4. 使用00截断(基于一个组合逻辑漏洞造成的,通常存在于构造上传文件路径的时候)

    img

  5. 超长文件名截断上传(windows 258byte | linux 4096byte)

白名单

1
2
3
4
只允许上传指定后缀的文件,我们可以利用操作系统的特性来绕过。
例如:上传文件名phpinfo.php(空格)
phpinfo.php(.)
最后生成文件时,字符会被自动去除。

白名单绕过方法不太好绕过,一般都是配合解析漏洞白名单

4.利用服务器特殊配置(Apache)

1
2
3
4
5
6
7
8
如果在Apache中.htaccess的配置有效,且可以被上传,那可以尝试在.htaccess中写入:
<FilesMatch "phpinfo.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
还可以
AddType application/x-httpd-php .ppp
这样 ppp后缀文件就会转换为php
phpinfo.jpg即可以php脚本解析

5.图片马

将图片和一句话在cmd下合成后,以php脚本执行时合成的一句话也会被执行

当一句话被执行时,浏览器访问时看不到一句话代码

制作
在cmd中输入

1
copy a.jpg/b+a.php shell.jpg
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2021-2023 Wh1tecell
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~