[web安全原理]PHP命令执行漏洞基础
前言
PHP命令执行漏洞
应用程序的某些功能功能需要调用可以执行系统命令的函数,如果这些函数或者函数的参数被用户控制,就有可能通过命令连接符将恶意命令拼接到正常的函数中,从而随意执行系统命令,这就是命令执行漏洞。
基本函数
1.system()用于执行外部程序,并且显示输出
<?php system('whoami'); ?>
2.exec()函数用于执行一个外部程序
<?php exec('whoami');?>
3.shell_exec()函数通过shell环境执行命令,并且将完整的输出以字符串的方式返回
<?php shell_exec('whoami'); ?>
4.passthru函数用于执行外部程序并且显示原始输出
<?php passthru('whoami'); ?>
5.popen()函数用于打开进程文件指针
- r: 只读。
- w: 只写 (打开并清空已有文件或创建一个新文件)
<?php touch popen("3.txt","r"); ?> 在当前目录创建名为3.txt的文件
6.Proc_popen函数用于执行一个命令,并且打开来输入输出的文件指针(有问题)
proc_open (字符串 $cmd
,数组 $descriptorspec
,数组 &$pipes
[,字符串 $cwd
=NULL
[,数组 $env
=NULL
[,数组 $other_options
=NULL
]]])
<?php $proc=proc_open("whoami", array( array("pipe","r"), array("pipe","r"), array("pipe","r")),$pipes); print stream_get_contents($pipes[i]); ?>
7.反单引号
反单引号(`)是PHP执行运算符,PHP将尝试将返单引号中的内容作为shell命令来执行,并将其输出信息返回 执行下面代码返回whoami的结果
<?php echo `whoami`;?>
Windows下的命令执行漏洞
1.windows下面的命令连接符
windows下的命令连接符:&、&&、|、||
(1)&命令连接符
&前面的语句为假,则直接执行&后面的语句:&前面的语句为真,则&前后的语句都执行
(2)&&命令连接符
&&前面的语句为假,则直接报错,&&后面的语句也不执行;&&前面的语句为真,则&&前后的语句都执行
(3)|命令连接符
|前面的语句为假,则直接报错,|后面的语句也不执行;|前面的语句为真,则执行|后面的语句
(4)||命令连接符
||前面的语句为假,则执行||后面的语句;||前面的语句为真,则执行||前面的语句,不执行||后面的语句
2.windows下的执行命令漏洞利用
代码
<?php
$ip=$_GET['ip'];
system("ping ".$ip);
?>
代码中调用了system函数执行ping命令
$ip是可控参数,可以通过Windows下的命令连接符执行多条命令,达到攻击的目的。输入?=127.0.0.1|whoami,成功执行,返回当前用户的信息,当然我们也可以进行其他的恶意操作。
linux下的命令执行漏洞
1linux下的命令连接符
Linux下的命令连接符:&、&&、|、||
(1).;命令连接符
;使多个命令顺序执行,前面的命令和后面的命令都会执行
2.&命令连接符
&的作用是使命令在后台运行,这样就可以同时执行多条命令
3.&&命令连接符
&&的作用是:如果前面的命令执行成功,则执行后面的命令
4.|命令连接符
|的作用是:将前面的命令的输出作为后面命令的输入,前面的命令和后面的命令都会执行,但只显示后面的命令执行结果
5.||命令连接符
||的作用类似于程序中的if-else语句。若前面的命令执行成功,则后面的命令就不会执行;若前面的命令执行失败,则执行后面的命令。
漏洞利用部分和windows下面代码一样就是命令连接符部分不一样!!!!
命令执行绕过方法
命令执行绕过
开发人员在开发过程中,为了避免命令执行漏洞,可能会过滤一些命令或者比较常见的攻击payload。攻击者会通过多种方式绕过过滤规则。
(1) 绕过空格过滤
1.${IFS}绕过
$IFS是shell的特殊环境变量,是Linux下的内部区域分隔符。$IFS中存储的值可以使空格、制表符、换行符或者其他自定义符号。
Payload: http://127.0.0.1/test.php?ip=127.0.0.1;ls${IFS}-l
2.$IFS$9绕过
Payload: http://127.0.0.1/test.php?ip=127.0.0.1;ls$IFS$9-l
3.制表符绕过
%09是制表符的URL编码,可以通过%09来代替空格,绕过空格过滤
Payload: http://127.0.0.1/test.php?cmd=ping%09127.0.0.1
4.{ }绕过
5.<绕过
(2) 绕过关键字过滤
1. 变量拼接绕过
Linux支持变量赋值,可以通过变量拼接来绕过过滤规则
绕过ls命令
2. 空变量绕过
3. 系统变量绕过
${SHELLOPTS}是系统变量,可以利用系统变量的字符拼接绕过过滤
4. \绕过
5. 通配符绕过
Linux支持利用通配符进行字符匹配。通配符的作用是在模糊查询时表示文件名中某些不确定的字符
*代表0到多个任意字符
?代表任意一个字符
[]内为字符范围,代表该字符范围中的任意一个字符
6. shell反弹绕过
在利用shell反弹进行攻击时,如果存在过滤,可以通过通配符来绕过过滤
7. BASE64编码绕过
利用系统函数base64对命令进行Base64编码,以绕过过滤。例如,id命令的Base编码为aWQ=,在利用base64 -d对aWQ=进行解码,这样就绕过了过滤,并且正常执行了命令
8. expr和awk绕过
通过expr和awk命令从其他文件中获取字符并进行命令构造
xiaohua文件内容为字符串xiaohua,通过以下命令可以获取xiaohua文件中存储的第一个字符。
9. 无回显的命令执行
如果存在命令执行漏洞,但是没有回显,可以通过shell反弹的方式将shell反弹到VPS上,然后通过VPS执行命令。如果无法反弹shell,也可以通过DNS管道解析的方式获取命令的执行结果。
PHP命令执行漏洞的修复
1.服务器配置修复
可以通过PHP配置文件中的disable_functions禁用敏感函数来修复命令执行漏洞
2.函数过滤
(1)escapeshellarg()函数:把字符串转码为可以在shell命令里使用的参数,以过滤命令中的参数。
(2) escapeshellcmd()函数:可以对shell元字符进行转义,过滤命令
其他学习文章
https://www.freebuf.com/articles/web/137923.html
参考学习:《web安全原理分析与实践》
[web安全原理]PHP命令执行漏洞基础的更多相关文章
- 小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞
手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘 ...
- 19.Imagetragick 命令执行漏洞(CVE-2016–3714)
Imagetragick 命令执行漏洞(CVE-2016–3714) 漏洞简介: Imagetragick 命令执行漏洞在16年爆出来以后,wooyun上面也爆出了数个被该漏洞影响的大厂商,像腾讯, ...
- PHP的命令执行漏洞学习
首先我们来了解基础 基础知识来源于:<web安全攻防>徐焱 命令执行漏洞 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.pas ...
- 文件包含上传漏洞&目录遍历命令执行漏洞
文件上传漏洞: 一句话木马 一句话木马主要由两部分组成:执行函数与 接收被执行代码的变量 执行函数: eval() assert() create_function() array_map() arr ...
- FastJson远程命令执行漏洞学习笔记
FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...
- Kali学习笔记30:身份认证与命令执行漏洞
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 实验环境: Kali机器:192.168.163.13 ...
- FlexPaper 2.3.6 远程命令执行漏洞 附Exp
影响版本:小于FlexPaper 2.3.6的所有版本 FlexPaper (https://www.flowpaper.com) 是一个开源项目,遵循GPL协议,在互联网上非常流行.它为web客户端 ...
- WordPress <= 4.6 命令执行漏洞(PHPMailer)复现分析
漏洞信息 WordPress 是一种使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站.也可以把 WordPress 当作一个内容管理系统(C ...
- Apache Tomcat远程命令执行漏洞(CVE-2017-12615) 漏洞利用到入侵检测
本文作者:i春秋作家——Anythin9 1.漏洞简介 当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 fals ...
随机推荐
- 第十二章 配置vlan
一.vlan技术简介 1.广播风暴 广播风暴(broadcast storm)简单的讲是指当广播数据充斥网络无法处理,并占用大量网络带宽,导致正常业务不能运行,甚至彻底瘫痪,这就发生了"广播 ...
- mysql explain 查询处理的结果详解
本文转自 https://blog.csdn.net/boss_way/article/details/91416887 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这 ...
- C++学习笔记---指针
1.基本概念 作用:可以通过指针直接访问内存 内存编号是从0开始记录的,一般用16进制数字表示 可以利用指针变量保存地址 2.定义和使用 定义指针 他们的关系就是这样的 运行输出 使用指针 运行输出会 ...
- CSS实现鼠标移入弹出下拉框
前言 最近比较沉迷CSS,所以我现在来做个鼠标的交互效果 HTML <ul> <li>测试</li> <li>测试</li> <li ...
- 联赛模拟测试22 D. 简单计算
题目描述 分析 \(\sum_{i=0}^p[(p|qi)?0:1]=\sum_{i=0}^p[(p/gcd(p,q)|qi/gcd(p,q))?0:1]=\sum_{i=0}^p[(p/gcd(p, ...
- HBase基础知识摘要
HBASE 列式存储,设计思想参考BigTable 文档:http://hbase.apache.org/book.html hive适合数据分析,离线任务 hbase大数据实时查询 避免显式锁,提供 ...
- robotframework执行UI自动化时不能运行谷歌浏览器的问题
robotframework执行UI自动化时报错,查看日志显示Parent suite setup failed: Variable '${browser}' not found. Did you m ...
- http接口和web service接口测试区别是什么?
1.web service有一套完整的协议标准,其中有soap协议,用来进行消息的传递. 2.soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式 Content-type设置 ...
- 01 . Go之Gin+Vue开发一个线上外卖应用
项目介绍 我们将开始使用Gin框架开发一个api项目,我们起名为:云餐厅.如同饿了么,美团外卖等生活服务类应用一样,云餐厅是一个线上的外卖应用,应用的用户可以在线浏览商家,商品并下单. 该项目分为客户 ...
- DTU连接不稳定有什么办法
DTU是一种物联网的终端设备,在工业信息化的不断推进的大背景下,DTU的市场需求也越来越大,本身具有网络覆盖范围广.资费低.数据传输准确及时等众多优点.但在使用的过程中DTU会出现很多问题,比如DTU ...