当前位置: 首页 > news >正文

Docker php文件本地包含--pearcmd.php利用

目录

前言

环境搭建

pearcmd.php巧妙利用

渗透


前言

docker包含日志文件,基本不可能,就以我自身的一个项目来说,在尝试包含日志文件时发现,客户将他的日志文件从定向到了设备文件,而php没有包含设备文件的权限

然后我们就想如何包含,发现客户的文件目录里有一个phpinfo(),然后可以使用phpinfo实现临时文件的包含。但是这个包含的成功率经测试不是很高。

所以我们这里再说一个新招

环境搭建

docker环境直接拉就可以了,然后会将你的当前目录映射到docker容器中

docker run -d --name web -p 8080:80 -v $(pwd):/var/www/html php:7.4-apache

pearcmd.php巧妙利用

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

docker环境中是有这个文件的如下图

原本pear/pcel是一个命令行工具,并不在Web目录下,我们是访问不到的。但我们遇到的场景比较特殊,是一个文件包含的场景,只要我们可以猜到路径,那么我们就可以包含到pear中的文件,进而利用其中的特性来搞事。  

如何利用

下面来看一下register_argc_argv这个配置,这个配置子docker的php环境中是默认开启的如下图所示,那这么个东西有啥子用,不急我们接着往下看

当开启了register_argc_argv这个选项,用户的输入将会被赋予给$argc$argv$_SERVER['argv']几个变量

如果PHP以server形式运行,且他有$_SERVER变量,而且开启了register_argc_argv这个选项,且request_info.argc不存在,就会出现http数据包中的query-string就会被作为$_server['argv']的值。我们来看一下

 pear中获取命令行argv的函数,他是先获取$argv,如果argv不存在再尝试$_SERVER['argv],我们可通过query-string控制$_SERVER['argv]。 然后pear中会有一个可以利用的参数config-create,这个命令需要传入两个参数,其中第二个参数是写入的文件路径,第一个参数会被写入到这个文件中。我们在query-string中传递config-create,这个东西就会被pearcmd.php调用。然后pearcmd.php两个参数在通过query-string进行获取。这样我们可以构造如下payload。注意config-create前面有一个空格不能忘记

 config-create /&file=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?> /tmp/hello.php

/&file=/usr/local/lib/php/pearcmd.php 要包含的文件

<?=phpinfo()?> 要包含的内容

/tmp/hello.php要写入的文件

渗透

抓包传值

 我们进入docker容器中查看文件是否成功上传

成功上传虽然有乱码但是代码已经传递上去

尝试包含所写如文件

包含成功

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【vSphere 7/8】深入浅出 vSphere 证书 Ⅲ—— vSphere 证书的更新和替换概述
  • 泛微E9开发 获取浏览按钮的显示值
  • C++编程:理解左值(lvalue)和右值(rvalue)
  • Datawhale X 李宏毅苹果书 AI夏令营 Task 2
  • Keil5 Debug模式Watch窗口添加的监控变量被自动清除
  • Linux常见基础命令
  • c#笔记5 详解事件的内置类型EventHandler、windows事件在winform中的运用
  • 拼多多Temu半托管和全托管对比
  • 【机器学习】决策树------迅速了解其基本思想,Sklearn的决策树API及构建决策树的步骤!!!
  • 基于深度学习的金属锈蚀检测系统详细实施指南
  • HTML+CSS面试题总结:(第一天)
  • 【openwrt-21.02】T750 openwrt-21.02 pptp拨号失败问题分析及解决方案
  • 应对Java虚拟机(JVM)负载突然增大的全面指南
  • Stable Diffusion绘画 | 插件-宽高比调整助手:让计算器毕业
  • 密码管理最佳实践:安全存储与定期更换的艺术
  • [译]前端离线指南(上)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CentOS 7 防火墙操作
  • conda常用的命令
  • Docker 笔记(2):Dockerfile
  • ERLANG 网工修炼笔记 ---- UDP
  • input实现文字超出省略号功能
  • Magento 1.x 中文订单打印乱码
  • Mithril.js 入门介绍
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 服务器从安装到部署全过程(二)
  • 机器学习中为什么要做归一化normalization
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 来,膜拜下android roadmap,强大的执行力
  • 面试遇到的一些题
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 用mpvue开发微信小程序
  • 智能合约Solidity教程-事件和日志(一)
  • 转载:[译] 内容加速黑科技趣谈
  • gunicorn工作原理
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 积累各种好的链接
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • # windows 安装 mysql 显示 no packages found 解决方法
  • (20)docke容器
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (二) 初入MySQL 【数据库管理】
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (回溯) LeetCode 131. 分割回文串
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (力扣)循环队列的实现与详解(C语言)
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (推荐)叮当——中文语音对话机器人
  • (杂交版)植物大战僵尸
  • .mysql secret在哪_MYSQL基本操作(上)