• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP执行系统命令函数实例讲解
    POST TIME:2021-10-18 03:31

    命令注入

    命令注入(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,有rw代表读和写。

    函数不会直接返回执行结果,而是返回一个文件指针,但是命令已经执行。

    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是一个要传递给程序的参数的字符串数组。

    pcntllinux下的一个扩展,需要额外安装,可以支持 php 的多线程操作。

    pcntl_exec函数的作用是在当前进程空间执行指定程序,版本要求:PHP > 4.2.0

    ?php
    pcntl_exec( "/bin/bash" , array("whoami"));
    ?>

    对这些危险函数,可以在php.ini中禁用,进行安全加固

    到此这篇关于PHP执行系统命令函数实例讲解的文章就介绍到这了,更多相关PHP执行系统命令函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • PHP的命令行扩展Readline相关函数的使用
    • PHP中垃圾回收相关函数的使用
    • PHP中断言函数的使用详解
    • 详解各种PHP函数漏洞
    • PHP危险函数禁用深入详解
    • PHP的imageTtfText()函数深入详解
    • PHP之header函数详解
    • php中sort函数排序知识点总结
    • php中rsort函数实例用法
    • 浅谈定义一个PHP函数
    上一篇:Git命令之分支详解
    下一篇:PHP实现爬虫爬取图片代码实例
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信