Shell Code和内核黑客操作系统不可知?

时间:2012-09-17 16:39:42

标签: linux kernel

我正在读一本关于黑客攻击内核的书,作者一直回到的一个领域是shell代码,许多内核黑客尝试试图找到一种执行shell代码的方法。 有人可以详细说明这个主题,特别是你能澄清“shell代码”。

shell代码如何绕过* NIX系统中的sudo或者不是windows机器中的Admin? 是否存在非操作系统特定的shell代码攻击示例?我认为必须针对特定的操作系统。

4 个答案:

答案 0 :(得分:1)

基本上它正在寻找缓冲区溢出或类似技术,允许您将恶意代码插入以root身份运行的进程中。

例如,如果您使用固定大小的缓冲区并且超出该缓冲区,则基本上可以覆盖内存内容并使用它来执行恶意负载。

答案 1 :(得分:1)

一个可以回来咬你的简单shell代码片段是:

/bin/sh

或在C程序中:

system("/bin/sh");

如果您可以指示您的漏洞利用执行这样的代码行(例如,通过缓冲程序溢出来劫持程序的预期控制路径),您将获得具有受害者权限的shell提示,并且您已进入。

答案 2 :(得分:1)

Shell code是利用漏洞时使用的有效负载,该漏洞用于创建命令shell,攻击者可以从中控制该计算机。

运行时的典型shell代码可能会打开网络连接并在Windows计算机上生成cmd.exe(或Linux / unix上的/bin/shstdinstdout网络连接。攻击者可以从他的机器上完成连接并输入命令并获得反馈,就像他坐在受感染的机器上一样。

缓冲区溢出不是shell代码。正是利用漏洞来执行shell代码。

利用缓冲区溢出将shell代码复制到用户的计算机并覆盖程序堆栈上的返回地址。当前正在执行的函数返回时,处理器跳转到上传的shell代码,该代码为攻击者创建shell。

有关利用缓冲区溢出的更多信息,请查看Smashing the Stack for Fun and Profit

您可以尝试使用-fno-stack-protector的{​​{1}}标志,但我对OSX或它可能使用的任何堆栈保护不是很熟悉。

如果你想玩缓冲区溢出,现代编译器和现代操作系统都有保护措施,这使得这很困难。你最好的选择是抓住自己的Linux发行版并关闭它们。 See this question了解有关禁用这些保护措施的更多信息。

请注意,执行shell代码不需要缓冲区溢出。我已经演示了使用命令注入漏洞打开远程shell来上传和执行批处理文件。

答案 3 :(得分:1)

基本上,当程序运行时,与其相关的所有内容(变量,指令等)都作为缓冲区存储在内存中。

内存本质上是RAM中的很多内容。

因此,出于我们示例的目的,我们假设存在一个变量Name,它存储在位#1-10中。假设位11-30用于存储指令。很明显程序员希望Name长10位。如果我给出一个20位长的名字,它的缓冲区会溢出到保存指令的区域。所以我要设计我的Name的后10位,以便指令被顽皮的指令覆盖。

'innocentmeNAUGHTYCOD'

那是一次攻击。

虽然并非所有实例都是如此明显,但几乎每一段代码都存在一些漏洞。这就是你如何利用它。