php代码审计之命令注入(3)

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() 来防止用户欺骗系统从而执行任意命令。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值