渗透测试过程中碰到的Symfony框架

0x01 不是很顺利的Nday利用
在一次渗透测试过程中发现了目标使用了Symfony框架,然后扫了下目录,发现存在app_dev.php 文件,尝试访问

在这里插入图片描述
发现开启了debug模式,Symfony 版本号为2.8.34 php版本5.6.40 也能查看phpinfo页面在这里插入图片描述
然后在网上搜了一下Symfony debug模式利用,看到了这篇文章https://www.ambionics.io/blog/symfony-secret-fragment

发现是可以利用 /_fragment 去尝试执行命令,但是需要知道一个key,文章里提到了在Symfony <= 3.4.43.中存在一个默认key:ThisTokenIsNotSoSecretChangeIt

然后根据文章生成_hash,发现还是返回403
在这里插入图片描述
当时就以为key被修改了,然后去看了看Symfony 对应版本的代码,发现还存在一个 /_configurator 接口可以利用,我们直接访问/_configurator/final 就可以直接看到配置文件的内容

在这里插入图片描述
结果发现key值没变,那看来应该是自己生成/_hash的地方有问题,再回去细看了一下文章,发现了下面一段话

在这里插入图片描述
估计是要修改成http

python3 -c “import base64, hmac, hashlib; print(base64.b64encode(hmac.HMAC(b’ThisTokenIsNotSoSecretChangeIt’, b’http://xxxxx/app_dev.php/_fragment’, hashlib.sha256).digest()))”

然后拿生成的_hash再去访问在这里插入图片描述
发现返回404,说明_hash校验成功了,那就尝试执行system在这里插入图片描述
发现并没有成功执行,然后以为是环境问题,就自己搭了个环境复现了一下
composer create-project symfony/framework-standard-edition /path 2.8.34在这里插入图片描述
发现也报错了,但是也是执行到了system的,然后对比了一下两个报错在这里插入图片描述
发现目标多了一个bundle,刚好也是这个报的错,那就本地安装一下再复现一下。
composer require a2lix/i18n-doctrine-bundle在这里插入图片描述
在app/AppKernel.php 加入下面一行
new A2lix\I18nDoctrineBundle\A2lixI18nDoctrineBundle()
那么安装成功后,把请求重放一下。

在这里插入图片描述
发现报错,然后把

\vendor\a2lix\i18n-doctrine-bundle\A2lix\I18nDoctrineBundle\Doctrine\ORM\EventListener\ControllerListener.php在这里插入图片描述
这两行注释就好了

在这里插入图片描述
好了,报错也一样了,然后就动态调试了一下在这里插入图片描述
发现在23行,会获取到我们传入的system字符串,然后list了一下,再去获取controller,也就是在这里list后 o b j e c t 的值是 s , object的值是s, object的值是smethod的值是ystem,所以getclass(‘s’)报错了。这里的功能应该是获取controller的anontation,然后再做相关操作。

那这里就直接限制了我们只能传入存在的类,不能传入system等方法,然后就去找了一下看Symfony里面有没有什么能够利用的类。也去看了一下生成controller的步骤。
/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php在这里插入图片描述
最后会调用到/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php在这里插入图片描述
发现只能生成无参构造函数的类。
所以目前存在2个限制条件
1.类存在无参构造函数
2.只能调用public的方法
然后经过一段时间寻找后,没有发现可以直接执行命令的类(也有可能是没找到)
就转变了一下思路,找能够写文件的地方
/vendor/symfony/symfony/src/Symfony/Component/Filesystem/Filesystem.php在这里插入图片描述
可以写文件,那就尝试下写shell在这里插入图片描述
好吧 没权限,那就继续转变思路,我写到/tmp目录,然后文件包含在这里插入图片描述
没有返回写入失败,那估计写进去了,然后文件包含
在这里插入图片描述

没有包含成功,判断下文件有没有写进去
在这里插入图片描述
文件并没有存在,不知道什么原因导致没有写成功

那就只有试下反序列化了,使用Symfony\Component\Yaml\Inline::parse做反序列化操作,然后打开了phpggc找一下链(几年前的过程,只有几个链)

在这里插入图片描述
发现并没有Symfony 2.8.34的利用链,那就尝试自己挖掘利用链

0x02 挖掘反序列化链
/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php在这里插入图片描述
在__destruct 中执行了该类的close方法,但是在该类中的close为空,那么去找它的子类,然后发现了BufferHandler类在这里插入图片描述
AbstractHandler.php在这里插入图片描述
这个类的几个关键
1.用了call_user_func,并且 t h i s − > p r o c e s s o r s 我们可控, this->processors我们可控, this>processors我们可控,record 也是 $this->buffer的值
2.调用了父类的handleBatch方法(见5),然后循环调用了handle
3.BufferHandler 类将父类的__destruct给重写了,所以不能用这个类来做入口
4.close方法调用了flush方法

所以现在梳理一下整个链的调用流程
1.AbstractHandler::__destruct->
2.BufferHandler::close->
3.BufferHandler::flush->
4.AbstractHandler::handleBatch-> BufferHandler::handle->call_user_func

在这个流程中1-3并不能实现,因为BufferHandler重写了__destruct 并不能执行到BufferHandler::close 方法
为了解决这个问题,就去寻找了另一个子类,这里采用的是RollbarHandler

在这里插入图片描述
这里执行了$this->rollbarNotifuer的flush方法,那么就可以用来做中间类去执行到BufferHandler::flush方法,那么整个流程就通了,剩下就是类里面每个值的问题

在这里插入图片描述
最后 成功执行命令在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/963410.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Games104——网络游戏的进阶架构

这里写目录标题 前言位移移动插值内插&#xff08;Interpolation&#xff09;外插&#xff08;Extrapolation&#xff09; 命中判定Hit Registration在客户端去判定 在服务器端去判定延迟补偿掩体问题躲进掩体走出掩体 技能前摇本地暴击效果 基础MMO框架分布式架构一致性哈希服…

2025年01月27日Github流行趋势

项目名称&#xff1a;onlook项目地址url&#xff1a;https://github.com/onlook-dev/onlook项目语言&#xff1a;TypeScript历史star数&#xff1a;5340今日star数&#xff1a;211项目维护者&#xff1a;Kitenite, drfarrell, iNerdStack, abhiroopc84, apps/dependabot项目简介…

【Redis】set 和 zset 类型的介绍和常用命令

1. set 1.1 介绍 set 类型和 list 不同的是&#xff0c;存储的元素是无序的&#xff0c;并且元素不允许重复&#xff0c;Redis 除了支持集合内的增删查改操作&#xff0c;还支持多个集合取交集&#xff0c;并集&#xff0c;差集 1.2 常用命令 命令 介绍 时间复杂度 sadd …

[SAP ABAP] 静态断点的使用

在 ABAP 编程环境中&#xff0c;静态断点通过关键字BREAK-POINT实现&#xff0c;当程序执行到这一语句时&#xff0c;会触发调试器中断程序的运行&#xff0c;允许开发人员检查当前状态并逐步跟踪后续代码逻辑 通常情况下&#xff0c;在代码的关键位置插入静态断点可以帮助开发…

从TinyZero的数据与源码来理解DeepSeek-R1-Zero的强化学习训练过程

1. 引入 TinyZero&#xff08;参考1&#xff09;是伯克利的博士生复现DeepSeek-R1-Zero的代码参仓库&#xff0c;他使用veRL来运行RL强化学习方法&#xff0c;对qwen2.5的0.5B、1.5B、3B等模型进行训练&#xff0c;在一个数字游戏数据集上&#xff0c;达到了较好的推理效果。 …

深度卷积神经网络实战无人机视角目标识别

本文采用深度卷积神经网络作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对无人机目标数据集进行训练和优化&#xff0c;该数据集包含丰富的无人…

初级数据结构:栈和队列

一、栈 (一)、栈的定义 栈是一种遵循后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09;原则的数据结构。栈的主要操作包括入栈&#xff08;Push&#xff09;和出栈&#xff08;Pop&#xff09;。入栈操作是将元素添加到栈顶&#xff0c;这一过程中&#xf…

数据结构 前缀中缀后缀

目录 前言 一&#xff0c;前缀中缀后缀的基本概念 二&#xff0c;前缀与后缀表达式 三&#xff0c;使用栈实现后缀 四&#xff0c;由中缀到后缀 总结 前言 这里学习前缀中缀后缀为我们学习树和图做准备&#xff0c;这个主题主要是对于算术和逻辑表达式求值&#xff0c;这…

笔灵ai写作技术浅析(三):深度学习

笔灵AI写作的深度学习技术主要基于Transformer架构,尤其是GPT(Generative Pre-trained Transformer)系列模型。 1. Transformer架构 Transformer架构由Vaswani等人在2017年提出,是GPT系列模型的基础。它摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),完全依赖自…

专业的定制版软件,一键操作,无限使用

今天给大家介绍一个专业的PDF转word的小软件&#xff0c;软件只有5.5M。非常小&#xff0c;而且没有文档大小的限制&#xff0c;可以随意使用。 PDFtu PDF转word 软件第一次使用需要安装一下。 安装好之后&#xff0c;我们就能在桌面找到对应的图标&#xff0c;打开就能直接使…

QGIS系列22-如何提取不规则多边形的中心经纬度

今天我们来学习一下啊如何通过QGIS提取不规则多边形的中心经纬度 1、首先我们把不规则的多边形图形导入进QGIS里面去 2、现在打开的图层是不可以编辑的&#xff0c;因此我们还需要转换成可编辑状态&#xff0c;具体是选择图层&#xff0c;右键点击&#xff0c;选择切换编辑模式…

word2vec 实战应用介绍

Word2Vec 是一种由 Google 在 2013 年推出的重要词嵌入模型,通过将单词映射为低维向量,实现了对自然语言处理任务的高效支持。其核心思想是利用深度学习技术,通过训练大量文本数据,将单词表示为稠密的向量形式,从而捕捉单词之间的语义和语法关系。以下是关于 Word2Vec 实战…

数据库安全管理中的权限控制:保护数据资产的关键措施

title: 数据库安全管理中的权限控制:保护数据资产的关键措施 date: 2025/2/2 updated: 2025/2/2 author: cmdragon excerpt: 在信息化迅速发展的今天,数据库作为关键的数据存储和管理中心,已经成为了企业营运和决策的核心所在。然而,伴随着数据规模的不断扩大和数据价值…

【漫话机器学习系列】076.合页损失函数(Hinge Loss)

Hinge Loss损失函数 Hinge Loss&#xff08;合页损失&#xff09;&#xff0c;也叫做合页损失函数&#xff0c;广泛用于支持向量机&#xff08;SVM&#xff09;等分类模型的训练过程中。它主要用于二分类问题&#xff0c;尤其是支持向量机中的优化目标函数。 定义与公式 对于…

openmv的端口被拆分为两个 导致电脑无法访问openmv文件系统解决办法 openmv USB功能改动 openmv驱动被更改如何修复

我之前误打误撞遇到一次&#xff0c;直接把openmv的全部端口删除卸载然后重新插上就会自动重新装上一个openmv端口修复成功&#xff0c;大家可以先试试不行再用下面的方法 全部卸载再重新插拔openmv 要解决OpenMV IDE中出现的两个端口问题&#xff0c;可以尝试以下步骤&#x…

洛谷P1403 [AHOI2005] 约数研究

题目链接&#xff1a;P1403 [AHOI2005] 约数研究 - 洛谷 | 计算机科学教育新生态 题目难度&#xff1a;普及一 题目分析&#xff1a;本题很明显是要你求从i到n的质因数个数之和&#xff0c;如果采用暴力肯定是超时的&#xff0c;故我的想法是采用埃氏筛法来求时间复杂度为&…

elasticsearch8.15 高可用集群搭建(含认证Kibana)

文章目录 1.资源配置2.系统参数优化3.JDK17安装4.下载&安装ES 8.155.生成ES的证书(用于ES节点之间进行安全数据传输)6.修改ES 相关配置文件7.创建es用户并启动8.配置ES的账号和密码(用于ES服务端和客户端)9.下载和安装Kibana10.编辑Kibana配置文件11.启动Kiabana12.访问Kia…

MATLAB中的IIR滤波器设计

在数字信号处理中&#xff0c;滤波器是消除噪声、提取特征或调整信号频率的核心工具。其中&#xff0c;无限脉冲响应&#xff08;IIR&#xff09;滤波器因其低阶数实现陡峭滚降的特性&#xff0c;被广泛应用于音频处理、通信系统和生物医学工程等领域。借助MATLAB强大的工具箱&…

数据结构:优先级队列—堆

一、优先级队列 1、优先级队列概念 优先级队列&#xff0c;听名字我们就知道他是一种队列&#xff0c;队列在前面我们已经学习过了&#xff0c;它是一种先进先出的数据结构&#xff0c;但是在特殊的情况下&#xff0c;我们我们队列中元素是带有一定优先级的&#xff0c;它需要…

北大:三阶段学习优化多模态推理问答

&#x1f4d6;标题&#xff1a;ReasVQA: Advancing VideoQA with Imperfect Reasoning Process &#x1f310;来源&#xff1a;arXiv, 2501.13536 &#x1f31f;摘要 &#x1f538;视频问答&#xff08;VideoQA&#xff09;是一项具有挑战性的任务&#xff0c;需要理解视频中…