文章目录
system()命令:
string system ( string $command [, int &$return_var ] )
system执行外部程序(命令行),并且显示输出
这个函数会将结果直接进行输出,命令成功后返回输出的最后一行,失败
返回FALSE
system.php源码如下:
<?php
$action = $_GET['cmd'];
echo "<pre>";
system($action);
echo "<pre/>"
?>
运行结果:
exec():
exec()函数执行一个外部程序,返回命令执行结果的最后一行内容。不显示回显。如果想要获取命令的输出内容,使用 output 参数,或者利用这个函数来构建反弹shell
string exec ( string $command [, array &$output [, int &$return_var ]] );
$command
:表示要执行的命令。
$output
:如果提供了 output 参数, 那么会用命令执行的输出填充此数组, 每行输出填充数组中的一个元素。
exec.php源码如下:
<?php
$action = $_GET['cmd'];
echo "<pre>";
echo exec($action);
echo "<pre/>"
?>
passthru():
void passthru (string command, int &return_var)
passthru 执行外部程序并且显示原始输出。
passthru.php源码如下:
<?php
$action = $_GET['cmd'];
echo "<pre>";
echo passthru($action);
echo "<pre/>"
?>
反引号:
`命令`
<?php
$action = $_GET['cmd'];
echo "<pre>";
echo `$action`;
echo "<pre/>"
?>
注意这里的是反引号
shell_exec:
string shell_exec (string command)
shell_exec 通过 shell 环境执行命令 ( 这就意味着这个方法只能在 linux 或 mac os的shell环境中运行 ),并且将完整的输出以字
符串的方式返回。如果执行过程中发生错误或者进程不产生输出,则返回 NULL。
shell_exec.php源码
<?php
$action = $_GET['cmd'];
echo "<pre>";
echo shell_exec($action);
echo "<pre/>"
?>
popen:
resource popen ( string $command , string $mode )
<?php
$action = $_GET['cmd'];
echo "<pre>";
echo popen($action,'r');
echo "<pre/>"
?>
如果成功返回一个值源,根据这个判断命令是否执行了
proc_open:
不能在Windows下使用
resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array
$env [, array $other_options ]]] )
pcntl_exec:
在当前进程空间执行指定程序,pcntl是Linux下的一个扩展,无法在Windows下使用
void pcntl_exec ( string $path [, array $args [, array $envs ]] )
escapeshellarg():
escapeshellarg ( string $arg )
可以用到 php 的安全中,会过滤掉 arg 中存在的一些特殊字符。在输入的参数中如果包含中文传递给 escapeshellarg,会被过滤掉。
escapeshellcmd():
escapeshellcmd ( string $command )
escapeshellcmd()函数会转义命令中的所有 shell 元字符来完成工作。这些元字符包括:
# & ; ` ,
| * ? ~ < > ^ ( ) [ ] { } $ \\
源码如下时
<?php
$action = $_GET['cmd'];
echo "<pre>";
echo shell_exec(escapeshellcmd($action));
echo "<pre/>"
?>
并没有创建1.txt文件
当没有escapeshellcmd()函数时
源码如下
<?php
$action = $_GET['cmd'];
echo "<pre>";
echo shell_exec($action);
echo "<pre/>"
?>
创建了1.txt
- 当用户提供的数据传入此函数,使用 escapeshellarg() 或 escapeshellcmd() 来防止用户欺骗系统从而执行任意命令。