首先,我想避免对语言进行激烈的战争。可供选择的语言是Perl,Python和Ruby。我想提一下我对所有这些都很满意,但问题是我不能只关注一个。
例如,如果我看到一个很酷的Perl模块,我必须尝试一下。如果我看到一个不错的Python应用程序,我必须知道它是如何制作的。如果我看到Ruby DSL或者一些Ruby voodoo,我会迷上Ruby一段时间。
目前我是一名Java开发人员,但计划在不久的将来接受CEH。我的问题是:对于工具编写和漏洞利用开发,您认为哪种语言最合适?
同样,我不想引发火焰战或任何麻烦,我只是想要知道他们正在做什么的脚本编写者的诚实意见。
还有一件事:也许你们中的一些人会问“为什么选择一种语言?”。要回答这个问题:我想只选择一种语言,以便掌握它。
答案 0 :(得分:27)
你可能想要Ruby,因为它是Metasploit的本地语言,它是事实上标准的开源渗透测试框架。 Ruby会给你:
第二位是Python。 Python中提供的测试库比Ruby中更多(但不足以抵消Metasploit)。商业工具也倾向于支持Python - 如果你是Immunity CANVAS或CORE Impact客户,你需要Python。 Python为您提供:
不出所料,很多网络工作都使用Java工具。事实上的标准web pentest工具是Burp Suite,它是一个Java swing应用程序。 Ruby和Python都有Java变种,您可以使用这些变体来访问这样的工具。此外,Ruby和Python都提供:
对于这两种语言,你不会出错,但是对于主流的pentest工作,Metasploit可能会摒弃所有Python的好处,而目前,对于x86逆转工作,Python的优秀调试接口可以消除所有Ruby的好处。
另外:它是2008年。它们不是“脚本语言”。他们是编程语言。 ;)
答案 1 :(得分:8)
[免责声明:我主要是一名Perl程序员,可能会影响我的判断力。但是,我不是一个特别的部落,我认为在这个特殊问题上,我的观点是相当客观的。]
Perl旨在无缝融入Unix环境,这就是为什么它对于具有主要OO背景的人(特别是OOP的Java学校)感到如此陌生。因此,它在任何类型的Unixoid OS的机器上都得到了极大的广泛安装,并且其中编写了许多供应商系统实用程序。同样出于同样的原因,既没有安装Python也没有安装Ruby的服务器仍然可能有Perl,再次使得熟悉它很重要。因此,如果您的CEH活动包括在Unix上的大量活动,那么无论如何您都必须熟悉Perl,并且您可能也会专注于它。
尽管如此,这主要是一个偏好问题。区分语言并不多;他们的表现力实际上是相同的。有些东西在其中一种语言中更容易一些,有些在另一种语言中更容易。
就库而言,我不知道Ruby和Python如何相互比较 - 我知道Perl让它们超越了它们。然后,有时(特别是当您正在寻找满足常见需求的库时),唯一的影响就是您会被选择所淹没。如果你只想在某些特定区域做一些事情,这些领域被Python或Ruby的库很好地覆盖,那么CPAN上的其他东西的大量并不一定是优势。然而,在利基领域,这很重要,你永远不会知道你最终会有什么不可预见的需求(错误,根据定义)。
对于命令行中的单线程使用,Python是一种非首发。
就交互式解释器环境而言,Perl ......嗯......好吧,你可以使用调试器,这不是那么好,或者你可以从CPAN安装一个,但是Perl本身并没有提供好的调试器。
所以我认为Perl确实对你的需求有一个非常小的优势,但仅仅是。如果你选择Ruby,你可能根本不会变得更糟。 Python可能会给你带来更多的不便,但它也不是糟糕的选择。
答案 2 :(得分:4)
我可以为这三个人辩论: - )
Perl拥有所有CPAN - 为您提供快速整合功能的巨大优势。它还具有良好的灵活测试基础架构,这意味着您可以在同一框架中插入许多不同的自动测试样式(包括其他语言的测试)。
Ruby是一种值得学习的可爱语言 - 并且缺少Perl 5中的一些语言。如果你正在进行基于Web的测试,它还有watir库 - 这是非常有用的(参见http://wtr.rubyforge.org/)
Python - 很好的语言和(虽然这不符合我个人的偏好),一些人发现它的结构更容易掌握。
他们中的任何人(以及其他许多人)都是一门很好的语言。
而不是看语言 - 我会看你的工作环境。如果你有其他人在做类似的东西,那么学习东西总是比较容易。如果你当前的开发/测试人员已经集中在上面的一个 - 我会去那。如果没有,请选择对您当前的工作环境最适用/最有用的一个。与团队的其他成员聊天,看看他们的想法。
答案 3 :(得分:3)
这取决于实现,如果它将被分发,我将使用Java,因为你知道,因为它的可移植性。如果它只是供内部使用,或者将用于半控制环境,那么请选择最适合您的维护,以及最好的长期前景。
现在回答这个问题,我会选择Perl,但我是一个Linux家伙,所以我可能会有点偏见。
答案 4 :(得分:3)
如果您计划使用Metasploit进行笔测试和利用开发,我建议使用ruby,如前所述Metasploit是用ruby编写的,任何您可能希望做的漏洞/模块开发都需要ruby。
如果您将使用Immunity CANVAS进行笔测试,那么出于同样的原因我会推荐Python,因为CANVAS是用python编写的。另外,像Peach和Sulley这样的模糊测试框架也是用Python编写的。
我不推荐使用Perl,因为在Perl中你会发现与笔测试/模糊测试/漏洞/ ...相关的工具/脚本/框架很少。
正如您的问题是“工具编写和漏洞利用开发”,如果您选择Metasploit或python,如果您选择CANVAS,我会推荐Ruby。
希望有所帮助:)
答案 5 :(得分:2)
作为CEH,首先学习CEH材料。这将使您了解用于安装各种攻击的各种工具和平台。一旦你很好地理解了你的目标,就要研究已经可用的工具和平台的功能(前面提到的metasploit框架是非常彻底和健壮的)。如何扩展它们以满足您的需求?一旦你知道,你可以比较语言的功能。
我还建议您查看BackTrack发行版上提供的工具。
答案 6 :(得分:1)
所有这些都应该足够了。除非您需要一些只提供一种语言的图书馆,否则我会让个人偏好指导我。
答案 7 :(得分:1)
如果您正在寻找能够与Java良好协作的脚本语言,您可能需要查看Groovy。它具有Perl的灵活性和强大功能(闭包,内置正则表达式,每个角落都有关联数组),但您可以从中访问Java代码,因此您可以访问大量的库,特别是系统的其余部分。重新发展。
答案 8 :(得分:1)
metasploit是一个很好的渗透测试框架。它主要是用Ruby编写的,所以如果你很熟悉这种语言,也许你可以在那里搞定。但是,要使用 metasploit,您根本不需要知道任何语言。
答案 9 :(得分:1)
如果您对CEH感兴趣,我会看一下Grey Hat Python。它显示了一些非常有趣和相关的东西。
话虽如此,任何语言都应该没问题。
答案 10 :(得分:0)
那么,你在考虑什么样的漏洞?如果你想写一些需要低级东西(ptrace,原始套接字等)的东西,那么你需要学习C.但是可以使用Perl和Python。真正的问题是哪一个更适合你的风格?
至于工具制造,Perl具有良好的字符串处理能力,更接近系统,有很好的支持,但恕我直言,这是非常令人困惑的。我更喜欢Python:它是一个干净,易于使用,易于学习的语言,具有良好的支持(完整的语言/ lib参考,第三方库等)。它(严格恕我直言)很酷。
答案 11 :(得分:0)
我和tqbf在一起。我使用过Python和Ruby。目前我正在使用JRuby。它具有Ruby的所有功能,可以访问Java库,所以如果有一些东西你绝对需要一个低级语言来解决,你可以用高级语言来实现。到目前为止,我还不需要真正使用太多的Java,因为Ruby已经能够完成我作为API测试人员所需的一切。