呼吁注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统可能应用指令(CMD呼吁可能 bash 呼吁)的一种注入进攻手段。
常见的执行系统呼吁的函数有
system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
system()函数
string system ( string $command [, int &$return_var ] )
$command为执行的呼吁,&return_var可选,用来存放呼吁执行后的状态码
system()函数执行有回显,将执行功效输出到页面上
<?php system("whoami");?>
passthru()函数
void passthru ( string $command [, int &$return_var ] )
和system函数雷同,$command为执行的呼吁,&return_var可选,用来存放呼吁执行后的状态码
执行有回显,将执行功效输出到页面上
<?php passthru("whoami");?>
exec()函数
string exec ( string $command [, array &$output [, int &$return_var ]] )
$command是要执行的呼吁
$output是得到执行呼吁输出的每一行字符串,$return_var用来生存呼吁执行的状态码(检测乐成或失败)
exec()函数执行无回显,默认返回最后一行功效
<?php echo exec("whoami");?>
<?php $test = "ipconfig"; exec($test,$array); print_r($array); ?>
shell_exec()函数
string shell_exec( string &command)
&command是要执行的呼吁
shell_exec()函数默认无回显,通过 echo 可将执行功效输出到页面
<?php echo shell_exec("whoami");?>
反引号 `
shell_exec() 函数实际上仅是反撇号 (`) 操纵符的变体,当禁用shell_exec时,` 也不行执行
在php中称之为执行运算符,PHP 将实验将反引号中的内容作为 shell 呼吁来执行,并将其输出信息返回
<?php echo `whoami`;?>
popen()函数
resource popen ( string $command , string $mode )
函数需要两个参数,一个是执行的呼吁command,别的一个是指针文件的毗连模式mode,有r和w代表读和写。
函数不会直接返回执行功效,而是返回一个文件指针,可是呼吁已经执行。
popen()打开一个指向历程的管道,该历程由派生给定的command呼吁执行而发生。
返回一个和fopen()所返回的沟通的文件指针,只不外它是单向的(只能用于读或写)而且必需用pclose()来封锁。
此指针可以用于fgets(),fgetss()和 fwrite()
<?php popen( 'whoami >> c:/1.txt', 'r' ); ?>
<?php $test = "ls /tmp/test"; $fp = popen($test,"r"); //popen打一个历程通道 while (!feof($fp)) { //从通道内里取得对象 $out = fgets($fp, 4096); echo $out; //打印出来 }pclose($fp);?>
proc_open()函数
resource proc_open (string $cmd ,array $descriptorspec ,array &$pipes [, string $cwd [, array $env [, array $other_options ]]])
与Popen函数雷同,可是可以提供双向管道
<?php $test = "ipconfig"; $array = array(array("pipe","r"), //尺度输入 array("pipe","w"), //尺度输出内容 array("pipe","w") //尺度输堕落误 ); $fp = proc_open($test,$array,$pipes); //打开一个历程通道 echo stream_get_contents($pipes[1]); //为什么是$pipes[1],因为1是输出内容 proc_close($fp); ?>
pcntl_exec()函数
void pcntl_exec ( string $path [, array $args [, array $envs ]] )
path是可执行二进制文件路径或一个在文件第一行指定了 一个可执行文件路径标头的剧本
args是一个要通报给措施的参数的字符串数组。
pcntl是linux下的一个扩展,需要特别安装,可以支持 php 的多线程操纵。
pcntl_exec函数的浸染是在当前历程空间执行指定措施,版本要求:PHP > 4.2.0
<?php pcntl_exec( "/bin/bash" , array("whoami")); ?>
对这些危险函数,可以在php.ini中禁用,举办安详加固
到此这篇关于PHP执行系统呼吁函数实例讲授的文章就先容到这了,更多相关PHP执行系统呼吁函数内容请搜索剧本之家以前的文章或继承欣赏下面的相关文章但愿各人今后多多支持剧本之家!
您大概感乐趣的文章: