【问题标题】:Penetration testing with Perl non-object-orientedPerl 非面向对象的渗透测试
【发布时间】:2015-07-12 20:46:47
【问题描述】:

这是我第一次在论坛上写文章。通常只需阅读就足以找到我正在寻找的东西。

我对 Perl 有很好的基础,我想用它进行渗透测试。我的问题是,我发现的每一个教程或书籍都适用于面向对象的 LWP,坦率地说,我讨厌面向对象的编程(它对我来说没有函数式编程那么有意义)。如果有任何 CPAN 模块可以在没有 OOP 的情况下进行“Web 编程”,Google 很害羞地告诉我。

尽管工作量很大,但我想编写一个类似 LWP 的模块,但使用函数式编程而不是 OOP。

我的主要问题是我从哪里开始?我发现很少使用不使用 LWP 或某些非核心 Perl 模块的 Perl 进行套接字编程。我使用 CPAN 的次数越少,我就越高兴。

我知道这有点像重新发明轮子,但我想这样做主要是为了好玩,有时这是最好的学习方式。

【问题讨论】:

  • socket() 是你的朋友吗? perldoc.perl.org/…你指的是哪个非核心模块?
  • 我认为你刚刚给我的链接正是我所需要的。奇怪的是,它从来没有出现在我的 Google 搜索中。无论如何,谢谢!

标签: perl sockets penetration-testing


【解决方案1】:

我强烈建议您学习 Perl 处理面向对象编程的方式。我相信它是迄今为止对 OOP 最好的介绍,因为它什么都没有隐藏,并且所有的机制都暴露出来了。一个类是一个包,一个方法是一个子程序,而你的构造函数只是另一个方法

如果您正在编写小型实用程序,您可能不需要自己创建 Perl 类,但是一旦您想使用其他人的库,您可能会发现自己需要知道如何使用 OO Perl

LWP 可能是更复杂的库之一,因为它有许多不同的类,但请记住 the documentation 必须完整地描述功能,至少在最初,您不会使用大部分可用

要获取一个简单的网页,您只需创建一个LWP::UserAgent 对象并将其用于get 您感兴趣的网址

use LWP;

my $ua = LWP::UserAgent->new;
my $res = $ua->get('http://www.example.com/');

您现在有一个HTTP::Response 对象$res,您可以阅读documentation for that class 以查看它支持哪些方法,例如检查状态和检索HTTP 标头和消息正文

这就是简单的 LWP 编程的全部内容,但如果您需要,还有许多选项可用于处理更复杂的情况

最后,值得指出的是,已经有一个名为LWP::Simple 的功能性HTTP 模块。如果你想要非常基本的功能,那么你可以只写

use LWP::Simple;

my $body = get('http://www.example.com/');

并且您已检索到一个网页。当然,这不允许您检查 HTTP 事务的状态和响应消息中的标头,因此如果您需要该功能或更多功能,则需要使用标准 LWP 接口

【讨论】:

  • 谢谢鲍罗丁。我相信 perl 的 opp 对我隐藏了太多的基础。我的意思是即使我可以很容易地获取网页、制作用户代理等,我仍然不知道它们是如何工作的。老实说,如果我有时间,我很乐意学习 C。我是一名焊工,工作 6/7,轮班 12 小时。我想“重写 LWP”,这样我就可以了解事情是如何工作的,不一定是因为我不喜欢 LWP。没错,oop 对我没有吸引力,但同样,它更适合学习过程。我希望我清楚地解释了自己。 (我是法国人哈哈)再次感谢您的所有回复!
  • 你的英文很清楚,谢谢。 LWP 反过来又依赖 IO::Socket::INET 来提供到 Internet 域套接字的 OOP 接口,您应该在那里寻求有关如何实现功能模块的帮助。但是你有一项艰巨的任务摆在你面前,因为实现几乎依赖于黑盒,它们基​​于以下级别的 API 提供更高级别的“原语”
  • 如果只是做很多工作,那还不算太糟糕,也许我应该在大约 7 个月前补充一点,我什至不知道 linux 到底是什么......它更像是一个无限的山正在尝试攀登;)无论如何,非常感谢您的帮助。我会尝试发布一些代码,如果我最终得到一些像样的东西。
【解决方案2】:

socketbindlistenaccept 将是您正在寻找实现服务器端功能的最基本功能; socketconnect 是客户端。

perldoc perlipc 中的 Sockets: Client/Server Communication 部分应该提供进一步的建议。那里提到的函数直接映射到相应的系统调用。比你想不到的更底层(也更痛苦)。

作为一个极度复杂和臃肿的 OOP 的强烈反对者,我想给您一些建议,让您看看在 Perl 中完成 OOP 的方式。也许你会和我一样深深地爱上它。

只不过是blessed 自己散列。不愿意使用任何 Perl 对象或多或少等同于根本不愿意使用任何哈希值。

【讨论】:

  • 谢谢米基拉。我在 www.perl.org 浏览了开始 Perl 的 oop 章节,我认为我确实了解它的基本原理。出于某种原因,oop 对我来说似乎不是结构化的,我不知道它与其他语言的关系如何,因为到目前为止我只知道 Perl 和 bash。我喜欢 Perl 并且想编写对我有用的程序,因为我也在慢慢地尝试进入我认为我可以同时加入的渗透测试世界。现在,如果真的在函数式编程中编写类似 LWP 的模块不如 oop 效率高,也许我应该尝试了解更多。
猜你喜欢
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多