PHP系统命令函数

来源:互联网 发布:阿里云免费虚机 编辑:程序博客网 时间:2024/05/21 12:00
<?php
//PHP调用cmd参数
//代码审计命令注入
////PHP执行系统命令可以使用的函数


$action=$_GET['cmd'];
echo "<pre>";
//查询ipconfig信息
/*system()
原型:string system (string command [, int return_var])
system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。
返回结果:
成功返回0,
失败(命令不存在等原因)   返回   非0值*/
//echo system($action);


//exec只能获取最后一行数据,shell_execu则可以获取全部数据。
//echo exec($action);


//passthru() 跟system差不多 输出结果
//passthru($action);


//也是获取系统信息 不会直接输出
//echo shell_exec($action);


//反引号也可以输出系统命令
//echo `$action`;




echo popen($action,'r');


//void pcntl_exec(string$path[,array$args [,array$envs]])


//popen  打开进程文件指针 r: 只读。w: 只写 (打开并清空已有文件或创建一个新文件) 和
//  proc_open()


//主进程文件,输出时间(子父进程会sleep的关系,所以可能不会和当前时间相同,差距 2s 以内)
$child_file = "child.php";


$descriptorspec = array(
    0 => array("pipe", "r"),  // 标准输入,子进程从此管道中读取数据
    1 => STDOUT,  // 标准输出,重定向子进程输入到主进程STDOUT
    2 => array("file", "error-output.txt", "a") // 标准错误,写入到一个文件
);
$child_process = proc_open("php {$child_file}", $descriptorspec, $pipes);
while(1){
    $time = date("Y-m-d h:i:s");
    fwrite($pipes[0], "main say {$time}\n");
    sleep(2);
}
proc_close($child_process);


//防御函数
//当用户提供的数据传入此函数,使用 escapeshellarg() 或 escapeshellcmd() 来确保用户欺骗 系统从而执行任意命
escapeshellarg($action);
//可以用到 php 的安全中,会过滤掉 arg 中存在的一些特殊字符。在输入的参数中如果包含中 文传递给 escapeshellarg,会被过滤掉。
escapeshellcmd($action);
//escapeshellcmd()函数会转义命令中的所有 shell 元字符来完成工作。这些元字符包括: #&;` , |*?~ <>^()[]{}$\\。


//这两个函数可以配合着shell_exec()的函数使用 用get传值的时候会把特殊符号给过滤掉 否则执行shell_exec()函数时用户用get
//传输过来的是特殊符号会被执行 这样可以防止注入
原创粉丝点击