6

首先,我想避免语言上的火焰战争。可供选择的语言有 Perl、Python 和 Ruby。我想提一下,我对所有这些都很满意,但问题是我不能只专注于一个。

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

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

再说一次,我不想引起一场激烈的战争或任何麻烦,我只想从知道自己在做什么的脚本编写者那里得到诚实的意见。

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

4

12 回答 12

28

您可能需要 Ruby,因为它是 Metasploit 的原生语言,它是事实上的标准开源渗透测试框架。Ruby 会给你:

  • Metasploit 的框架、操作码和 shellcode 数据库
  • Metasploit 的Ruby lorcon绑定用于原始 802.11 工作。
  • Metasploit 用于 802.11 客户端重定向的 KARMA 绑定。
  • 用于 Web 工具编写的Libcurl和 net/http。
  • EventMachine用于 Web 代理和模糊测试工作(或 RFuzz,它扩展了著名的 Mongrel 网络服务器)。
  • 用于 shellcode 生成的Metasm 。
  • 用于 x86 反汇编的Distorm 。
  • BinData用于二进制文件格式的模糊测试。

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

  • 扭曲的网络访问。
  • PaiMei用于程序跟踪和可编程调试。
  • 画布和影响支持。
  • Dornseif 的用于远程调试的火线库。
  • 准备好与 WinDbg 集成以进行远程 Windows 内核调试(Ruby 中对于内核调试仍然没有好的答案,这就是我仍然偶尔使用 Python 的原因)。
  • Peach Fuzzer和 Sully 用于模糊测试。
  • 用于 Web 渗透测试的 SpikeProxy(也称为OWASP Pantera)。

毫不奇怪,很多 Web 工作都使用 Java 工具。事实上的标准网络渗透测试工具是 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 年。它们不是“脚本语言”。他们是编程语言。;)

于 2008-09-17T00:11:01.187 回答
8

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

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

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

在库方面,我不知道 Ruby 和 Python 如何相互比较——我确实知道 Perl 让它们领先一步。话又说回来,有时(特别是当您正在寻找满足共同需求的库时)唯一的影响就是您会被选择淹没。而且,如果您只是想在 Python 或 Ruby 的库很好地涵盖的某个特定领域做事,那么 CPAN 上的大量其他东西不一定是优势。然而,在利基领域,它很重要,你永远不知道你最终会有什么不可预见的需求(错误,根据定义)。

对于命令行上的单行使用,Python 是一种非入门者。

在交互式解释器环境方面,Perl……嗯……嗯,你可以使用调试器,它不是那么好,或者你可以从 CPAN 安装一个,但 Perl 本身并没有提供一个好的。

所以我认为 Perl 确实对你的需求有非常小的优势,但只是而已。如果您选择 Ruby,您可能根本不会变得更糟。Python 可能会给您带来更明显的不便,但这也不是一个糟糕的选择。

于 2008-09-16T22:04:39.027 回答
4

我可以为这三个方面提出一个论据:-)

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

Ruby 是一门很好学的语言——它缺少 Perl 5 中的一些笨拙的东西。如果你在做基于 Web 的测试,它还有 watir 库——它对 trez 很有用(参见http://wtr.rubyforge.org/

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

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

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

于 2008-09-16T22:48:56.533 回答
3

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

现在只是回答这个问题,我会使用 Perl,但我是一个 linux 人,所以我可能对此有点偏见。

于 2008-09-16T20:14:39.353 回答
3

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

如果您将使用 Immunity CANVAS 进行渗透测试,那么出于同样的原因,我会推荐 Python,因为 CANVAS 是用 Python 编写的。还有很多像 Peach 和 Sulley 这样的模糊测试框架都是用 Python 编写的。

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

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

希望有帮助:)

于 2008-09-16T22:49:14.910 回答
2

作为一名 CEH,首先学习 CEH 材料。这将使您接触到用于发起各种攻击的各种工具和平台。一旦你很好地理解了你的目标,就可以研究一下已经可用的工具和平台的功能(前面提到的 metasploit 框架非常彻底和健壮)。如何扩展它们以满足您的需求?一旦你知道了这一点,你就可以比较语言的能力。

我还建议查看BackTrack发行版上可用的工具。

于 2008-09-16T20:48:21.410 回答
1

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

于 2008-09-16T20:19:25.737 回答
1

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

于 2008-09-16T20:20:05.843 回答
1

metasploit是一个很好的渗透测试框架。它主要是用 Ruby 编写的,所以如果你对这种语言很熟悉,也许你可以在那里学习。但是,要使用metasploit,您根本不需要了解任何语言。

于 2008-09-16T20:22:50.830 回答
1

如果您对 CEH 感兴趣,我会看看Gray Hat Python。它展示了一些非常有趣和相关的东西。

话虽如此,任何语言都应该没问题。

于 2010-07-11T20:58:06.647 回答
0

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

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

于 2008-09-16T20:17:11.593 回答
0

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

于 2011-02-07T22:24:32.513 回答