【问题标题】:Method of evaluating shellcode in python?在python中评估shellcode的方法?
【发布时间】:2011-02-19 19:05:52
【问题描述】:

使用 C 程序评估一段示例 shellcode 并不复杂。它将涉及将 shellcode 存储在字符数组中,创建函数指针,对指针进行类型转换并使其指向数组并调用函数(指针)。

这就是它的工作原理,假设你可以在nastycode[]处执行内存:

/* left harmless. Insert your own working example at your peril */
char nastycode[] = "\x00\x00\x00...";
void (*execute_ptr) (void);

execute_ptr = (void *)nastycode; /* point pointer at nasty code */
execute_ptr();                   /* execute it */

有什么方法可以使用 Python 代码来做同样的事情吗?或者 Python 代码转换为字节码的事实是否使这样的努力变得不可能?

【问题讨论】:

  • 实际上,即使是您提出的 C 方法在现代平台上的工作量也越来越少。 en.wikipedia.org/wiki/NX_bit
  • 您能否参考一个示例来说明您所描述的内容(使用 C 程序评估 shellcode)?这将有助于更轻松地回答您的问题。
  • 绕过 NX 所需要做的就是分配一个读/写/执行页面。在 Windows 上,您将在调用 VirtualAlloc 时使用 PAGE_EXECUTE_READWRITE。 NX 仅在代码无法执行这样的分配时才有帮助。
  • @pyrony 这很简单,我已经编辑了问题以向您(和其他人)展示它是如何发生的。 @zubin71 我已将您的标题更改为更具描述性;如果您不喜欢它,或者希望更改我编辑的内容,请随意!
  • 这不一定适用于“C”。指向代码和数据的指针可能占据完全不同的地址空间。

标签: python c security shellcode


【解决方案1】:

唯一可行的方法是依赖 C 库。缓冲区溢出可以从它的库绑定中引入 python。出于您的目的,您可以用 c 编写自己的简单 python 库,并在Aleph One's Smashing the Stack for Fun and Profit 中实现类似 example3.c 的东西。正如 Avilo 指出的那样,您将不得不担心 NX 区域,但是任何内存区域都可以再次执行,这是特定于平台的。此外,GCC 默认使用堆栈金丝雀。虽然这可以通过使用传递给函数的地址覆盖返回地址来避免,这将使罐头厂完好无损。 ASLR 是一个很难绕过的非常好的安全系统,但是如果您将已知地址传递给您的 shell 代码,那么 ASLR 应该不是问题。

【讨论】:

  • 在利用中注意,如果我们可以直接暴力破解,ASLR 是没有问题的 ;) .
  • @Gunslinger_ 这就是堆喷射背后的想法。如果您有足够大的内存块来跳转到它,那么即使页面是随机的,您仍然可以找到它。
【解决方案2】:

这就是你要找的东西 ;)

http://libemu.carnivore.it/

既然你在哪里寻找python:

https://github.com/buffer/pylibemu

【讨论】:

    【解决方案3】:

    这在 python 中是可能的...你可以使用 ctypes 自己绑定到 C 或简单地使用类似 distorm 的东西

    http://code.google.com/p/distorm/wiki/Python

    您可能还想看看 dionaea 是如何做到的。它是一个蜜罐,但它会测试 shellcode 并输出结果。

    http://dionaea.carnivore.it/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多