前言

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命令执行漏洞基础的更多相关文章

  1. 小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞

    手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘 ...

  2. 19.Imagetragick 命令执行漏洞(CVE-2016–3714)

    Imagetragick 命令执行漏洞(CVE-2016–3714) 漏洞简介: Imagetragick 命令执行漏洞在16年爆出来以后,wooyun上面也爆出了数个被该漏洞影响的大厂商,像腾讯, ...

  3. PHP的命令执行漏洞学习

    首先我们来了解基础 基础知识来源于:<web安全攻防>徐焱 命令执行漏洞 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.pas ...

  4. 文件包含上传漏洞&目录遍历命令执行漏洞

    文件上传漏洞: 一句话木马 一句话木马主要由两部分组成:执行函数与 接收被执行代码的变量 执行函数: eval() assert() create_function() array_map() arr ...

  5. FastJson远程命令执行漏洞学习笔记

    FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...

  6. Kali学习笔记30:身份认证与命令执行漏洞

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 实验环境: Kali机器:192.168.163.13 ...

  7. FlexPaper 2.3.6 远程命令执行漏洞 附Exp

    影响版本:小于FlexPaper 2.3.6的所有版本 FlexPaper (https://www.flowpaper.com) 是一个开源项目,遵循GPL协议,在互联网上非常流行.它为web客户端 ...

  8. WordPress <= 4.6 命令执行漏洞(PHPMailer)复现分析

    漏洞信息 WordPress 是一种使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站.也可以把 WordPress 当作一个内容管理系统(C ...

  9. Apache Tomcat远程命令执行漏洞(CVE-2017-12615) 漏洞利用到入侵检测

    本文作者:i春秋作家——Anythin9 1.漏洞简介 当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 fals ...

随机推荐

  1. Solr6.4.2异常:org.apache.solr.common.SolrException: Error opening new searcher

    版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明. 原文链接:https://www.cnblogs.com/chenghu/p/13840021.html Solr版本6.4.2 启动S ...

  2. node服务器基本搭建

    const http = require('http') // 引入http模块 http.createServer(function(req,res){ // 创建一个http服务器 // 这里是一 ...

  3. java 保留小数点后指定位数四种方法

    1 package com.itheima_01; 2 3 import java.math.BigDecimal; 4 import java.text.DecimalFormat; 5 impor ...

  4. 不可不知的资源管理调度器Hadoop Yarn

    Yarn(Yet Another Resource Negotiator)是一个资源调度平台,负责为运算程序如Spark.MapReduce分配资源和调度,不参与用户程序内部工作.同样是Master/ ...

  5. log4cplus库的properties文件配置

    使用时需要先获取一个Logger的对象,下面获取Logger对象的内容对应于配置: Logger LogConsole = Logger::getInstance(LOG4CPLUS_TEXT(&qu ...

  6. 初学 Python 需要安装哪些软件?

    自动配置.有效求助.协作编程.版本控制.一站式解决 Python 新手练习中的痛点. 痛点 这个学期,我在北得克萨斯大学(University of North Texas)教 INFO 5731: ...

  7. Vue基础语法(四)

    vue的生命周期钩子函数 所有的生命周期钩子自动绑定this到上下文实例中,因此可以访问数据对property和方法进行运算,这意味着不蹦使用箭头函数来定义一个生命周期方法.参考官方文档,生命周期图 ...

  8. 【应用服务 App Service】App Service证书导入,使用Key Vault中的证书

    问题描述 正常情况下,如果需要为应用服务安装SSL证书,可以在证书准备好的情况,通过门户上传即可,详细步骤可以参考微软官方文档(在 Azure 应用服务中添加 TLS/SSL 证书:https://d ...

  9. 浅析软件测试人员如何对JVM进行内存溢出检测

    一.什么是JVM,检测JVM的意义 JVM是java virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各 ...

  10. python构造函数和析构函数

    构造函数和析构函数 关注公众号"轻松学编程"了解更多. 1.构造方法的使用 ​ 很多类都倾向于将对象创建为有初始化状态.因此类可以定义一个名为__init__()的特殊方法(构造方 ...