命令注入

命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者 bash 命令)的一种注入攻击手段。

常见的执行系统命令的函数有

system()

passthru()

exec()

shell_exec()

popen()

proc_open()

pcntl_exec()

system()函数

string system ( string $command [, int &$return_var ] )

$command为执行的命令,&return_var可选,用来存放命令执行后的状态码

system()函数执行有回显,将执行结果输出到页面上

passthru()函数

void passthru ( string $command [, int &$return_var ] )

和system函数类似,$command为执行的命令,&return_var可选,用来存放命令执行后的状态码

执行有回显,将执行结果输出到页面上

exec()函数

string exec ( string $command [, array &$output [, int &$return_var ]] )

$command是要执行的命令

$output是获得执行命令输出的每一行字符串,$return_var用来保存命令执行的状态码(检测成功或失败)

exec()函数执行无回显,默认返回最后一行结果

$test = "ipconfig";

exec($test,$array);

print_r($array);

?>

shell_exec()函数

string shell_exec( string &command)

&command是要执行的命令

shell_exec()函数默认无回显,通过 echo 可将执行结果输出到页面

反引号 `

shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体,当禁用shell_exec时,` 也不可执行

在php中称之为执行运算符,PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回

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' ); ?>

$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函数类似,但是可以提供双向管道

$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

pcntl_exec( "/bin/bash" , array("whoami"));

?>

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

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

php脚本函数,PHP执行系统命令函数实例讲解相关推荐

  1. Python 函数的执行流程-函数递归-匿名函数-生成器

    1 函数的执行流程 函数的执行需要对函数进行压栈的,什么是压栈呢,简而言之就是在函数执行时在栈中创建栈帧存放需要变量以及指针的意思.具体涉及的知识非常多,这里就已一个Python脚本简单进行分析. 当 ...

  2. php 执行系统命令函数

    目录 命令注入 system()函数 passthru()函数 exec() shell_exec()函数 反引号 ` popen()函数 pcntl_exec()函数 命令注入 命令注入(Comma ...

  3. PHP执行系统命令函数

    命令注入 命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者 bash 命令)的一种注入攻击手段. 常见的执行系统命令 ...

  4. js执行oracle函数吗,执行javascript函数

    JS--函数 JavaScript 函数语法 函数就是包裹在花括号中的代码块,前面使用了关键词 function: function 函数名([参数]){ 执行的代码: } 当调用该函数时,会执行函数 ...

  5. timertask run函数未执行_函数的防抖和节流是个啥???

    内容来源:SegmentFault社区 作者:nero 整理编辑:SegmentFault 曾经面试时候被问到过这个,年少的我一脸无知... 后来工作中遇到了一个场景:输入名称的同时去服务器校验名称是 ...

  6. python脚本编辑器 v2ex_python3 模拟登录v2ex实例讲解

    闲的无聊... 网上一堆,正好练手(主要是新手) # coding=utf-8 import requests from bs4 import BeautifulSoup headers = { 'u ...

  7. java sql函数_Java调用Sql存储过程实例讲解

    1.使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转 义序列.不带参数的 call 转义序列的语法如下所示: {call procedure-n ...

  8. shell 脚本中获取执行系统命令的输出结果

    这个主要介绍的方法是获取命令的输出内容,而不是命令执行成功与否的返回值. 通常情况下,在shell脚本中需要获取命令的输出内容,然后根据输出内容判断下一步的执行操作. 比较常用的一种方式就是, 匹配命 ...

  9. 在main函数前后执行的函数之 C语言

    在gcc中,可以使用attribute关键字,声明constructor和destructor,来指定了函数在main之前或之后运行,代码如下: 1 #include <stdio.h> ...

最新文章

  1. java类安卓app 简介_android.app.Activity 的介绍
  2. cm 怎么限制hue数据下载_0724-6.2.0-CM接管rpm方式安装的无CM的CDH集群-2
  3. Chrome 提标 您的浏览器限制了第三方Cookie...解决方法
  4. webmin远程命令执行漏洞(cve-2019-15107)深入分析
  5. Imageloader8-压缩图片
  6. Data Lake Analytics的Geospatial分析函数
  7. 如何使用 Istio 进行多集群部署管理:多控制平面
  8. 关于寻路算法的一些思考(5):处理移动中的障碍物
  9. php面试题2018
  10. clickhouse mysql引擎_ClickHouse为啥能做到变态快,超 MySQL 801倍?
  11. Ubuntu 14.04安装Python3
  12. iphoneX 订单生成器 - 装 b 神器 - 生成虚拟 iphoneX 订单,满足你装 b 的愿望
  13. 如何在快手批量下载高清无水印视频方法
  14. 一个手机用c网可以打开网站切换到g网就打不开_推荐一些设计师常用网站!!!...
  15. 在LaTeX中添加Visio绘图
  16. 线性代数:03 向量空间 -- 向量空间的基与维数,坐标,过渡矩阵
  17. BMS锂电池管理系统如何增加蓝牙模块芯片
  18. 获取路由器内的ADSL上网账号和密码或者获取电脑内的ADSL上网账号和密码教程 by 星空武哥
  19. 使用HoloLens 2调用深度相机和前置摄像头
  20. 【利用树莓派制作无线打印服务器】

热门文章

  1. 张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质!
  2. 操作系统学习:Linux0.12初始化详细流程-首个子进程
  3. 正则表达式re模块使用介绍
  4. 使用PyTorch进行情侣幸福度测试指南
  5. ★移动机器人 激光 构建地图 定位
  6. 多媒体指令(灰度像素最大值)
  7. 实战centos6安装zabbix-2.4版(终极版)
  8. 找不到完美数据科学家?你还可以组建一支数据科学梦之队
  9. Ubuntu 64bit 安装 ulipad4.1
  10. Oracle高效分页存储过程实例