file uoload

什么是文件上传漏洞?

文件上传漏洞是指 Web 服务器允许用户将文件上传到其文件系统,而无需充分验证其名称、类型、内容或大小等内容。如果不能正确实施限制,可能意味着即使是基本的图片上传功能也可用于上传任意和有潜在危险的文件。这甚至可能包括支持远程代码执行的服务器端脚本文件。

在某些情况下,上传文件的行为本身就足以造成损害。其他攻击可能涉及对文件的后续 HTTP 请求,通常是为了触发服务器执行该请求。

文件上传漏洞是如何产生的?

鉴于相当明显的危险,野外网站很少对允许用户上传的文件没有任何限制。更常见的是,开发人员实现了他们认为是健壮的验证,这些验证要么存在固有缺陷,要么很容易被绕过。

例如,他们可能会尝试将危险文件类型列入黑名单,但在检查文件扩展名时无法考虑解析差异。与任何黑名单一样,也很容易意外地遗漏可能仍然危险的更晦涩的文件类型。

在其他情况下,该网站可能会尝试通过验证攻击者使用 Burp Proxy 或 Repeater 等工具轻松操纵的属性来检查文件类型。

最终,即使是强大的验证措施也可能在构成网站的主机和目录网络中不一致地应用,从而导致可以利用的差异。

利用不受限制的文件上传来部署 Web Shell

从安全角度来看,最糟糕的情况是网站允许您上传服务器端脚本,例如 PHP、Java 或 Python 文件,并且还配置为将它们作为代码执行。这使得在服务器上创建自己的 Web shell 变得微不足道。

Web 外壳

Web shell 是一种恶意脚本,攻击者只需向正确的端点发送 HTTP 请求,即可在远程 Web 服务器上执行任意命令。

如果您能够成功上传 Web Shell,则可以有效地完全控制服务器。这意味着您可以读取和写入任意文件,泄露敏感数据,甚至使用服务器来对内部基础设施和网络外部的其他服务器进行攻击。例如,以下 PHP 单行代码可用于从服务器的文件系统中读取任意文件:

<?php echo file_get_contents('/path/to/target/file'); ?>

上传后,发送对此恶意文件的请求将在响应中返回目标文件的内容。

更通用的 Web shell 可能如下所示:

<?php echo system($_GET['command']); ?>

此脚本允许您通过查询参数传递任意系统命令,如下所示:

GET /example/exploit.php?command=id HTTP/1.1

  1. 在您的系统上,创建一个名为 的文件,其中包含一个用于获取 Carlos 机密文件内容的脚本。例如:exploit.php

<?php echo file_get_contents('/home/carlos/secret'); ?>

利用有缺陷的文件上传验证

在野外,您不太可能找到一个没有针对文件上传攻击保护的网站,就像我们在上一个实验室中看到的那样。但是,仅仅因为防御措施已经到位,并不意味着它们很强大。有时,您仍可以利用这些机制中的缺陷来获取用于远程执行代码的 Web Shell。

有缺陷的文件类型验证

提交HTML表单时,浏览器通常会在请求中发送内容类型为.这适用于发送简单的文本,例如您的姓名或地址。但是,它不适合发送大量二进制数据,例如整个图像文件或 PDF 文档。在这种情况下,首选内容类型。POSTapplication/x-www-form-url-encodedmultipart/form-data

1)修改一下content-type的内容为image/jpg就好了,就是太慢了,搞得我还以为失败了

posted @ 2024-01-31 10:14  CLLWA  阅读(4)  评论(0编辑  收藏  举报