【问题标题】:Shell Code and kernel hacking OS Agnostic?外壳代码和内核黑客操作系统不可知?
【发布时间】:2012-09-09 22:15:16
【问题描述】:

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

shell 代码如何绕过 *NIX 系统中的 sudo 或在 Windows 机器中不是管理员? 是否有非特定于操作系统的 shell 代码攻击示例?我认为必须针对特定的操作系统。

【问题讨论】:

    标签: linux kernel


    【解决方案1】:

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

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

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

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

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

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

    如果您想解决缓冲区溢出问题,现代编译器和现代操作系统都有相应的保护措施,让这变得困难重重。你最好的选择是给自己一个 Linux 发行版并关闭它们。 See this question 了解有关禁用这些保护的更多信息。

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

    【讨论】:

    • 我得到了溢出部分,但我不明白你是如何设计有效载荷的,以便它设法落入你溢出的内存中。
    • 我正在尝试写入缓冲区溢出以在我的机器(osx 山狮)上尝试其中的一些内容,而 gcc 对这些事情感到不满或采取了一些保护措施。对自测有什么建议吗?
    • 感谢您添加!很有帮助。
    【解决方案2】:

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

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

    【讨论】:

    • 那么有一大堆技术可以用来破坏堆栈/创建指向您的恶意代码的溢出?
    • 是的,最常见的是由于用户输入导致缓冲区溢出。
    【解决方案3】:

    一个简单的 shell 代码 sn-p 可以回来咬你是:

    /bin/sh
    

    或在 C 程序中:

    system("/bin/sh");
    

    如果您可以引导您的漏洞利用程序执行这样的代码行(例如,通过劫持程序预期控制路径的缓冲区溢出),您会得到一个带有受害者权限的 shell 提示,然后您就进入了。

    【讨论】:

    • 这很有意义!遇到问题
    • @user1124541:你看,你不仅可以注入你自己的恶意代码,而且如果他们写的时候不小心,你也可以使用受害者的程序为你做。跨度>
    【解决方案4】:

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

    内存本质上是 RAM 中的一大堆。

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

    'innocentmeNAUGHTYCOD'

    这是一次攻击。

    尽管并非所有实例都如此明显,但几乎每一段大代码都存在一些漏洞。关键在于你如何利用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 2014-12-21
      • 2020-12-26
      • 2014-05-27
      • 2010-09-09
      • 2021-06-04
      相关资源
      最近更新 更多