时间:2021-05-26
命令注入
命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者 bash 命令)的一种注入攻击手段。
常见的执行系统命令的函数有
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
<?phppcntl_exec( "/bin/bash" , array("whoami"));?>对这些危险函数,可以在php.ini中禁用,进行安全加固
到此这篇关于PHP执行系统命令函数实例讲解的文章就介绍到这了,更多相关PHP执行系统命令函数内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言做一个代码发布的系统,需要用到PHP的exec函数来执行Linux下的命令和git,svn命令,如何判断PHP的exec函数是否执行成功呢?解决方案写个PH
本文实例讲述了php通过执行CutyCapt命令实现网页截图的方法。分享给大家供大家参考,具体如下:用php使用exec执行命令PS.默认情况下exec函数是禁
本文实例讲述了php中执行系统命令的方法。分享给大家供大家参考。具体分析如下:在php中执行系统命令,如LS希望本文所述对大家的php程序设计有所帮助。
本文实例讲述了php外部执行命令函数用法。分享给大家供大家参考,具体如下:首先先要自我检讨一下的,学习和使用php已经前前后后一年多了,研究和使用Linux系统
php的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数。在很多时候利用php的