我熟悉缓冲区溢出 (BOF),并且正在复制Techorganic 描述的简单攻击。他们创建了一个名为“经典”的简单 C 程序,其中包含一个明显的 BOF 漏洞(当它从 STDIN 读取多达 400 字节到 80 字节缓冲区时),然后创建适当的缓冲区来利用它,并将所述缓冲区保存到“ in .txt ”。尽管它运行顺利,但一旦完成所有准备工作,他们就会使用以下命令执行程序:
user@pc$ (cat in.txt ; cat) | ./classic
我的第一个想法是“天哪,那里发生了什么?”,最初的想法很简单,运行经典并输入缓冲区,我的意图是执行它:
user@pc$ ./classic < in.txt
就像任何其他凡人都会做的那样。但令我惊讶的是,他们的方式有效,而我的方式无效。
底线是:尽管它们在语义上是相等的(或相似的,显然),但第一个语法有什么作用以及使他们的解决方案有效而我的解决方案无效的关键区别是什么。