文件上传漏洞(一)


摘要由 AI 智能生成

文件上传漏洞的形成原因

文件上传漏洞是由于开发者在实现文件上传功能时,对上传文件的验证和处理不当或不足,导致攻击者能够绕过权限限制,将恶意文件上传到服务器。上传的文件可能是木马、病毒、恶意脚本或WebShell等。这些文件一旦上传成功并被服务器错误处理或执行,便会对服务器和整个系统带来极大的安全威胁。

文件上传本身并没有问题,问题出现在服务器如何处理上传的文件。如果服务器的文件解析和处理机制不够安全,攻击者可能利用上传的文件获取远程服务器的控制权限或执行任意代码,从而入侵系统。这一漏洞常被用于植入WebShell,进一步对服务器进行持续的渗透操作。

什么是WebShell?

WebShell是黑客常用的一种恶意脚本,目的是通过其获取服务器的远程控制权限。WebShell允许攻击者执行系统命令、窃取用户数据、删除或修改文件等。常见的WebShell编写语言包括ASP、ASPX、JSP和PHP。WebShell通常通过其他漏洞(如SQL注入、远程文件包含、FTP等)与社会工程攻击相结合,达到控制服务器的目的。

IIS文件上传漏洞

1. 目录解析漏洞

低版本的IIS(如IIS6.0及以下版本)存在目录解析漏洞。在服务器目录下创建一个名为.asp的文件夹,上传到该目录的文件即便是图片类型,也会被IIS作为ASP文件执行。尽管在代码层限制了文件的上传类型,如只允许上传PNG、JPG等,攻击者仍可通过这种方式将图片马(带有恶意脚本的图片)上传,并执行其中的WebShell代码。

2. 文件名解析漏洞

低版本IIS存在文件名解析漏洞,攻击者可以将文件命名为*.asp;.jpg,即使文件后缀为.jpg,IIS仍然会将其识别为ASP文件并执行。这使得攻击者可以上传包含恶意代码的文件,如图片马,并利用IIS对文件名的处理漏洞执行恶意脚本。

3. PUT攻击漏洞

HTTP 1.1协议引入了PUT方法,允许将文件上传到服务器。如果IIS服务器启用了WebDAV服务,并赋予了写入权限,攻击者可以通过PUT方法上传恶意文件。使用PUT攻击时,攻击者首先上传一个后缀为.txt的小马文件,利用PUT方式提交数据包后,访问该文件位置以确认是否上传成功。若上传成功,攻击者可以进一步使用MOVE命令更改文件的后缀名(如.asp.php),使其成为可执行的恶意脚本。

WebShell常见代码示例

  1. PHP WebShell:

    <?php @eval($_POST['pass']); ?>

    该代码接受攻击者通过POST方式提交的pass参数,并通过eval()函数执行其中的内容。@符号用于屏蔽错误信息,以防日志中出现异常提示。

  2. ASP WebShell:

    <% eval request("pass") %>
  3. ASPX WebShell:

    <%@ Page Language="Jscript" %>
    <% eval(Request.Item["pass"], "unsafe"); %>

图片马的生成方式

图片马是将恶意脚本嵌入到一张正常的图片中。攻击者可以使用文本编辑器(如Notepad++)打开一张图片文件,在文件的末尾插入一句话木马脚本,如:

<?php @eval($_POST['pass']); ?>

保存后,上传到服务器后,该文件仍可被IIS解析为可执行脚本。

总结

文件上传漏洞的形成原因主要是开发者未对上传文件的类型、路径、权限等进行严格的验证与控制。当文件上传至服务器后,如果没有采取适当的安全措施,服务器可能会错误地处理这些文件,导致攻击者能够上传并执行恶意脚本(如WebShell)。通过各种漏洞(如目录解析、文件名解析、PUT方法等),攻击者可以将恶意代码注入到服务器中,并通过WebShell等方式获得对服务器的控制,造成严重的安全威胁。

评论区
头像