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 相关文章推荐
文件上传的实现
Oct 09 PHP
PHP4实际应用经验篇(1)
Oct 09 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
Oct 13 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
php使用google地图应用实例
Dec 31 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
Mar 18 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
thinkPHP统计排行与分页显示功能示例
Dec 02 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
PHP fclose函数用法总结
Feb 15 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模板技术原理【一】
2008/01/10 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
ejs v9 javascript模板系统
2012/03/21 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
12月小学生校园广播稿
2014/02/04 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
校园环保标语
2014/06/13 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
革命电影观后感
2015/06/18 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
实习报告范文
2019/07/30 职场文书
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers