register_argc_argv配置

什么是register_argc_argv?

register_argc_argv配置项打开(on)时,系统会自动将命令行输入的参数信息存入 $argc$argv$_SERVER['argv'] 这几个变量中,无需手动处理。(仅限命令行模式(CLI))

例如,执行 php script.php user1 123 这样的命令时:

$argc 会自动得到值 3(表示总共有 3 个参数:脚本名本身 + 两个输入参数)

$argv 会自动成为数组 ['script.php', 'user1', '123']

$_SERVER['argv'] 会和 $argv 完全相同

简单来说这个配置项的作用就是自动解析命令行参数并赋值给特定变量,让开发者可以直接在脚本中使用这些变量来获取参数信息,无需编写额外的参数解析代码,同时也使得用户在输入时无需考虑底层代码解析,可以更专注于自身代码逻辑。

register_argc_argv的开启

(1)在命令行模式下,register_argc_argv会开启,因为命令行脚本通常需要处理参数,默认开启可简化开发。(2)但在web服务器模式下是关闭的,因为web服务器是通过$_GET/$_POST 等变量处理 HTTP 参数,无需命令行参数机制

Docker环境下的PHP会开启register_argc_argv这个配置。(1)

web服务器下利用register_argc_argv

根据RFC3875的规定,如果query-string中不包含没有编码的=,且请求是GET或HEAD,则query-string需要被作为命令行参数。也就是说,可以通过特殊的方式实现在web服务器下使用http协议传递命令行参数,换句话说就是我们可以通过GET传参使用系统命令(可以调用pear命令)

注:

query-string 是 URL 中 ? 后面的部分,例如:

(1)在 URL http://example.com/search?keyword=php&page=1 中,keyword=php&page=1 就是 query-string。

(2)它通常由一组 键=值 对组成,不同键值对之间用 & 分隔(如 key1=val1&key2=val2)。

pearcmd.php

什么是pearcmd.cmd?

PEAR是是 PHP 的扩展与应用库仓库(PHP Extension and Application Repository),提供了大量可复用的 PHP 库和工具,方便开发者安装和管理第三方 PHP 资源。而 pearcmd.php 是 pear 工具的核心执行文件,是具体实现 pear 功能的脚本。当用户在命令行中使用 pear 命令(如安装、更新扩展)时,实际上是通过调用 pearcmd.php 来完成相关操作的。(PEAR的使用前提register_argc_argv必须开启)

pear中可以利用的参数

config-create 是 PEAR 工具的一个合法命令,用途是根据一个 “模板文件” 生成 PEAR 的配置文件

语法为:pear config-create <模板路径> <目标文件路径>

其中:

模板路径:指一个已存在的文件路径,PEAR 会读取该文件的内容作为配置模板(通常是 PEAR 的默认配置模板)。

目标文件路径:指生成的新配置文件的保存路径。

pearcmd.php的利用

说明:

由前两个模块可以知道,我们可以轻易的使用一些特殊的构造方法通过GET传参来调用系统命令,即pear命令,进而写入文件。(PEAR依赖register_argc_argv的开启)

接下来,我将以[NewStarCTF 公开赛赛道]IncludeTwo为例,讲解pearcmd.php的利用

例题:

paylaod:

?+config-create+/&file=/usr/local/lib/php/pearcmd&/<?=@eval($_POST['cmd']);?>+/tmp/shell.php

代码解释:

  • +config-create+

    这是 PEAR 的一个合法命令 config-create,用于创建 PEAR 的配置文件,语法通常为 config-create <模板路径> <目标文件路径>

    这里用 + 替代空格(URL 编码中,+ 常表示空格),模拟命令行中的空格分隔参数。
  • /

    作为 config-create 命令的第一个参数(模板路径),此处为根目录(无实际意义,仅为占位)。
  • &file=/usr/local/lib/php/pearcmd.php

    这是构造的一个参数,尝试指定 pearcmd.php 的路径(可能用于让服务器定位该脚本)。& 是 URL 中分隔参数的符号。
  • /<?=phpinfo()?>+

    这是核心恶意部分:

    • <?=phpinfo()?> 是 PHP 短标签语法,用于执行 phpinfo() 函数(输出服务器 PHP 配置信息,属于敏感信息)。
    • 这里将其作为 config-create 命令的输入内容,试图将这段 PHP 代码写入目标文件。
  • /tmp/hello.php

    这是攻击者指定的目标文件路径,即希望将恶意代码写入 /tmp/hello.php 文件。

(1)先抓包在添加payload

(2)写入文件成功,访问文件,POST传参寻找flag

注意:

先抓包再添加paylaod的原因:在搜索框传参PHP代码时,php代码的符号会被url编码,服务器收到的是编码,不会把它看作代码解析。

所以需要通过传参上传php代码时,使用抓包程序进行上传,防止被编码。

借鉴p神的文章:https://tttang.com/archive/1312/#toc_0x06-pearcmdphp

关于pearcmd的探索与利用的更多相关文章

  1. 搜索广告与广告网络Demand技术-探索与利用

    探索与利用(Explore and exploit) 点击率预测中还有一个重要的问题,就是探索与利用,它在工程中解决的并不好,我这章把现在论文中的常见的几种方法介绍一下.探索与利用它是所有互联网应用都 ...

  2. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  3. 【强化学习】1-1-2 “探索”(Exploration)还是“ 利用”(Exploitation)都要“面向目标”(Goal-Direct)

    title: [强化学习]1-1-2 "探索"(Exploration)还是" 利用"(Exploitation)都要"面向目标"(Goal ...

  4. 简单4步,利用Prometheus Operator实现自定义指标监控

    本文来自Rancher Labs 在过去的文章中,我们花了相当大的篇幅来聊关于监控的话题.这是因为当你正在管理Kubernetes集群时,一切都会以极快的速度发生变化.因此有一个工具来监控集群的健康状 ...

  5. Three.js + HTML5 Audio API 打造3D音乐频谱,Let’s ROCK!

    继续玩味之前写的音乐频谱作品,将原来在Canvas标签上的 作图利用Three.js让它通过WebGL呈现,这样就打造出了一个全立体感的频谱效果了. 项目详情及源码 项目GitHub地址:https: ...

  6. Method Swizzling和AOP(面向切面编程)实践

    Method Swizzling和AOP(面向切面编程)实践 参考: http://www.cocoachina.com/ios/20150120/10959.html 上一篇介绍了 Objectiv ...

  7. 【译】使用UIKit进行面向对象的编程

    在WWDC 2015上,Apple谈了Swift中面向协议编程的话题,令人深思.在那之后,好像每个人都在讨论关于协议扩展的话题,这个新的语言特性使每个人都有所困惑. 我阅读了许多关于Swift中协议的 ...

  8. 唐巧的iOS技术博客选摘

    1. 那些被遗漏的objective-c保留字:http://blog.devtang.com/blog/2013/04/29/the-missing-objc-keywords/   2. 使用cr ...

  9. 全球著名的渗透测试Linux简介

    注:如发现链接无法打开,请尝试代理登录链接 1. Kali Linux Kali Linux是基于Debian的Linux发行版, 设计用于数字取证和渗透测试.由Offensive Security ...

  10. 增强学习————K-摇臂赌博机

    探索与利用增强学习任务的最终奖赏是在多步动作之后才能观察到,于是我们先考虑最简单的情形:最大化单步奖赏,即仅考虑一步操作.不过,就算这样,强化学习仍与监督学习有显著不同,因为机器要通过尝试来发现各个动 ...

随机推荐

  1. 【HUST】网安|编译原理|期末复习概念梳理笔记

    纯自用,仅概念无题型,配合课本<编译原理 第4版>(ISBN: 978-7-121-31930-3)理解. 参考文献:刘铭. 编译原理 第4版. 北京:电子工业出版社, 2018.06. ...

  2. 信息资源管理文字题之“IT服务管理的核心流程和具体内容”

    一.为了充分利用ERP信息系统资源,LX集团采用了各种先进的信息系统管理概念和方法,包括IT服务管理. 要求:说明IT服务管理流程包括那两大核心类别,分别说明他们个包含哪些具体流程 二.答案 答:两大 ...

  3. 操作系统综合题之“采用记录型信号量机制实现进程INPUT、PROCESS和OUTPUT的同步算法(代码补充)”

    1.问题:系统中有有三个进程INPUT.PROCESS和OUTPUT,共用两个缓冲区BUF1和BUF2.假期设BUF1中最多可放10个数据,现已放入了2个数据:BUF2最多可放5个数据.INPUT进程 ...

  4. 设计模式之“状态模式(State)”(未完整)

    一.状态模式(State) 状态模式是当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 二.状态模式的作用 状态模式主要解决的是当控制一个对象状态转换条件表达式过于复杂时的情况. ...

  5. Unity+MediaPipe虚拟试衣间技术实现全攻略

    引言:数字时尚革命的序章 在元宇宙概念席卷全球的今天,虚拟试衣技术正成为连接物理世界与数字孪生的关键桥梁.本文将深入解析基于Unity引擎结合MediaPipe姿态估计框架的虚拟试衣系统实现,涵盖从环 ...

  6. "NU1605: 错误形式的警告: 检测到包降级"的解决办法

    这两行的意思是需要我们升级Maui.Controls的版本在8.0.14,取高版本. 同理,再次进行: 最后:

  7. 我的Vue之旅(3)

    2020-10-24 程序员节快乐哈! 因为有相当一部分内容都是相互穿插的,今天也就不写那么多重复的Demo了,直接写一下对所学内容的理解吧. 插值 关于插值这一块其实也没啥说的,文本插值都是最熟悉不 ...

  8. Spring注解之@FeignClient注解使用方法

    声明接口时在代码中通过@Resource注入容器之后即可使用.@FeignClient注解的常用属性如下: value/name:value和name的作用一样,用于指定FeignClient的名称: ...

  9. 使用Plop.js高效生成模板文件

    前情 开发是个创造型的职业,也是枯燥的职业,因为开发绝大多数都是每天在业务的代码中无法自拨,说到开发工作,就永远都逃不开新建文件的步骤,特别现在组件化开发胜行,每天都是在新建新建组件的道路上一去不返, ...

  10. 「Note」您想来点数据结构吗?

    大分块系列 最初分块 \(\color{black}{P4119}\) 考虑数列分块+值域分块 数列分块需要维护: \(nid_{i,j}\) \(fid_i\) \(f_i\) 块 \(i\) 中数 ...