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代码
Sep 14 PHP
360通用php防护代码(使用操作详解)
Jun 18 PHP
如何在php中正确的使用json
Aug 06 PHP
基于php的微信公众平台开发入门实例
Apr 15 PHP
微信access_token的获取开发示例
Apr 16 PHP
PHP页面转UTF-8中文编码乱码的解决办法
Oct 20 PHP
PHP中list方法用法示例
Dec 01 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
Apr 10 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
php无限级分类实现评论及回复功能
Feb 18 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
Oct 09 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
PHP调用三种数据库的方法(1)
2006/10/09 PHP
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
Javascript 函数中的参数使用分析
2010/03/27 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
创联软件面试题笔试题
2012/10/07 面试题
小车司机岗位职责
2013/11/25 职场文书
总账会计岗位职责
2014/03/13 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
法学自荐信
2014/06/20 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
2015年端午节活动方案
2015/05/05 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
Opencv中cv2.floodFill算法的使用
2021/06/18 Python