PHP执⾏系统命令函数实例讲解
命令注⼊
命令注⼊(Command Injection),对⼀些函数的参数没有做过滤或过滤不严导致的,可以执⾏系统或者应⽤指令(CMD命令或者bash命令)的⼀种注⼊攻击⼿段。
常见的执⾏系统命令的函数有
system()
php支持多线程吗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执⾏系统命令函数内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。