首先,我想避免语言上的激烈争论。可供选择的语言有 Perl、Python 和 Ruby。我想说的是,我对所有这些都感到满意,但问题是我不能只专注于其中一个。

例如,如果我看到一个很酷的 Perl 模块,我就必须尝试一下。如果我看到一个不错的 Python 应用程序,我必须知道它是如何制作的。如果我看到 Ruby DSL 或某些 Ruby 巫毒,我就会迷上 Ruby 一段时间。

目前我是一名 Java 开发人员,但计划在不久的将来参加 CEH。我的问题是:对于工具编写和漏洞利用开发,您认为哪种语言最合适?

再说一遍,我不想引起口水战或任何麻烦,我只是想要来自知道自己在做什么的编剧的诚实意见。

还有一件事:也许你们中的一些人会问“为什么选择一种语言?”。回答这个问题:我想只选择一种语言,以便尝试掌握它。

有帮助吗?

解决方案

您可能需要 Ruby,因为它是 Metasploit 的母语,而 Metasploit 是事实上的标准开源渗透测试框架。Ruby 将为您提供:

  • 梅塔普洛特的 框架、操作码和 shellcode 数据库
  • 梅塔普洛特的 红宝石洛康 原始 802.11 工作的绑定。
  • Metasploit 的 KARMA 绑定用于 802.11 客户端重定向。
  • Libcurl 和 net/http 用于网络工具编写。
  • 事件机器 用于 Web 代理和模糊测试工作(或 RFuzz,它扩展了著名的 Mongrel Web 服务器)。
  • 梅塔斯姆 用于 shellcode 生成。
  • 混乱 用于 x86 反汇编。
  • 二进制数据 用于二进制文件格式模糊测试。

第二名是Python。Python 中可用的渗透测试库比 Ruby 中更多(但不足以抵消 Metasploit)。商业工具往往也支持 Python——如果您是 Immunity CANVAS 或 CORE Impact 客户,您就会需要 Python。Python 为您提供:

  • 扭曲的 用于网络访问。
  • 排梅 用于程序跟踪和可编程调试。
  • CANVAS 和影响力支持。
  • 多恩赛夫的 用于远程调试的火线库。
  • 与 WinDbg 集成 用于远程 Windows 内核调试(Ruby 中对于内核调试仍然没有好的答案,这就是为什么我仍然偶尔使用 Python)。
  • 桃子绒毛器 和 Sully 进行模糊测试。
  • SpikeProxy 用于网络渗透测试(另外, OWASP 豹).

毫不奇怪,许多 Web 工作都使用 Java 工具。事实上标准的 Web 渗透测试工具是 Burp Suite,它是一个 Java swing 应用程序。Ruby 和 Python 都有 Java 变体,您可以使用它们来访问此类工具。此外,Ruby 和 Python 都提供:

  • 与 libpcap 直接集成以进行原始数据包工作。
  • 用于加密的 OpenSSL 绑定。
  • IDA Pro 扩展。
  • 用于 API 访问的成熟(或至少合理)的 C 外部函数接口。
  • 用于 UI 工作的 WxWindows,以及用于 Web UI 的不错的 Web 堆栈。

使用这两种语言都不会出错,尽管对于主流渗透测试工作,Metasploit 可能会超越 Python 的所有优势,而目前,对于 x86 逆向工作,Python 卓越的调试界面超越了 Ruby 的所有优势。

还:现在是 2008 年。它们不是“脚本语言”。它们是编程语言。;)

其他提示

[免责声明:我主要是一名 Perl 程序员,这可能影响了我的判断。然而,我不是一个特别部落的人,我认为在这个特定问题上我的论点是相当客观的。]

Perl 被设计为无缝地融入 Unix 环境,这就是为什么它对于具有主要 OO 背景的人(特别是 OOP 的 Java 流派)来说如此陌生。但出于这个原因,它被广泛地安装在任何类型的 Unixoid 操作系统的机器上,并且许多供应商系统实用程序都是用它编写的。同样出于同样的原因,既没有安装 Python 也没有安装 Ruby 的服务器仍然可能安装 Perl,这再次使得熟悉 Perl 变得很重要。因此,如果您的 CEH 活动包括 Unix 上的广泛活动,那么您无论如何都必须对 Perl 有一定程度的熟悉,并且您最好专注于它。

也就是说,这很大程度上是一个偏好问题。语言之间没有太多区别;他们的表达能力几乎是相同的。有些事情在一种语言中更容易一些,而另一些则在另一种语言中更容易一些。

就库而言,我不知道 Ruby 和 Python 之间的比较如何——我只知道 Perl 以一定优势击败了它们。话又说回来,有时(特别是当你正在寻找满足常见需求的库时)唯一的影响就是你会被选择淹没。如果您只想在 Python 或 Ruby 库很好地涵盖的某个特定领域做一些事情,那么大量的 其他 CPAN 上的东西不一定是优势。然而,在利基领域,这一点很重要,你永远不知道你最终会遇到什么不可预见的需求(错误,根据定义)。

对于命令行上的单行使用,Python 是一种不可能的选择。

就交互式解释器环境而言,Perl……呃……好吧,您可以使用调试器,这不是很好,或者您可以从 CPAN 安装一个调试器,但 Perl 本身并没有提供一个好的调试器。

所以我认为 Perl 确实在满足您的需求方面确实有一点点优势,但也只是而已。如果你选择 Ruby,你的情况可能不会更糟。Python 可能会给你带来更明显的不便,但它也不是一个 坏的 选择。

我可以为这三个问题提出论据:-)

Perl 拥有 CPAN 的所有功能 - 为您提供快速整合功能的巨大优势。它还拥有一个非常灵活的测试基础架构,这意味着您可以在同一框架中插入许多不同的自动化测试样式(包括其他语言的测试)。

Ruby 是一门值得学习的语言,并且缺少 Perl 5 中的一些缺陷。如果您正在进行基于网络的测试,它还有 watir 库 - 这对 Trez 很有用(请参阅 http://wtr.rubyforge.org/)

Python——不错的语言,而且(虽然这不符合我个人的喜好)一些人发现它的结构方式更容易掌握。

其中任何一个(以及许多其他)都是一门很好学的语言。

我不会看语言,而是看你的工作环境。如果你周围有其他人在做类似的事情,那么学习东西总是更容易。如果您当前的开发/测试人员已经专注于上述内容之一 - 我会这样做。如果没有,请选择最适合您当前工作环境/最有用的一种。与团队的其他成员聊天,看看他们的想法。

这取决于实现,如果它是分布式的,我会选择 Java,正如你所知,因为它的可移植性。如果它只是供内部使用,或者将在半受控环境中使用,那么请选择您最喜欢维护的方式,并且选择具有最佳长期前景的方式。

现在回答这个问题,我会选择 Perl,但我是一个 Linux 爱好者,所以我对此可能有点偏见。

如果您计划使用 Metasploit 进行笔测试和漏洞开发,我会推荐 ruby​​,如前所述,Metasploit 是用 ruby​​ 编写的,您可能希望进行的任何漏洞/模块开发都需要 ruby​​。

如果您将使用 Immunity CANVAS 进行笔测试,那么出于同样的原因,我会推荐 Python,因为 CANVAS 是用 python 编写的。此外,Peach 和 Sulley 等模糊测试框架也是用 Python 编写的。

我不会推荐 Perl,因为你会发现与渗透测试/模糊测试/漏洞利用/...相关的工具/脚本/框架非常少。在 Perl 中。

由于你的问题是“工具编写和漏洞利用开发”,如果你选择Metasploit,我会推荐Ruby;如果你选择CANVAS,我会推荐Python。

希望有帮助:)

作为 CEH,首先要学习 CEH 材料。这将使您接触到用于发起各种攻击的各种工具和平台。一旦您很好地了解了您的目标,请研究现有工具和平台的功能(前面提到的metasploit框架非常全面和强大)。如何扩展它们来满足您的需求?一旦了解了这一点,您就可以比较这些语言的功能。

我还建议您查看一下可用的工具 回溯 发行版。

所有这些都应该足够了。除非您需要一些仅以一种语言提供的库,否则我会让个人偏好引导我。

如果您正在寻找一种能够与 Java 良好配合的脚本语言,您可能需要考虑 Groovy。它具有 Perl 的灵活性和强大功能(闭包、内置正则表达式、每个角落的关联数组),但您可以从中访问 Java 代码,因此您可以访问大量的库,特别是您需要的系统的其余部分。重新发展。

元漏洞 是一个很棒的渗透测试框架。它主要是用 Ruby 编写的,所以如果您很了解该语言,也许您可​​以使用它。然而,为了 使用 Metasploit,您根本不需要了解任何语言。

如果你对CEH感兴趣,我会看看 灰帽蟒蛇. 。它展示了一些非常有趣且相关的东西。

话虽这么说,任何语言都应该没问题。

那么,您正在考虑什么样的利用呢?如果你想编写一些需要低级内容的东西(ptrace、原始套接字等),那么你需要学习 C。但 Perl 和 Python 都可以使用。真正的问题是哪一种更适合您的风格?

至于工具制作,Perl 具有良好的字符串处理能力,更接近系统,有良好的支持,但恕我直言,它非常令人困惑。我更喜欢Python:它是一种干净、易于使用、易于学习的语言,具有良好的支持(完整的语言/库参考、第 3 方库等)。而且它(严格来说)很酷。

我和tqbf在一起。我曾经使用过 Python 和 Ruby。目前我正在使用 JRuby。它具有 Ruby 的所有功能,可以访问 Java 库,因此,如果您确实需要低级语言来解决某些问题,则可以使用高级语言来解决。到目前为止,我还不需要真正使用太多 Java,因为 Ruby 已经能够完成我作为 API 测试人员所需的一切。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top