Web 文件上传漏洞

  • 文件上传漏洞原理

文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,导致用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
即文件上传漏洞的原理是web应用程序没有将用户提交的数据文件和Web应用程序代码进行有效的隔离,混淆了两者的边界,进而把恶意用户提交的含有恶意代码的文件被中间件解析执行。

  • 什么是Web容器?

web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如tomcat、apache、nginx等等。(可以理解为给编程语言提供环境)

  • 什么是中间件?

提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级应用程序之间。

  • 什么是容器?

给处于其中的应用程序组件(ASP,JSP,PHP)提供一个环境。使处于其中的应用程序组件之间跟容器中的环境变量接口交互,不必关注其他系统问题。

  • 什么是服务器?

www服务器或http服务器。提供web信息游览服务。它只需支持http协议、html文档格式以及url,向游览器提供服务的程序。

  • Webshell简介:

WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门。攻击者在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的(可以上传下载或者修改文件,操作数据库,执行任意命令等)。
WebShell后门隐蔽较性高,可以轻松穿越防火墙,访问WebShell时不会留下系统日志,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员不容易发现入侵痕迹。攻击者可以将WebShell隐藏在正常文件中并修改文件时间增强隐蔽性,也可以采用一些函数对WebShell进行编码或者拼接以规避检测。除此之外,通过一句话木马的小马来提交功能更强大的大马可以更容易通过应用本身的检测。<?php eval($_POST[a]); ?>就是一个最常见最原始的小马。

- 什么是IIS?

IIS全称是互联网信息服务,包括FTP/FTPS、NNTP、HTTP/HTTPS、SMTP等服务。

- 什么是文件解析?

当服务器接收到一个HTTP请求的时候,IIS首先需要决定如何去处理这个请求(服务器处理.aspx和.html肯定是不一样的),根据的是文件的后缀名。

服务器获取所请求的页面(也可以是文件)的后缀名后接下来会在服务器端寻找可以处理这类后缀名的应用程序,如果IIS找不到可以处理此类文件的应用程序,那么IIS将直接把这个文件返还给客户端。

造成文件上传漏洞的原因以及原理:

常见文件上传漏洞位置:
  1. 上传用户头像
  2. 上传文章的附件
  3. 上传个人身份认证信息
  4. 上传提交相关的资料
    Web 文件上传漏洞
常见文件上传漏洞分析

Web 文件上传漏洞

文件上传漏洞的攻击与防御

1. 任意文件上传
任意文件上传漏洞是指web应用系统没有对用户上传的文件做任何校验就直接上传到服务器,恶意用户可以直接上传一句话木马到web服务器,从而控制web服务器。
2.客户端检测
校验方法:通过JavaScript来校验上传文件的后缀是否合法,可以采用白名单,也可以采用黑名单的方式
判断方式:在浏览器加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。
绕过方法:
(1)修改或者禁用JS:在本地浏览器客户端禁用JS即可。可使用火狐浏览器的NoScript插件、IE中禁用掉JS等方式实现。
禁用JS操作手册:禁用JS操作手册
(2)用Burp抓包改包:过前台脚本检测扩展名,就是将所要上传文件的扩展名更改为符合脚本检测规则的扩展名,通过BurpSuite工具,截取数据包,并将数据包中文件扩展名更改回原来的,达到绕过的目的。
例如:文件名本来为【evil.jpg】,上传时,用BurpSuite截包后,将数据包中的名字改为【evil.php】(或其它脚本类型)即可
3.服务端校验