揭秘ROP链:如何用一行代码黑掉一个系统
想象一下,一个系统仅通过一条命令就被攻破了。 当然,你可能会看着它说:“这只是定义一个数值变量并给它赋一个值。” 一条命令和一行代码怎么可能黑掉一个系统? 这就是我想谈论的,关于隐藏的抽象与基础抽象的区别,以及我们如何仅用一条命令来破解一个系统。 我敢肯定……98%的程序员会告诉你:“这是一个常量,常量是不能被改变的。” 不幸的是,这是程序员中一个普遍的误解,认为常量在程序运行时无法更改。 今天,我们想打破这个事实,改变“不可变”的常量,并打破语言的规则。 现在,我们只需执行这个命令,按下回车,然后注意到我们启动了计算器。 通过这种方式,我们现在完全控制了处理器,并按我们想要的方式指挥它。 此外,我们执行了程序员从未编写过的命令,这些命令在系统中也根本不存在。 这就是核心思想。 现代防御的演变 以前,事情很简单。 只需将代码(也就是Shellcode)注入内存,执行它,系统就被轻易地黑掉了。 但现在,随着现代系统的发展,情况已经改变。 直接从内存运行代码的想法已变得几乎不可能,特别是有了像NX位(或简称“No-Execute”)这样的新技术。 这个想法很简单: 接受写入的内存区域禁止执行。 接受执行的内存区域禁止写入。 这是现代系统中的法则,它阻止我们注入我们稍后可能利用来破解系统的编程代码或外部代码。 那么,简单的问题是:我们如何破解系统?我们如何创建一个可以用来破解系统的payload? 答案很简单。 我们将讨论我在之前文章中承诺过的“禁忌技术”。 “剪报勒索信”技术 在犯罪世界里,罪犯会想尽一切办法隐藏自己的身份。 其中一种方法就是“剪报”技术。 这个想法很简单,罪犯拿一份包含正常文本的普通报纸,然后开始有意地从报纸上剪下单词。 也就是说,他们从第一页剪下一个特定的词,从第二页剪下另一个特定的词,然后组成一条信息或一句话,比如一封威胁信。 罪犯为什么要这样做? 为了避免被追踪和笔迹分析,这样特殊机构就无法识别出他们特定的笔迹。...