PHP执行系统命令函数实例讲解


Posted in PHP onMarch 03, 2021

命令注入

命令注入(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()函数执行无回显,默认返回最后一行结果

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,有rw代表读和写。

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

popen()打开一个指向进程的管道,该进程由派生给定的command命令执行而产生。

返回一个和fopen()所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用pclose()来关闭。

此指针可以用于fgets()fgetss()和 fwrite()

> c:/1.txt', 'r' ); ?>

proc_open()函数

resource proc_open (string $cmd ,array $descriptorspec ,array &$pipes [, string $cwd [, array $env [, array $other_options ]]])

与Popen函数类似,但是可以提供双向管道

pcntl_exec()函数

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

path是可执行二进制文件路径或一个在文件第一行指定了 一个可执行文件路径标头的脚本
args是一个要传递给程序的参数的字符串数组。

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

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

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

PHP执行系统命令函数实例讲解

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

PHP 相关文章推荐
PHP新手上路(七)
Oct 09 PHP
cmd下运行php脚本
Nov 25 PHP
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
php中计算程序运行时间的类代码
Nov 03 PHP
基于PHP5魔术常量与魔术方法的详解
Jun 13 PHP
php模板原理讲解
Nov 13 PHP
PHP中strlen()和mb_strlen()的区别浅析
Jun 19 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
Mar 05 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
thinkphp5实现无限级分类
Feb 18 PHP
Git命令之分支详解
Mar 02 #PHP
PHP之header函数详解
Mar 02 #PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 #PHP
php中array_fill函数的实例用法
Mar 02 #PHP
PHP网站常见安全漏洞,及相应防范措施总结
Mar 01 #PHP
php框架知识点的整理和补充
Mar 01 #PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 #PHP
You might like
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
关于php中一些字符串总结
2016/05/05 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
PHP7变量处理机制修改
2021/03/09 PHP
js 提交和设置表单的值
2008/12/19 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
详解jquery uploadify 上传文件
2013/11/09 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
Python实现求数列和的方法示例
2018/01/12 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
Django学习之文件上传与下载
2019/10/06 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
幼儿园教师教学反思
2014/02/06 职场文书
运动会宣传口号
2014/06/09 职场文书
电子专业求职信
2014/06/19 职场文书
最新离婚协议书范本
2014/08/19 职场文书
教师师德工作总结2015
2015/07/22 职场文书
汽车销售员工作总结
2015/08/12 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书