使用 (cat $file; cat) 运行一个简单的 BOF 漏洞利用

信息安全 缓冲区溢出 开发开发 终端
2021-08-23 21:10:58

我熟悉缓冲区溢出 (BOF),并且正在复制Techorganic 描述的简单攻击他们创建了一个名为“经典的简单 C 程序,其中包含一个明显的 BOF 漏洞(当它从 STDIN 读取多达 400 字节到 80 字节缓冲区时),然后创建适当的缓冲区来利用它,并将所述缓冲区保存到“ in .txt ”。尽管它运行顺利,但一旦完成所有准备工作,他们就会使用以下命令执行程序:

user@pc$ (cat in.txt ; cat) | ./classic

我的第一个想法是“天哪,那里发生了什么?”,最初的想法很简单,运行经典并输入缓冲区,我的意图是执行它:

user@pc$ ./classic < in.txt

就像任何其他凡人都会做的那样。但令我惊讶的是,他们的方式有效,而我的方式无效。

底线是:尽管它们在语义上是相等的(或相似的,显然),但第一个语法有什么作用以及使他们的解决方案有效而我的解决方案无效的关键区别是什么。

1个回答

第一个cat命令将输入​​提供in.txt给程序的标准输入。第二个cat命令只是从当前的标准输入中读取并将其提供给程序,从而为执行此命令行的人提供了一种将其自己的数据从终端提供给程序的方法,并且这种方式可能是/bin/sh从该程序执行的某些或类似的.

与此相反,仅使用program < in.txt将 提供in.txt给程序的标准输入,并且在程序的标准输入关闭之后。这意味着没有来自终端的用户输入被馈送到程序和在其中运行的 shell。