问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
记一次渗透测试过程中碰到的Symfony框架的利用
渗透测试
记在一次渗透测试过程中碰到的Symfony框架debug模式下的利用,以及和常规利用不一样的地方
0x01 不是很顺利的Nday利用 ================= 在一次渗透测试过程中发现了目标使用了Symfony框架,然后扫了下目录,发现存在app\_dev.php 文件,尝试访问 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-6c50bfd193b25b9dc324304bb576b9b49cf6608c.png) 发现开启了debug模式,Symfony 版本号为2.8.34 php版本5.6.40 也能查看phpinfo页面 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-a9f9223a0dc4cd1808a40ed6dca3691b85a1b2b4.png) 然后在网上搜了一下Symfony debug模式利用,看到了这篇文章`https://www.ambionics.io/blog/symfony-secret-fragment` 发现是可以利用 `/_fragment` 去尝试执行命令,但是需要知道一个key,文章里提到了在Symfony <= 3.4.43.中存在一个默认key:`ThisTokenIsNotSoSecretChangeIt` 然后根据文章生成\_hash,发现还是返回403 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-c295d34fc243bce75784fdd82d284831a2c2a2cb.png) 当时就以为key被修改了,然后去看了看Symfony 对应版本的代码,发现还存在一个 `/_configurator` 接口可以利用,我们直接访问`/_configurator/final` 就可以直接看到配置文件的内容 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-1dd49a0462d61aefadacff60960438c47c6ff0cf.png) 结果发现key值没变,那看来应该是自己生成`/_hash`的地方有问题,再回去细看了一下文章,发现了下面一段话 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-38241987c0a90bade325694a41440ddc67b0ff82.png) 估计是要修改成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再去访问 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-139511f756a420b2b210ce2701fb3cf376522914.png) 发现返回404,说明\_hash校验成功了,那就尝试执行system ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-0668b19b323a6f4ae275a732ef877764a2735b96.png) 发现并没有成功执行,然后以为是环境问题,就自己搭了个环境复现了一下 `composer create-project symfony/framework-standard-edition /path 2.8.34` ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-1ffcdde66abb4cb012d729783f066d503de34363.png) 发现也报错了,但是也是执行到了system的,然后对比了一下两个报错 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-cedabf0c3ea63654fb523a197e49596da0aeecd3.png) 发现目标多了一个bundle,刚好也是这个报的错,那就本地安装一下再复现一下。 `composer require a2lix/i18n-doctrine-bundle` ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-0956b6cf805766630d7c3c8604d47d2bf9a79734.png) 在app/AppKernel.php 加入下面一行 `new A2lix\I18nDoctrineBundle\A2lixI18nDoctrineBundle()` 那么安装成功后,把请求重放一下。 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-6def778ae28c6c465956e96c206e401ef365ecae.png) 发现报错,然后把 `\vendor\a2lix\i18n-doctrine-bundle\A2lix\I18nDoctrineBundle\Doctrine\ORM\EventListener\ControllerListener.php` ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-395732f94a1bd884cbd8860febd60aa7d065eda7.png) 这两行注释就好了 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-99188f138f6c1a2e68a7c30bcb52ec3c7281daa9.png) 好了,报错也一样了,然后就动态调试了一下 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-807396b9e3a36b75bed06b43bca685257c7fe2de.png) 发现在23行,会获取到我们传入的system字符串,然后list了一下,再去获取controller,也就是在这里list后 $object的值是s,$method的值是ystem,所以getclass(‘s’)报错了。这里的功能应该是获取controller的anontation,然后再做相关操作。 那这里就直接限制了我们只能传入存在的类,不能传入system等方法,然后就去找了一下看Symfony里面有没有什么能够利用的类。也去看了一下生成controller的步骤。 `/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php` ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-d0b2542b6c72b20351e06e0177ea3b8dabbeb499.png) 最后会调用到`/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php` ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-0d84970e3c22df966739055b131dca38b1cca726.png) 发现只能生成无参构造函数的类。 所以目前存在2个限制条件 1.类存在无参构造函数 2.只能调用public的方法 然后经过一段时间寻找后,没有发现可以直接执行命令的类(也有可能是没找到) 就转变了一下思路,找能够写文件的地方 `/vendor/symfony/symfony/src/Symfony/Component/Filesystem/Filesystem.php` ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-c7bcc746e9e5ae79d6ae533cba41daa77e47cd5b.png) 可以写文件,那就尝试下写shell ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-57ed5848c3414149c96a5a8bf86390f9a56e5bcd.png) 好吧 没权限,那就继续转变思路,我写到/tmp目录,然后文件包含 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-1e53ef3f1017503f3797595f2b3bf1265f3e90c3.png) 没有返回写入失败,那估计写进去了,然后文件包含 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-5d1c47fe5a26a5177d295c026ef8c35a1c97f4d2.png) 没有包含成功,判断下文件有没有写进去 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-116920ed7feddebb2a4a561d9c4c1f5fcb03dd86.png) 文件并没有存在,不知道什么原因导致没有写成功 那就只有试下反序列化了,使用`Symfony\Component\Yaml\Inline::parse`做反序列化操作,然后打开了phpggc找一下链(几年前的过程,只有几个链) ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-64703cc7338023849bdb73b00765304d4572a4ad.png) 发现并没有Symfony 2.8.34的利用链,那就尝试自己挖掘利用链 0x02 挖掘反序列化链 ============ `/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php` ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-66692f500b16feaa536944b989ab4510c41c4470.png) 在\_\_destruct 中执行了该类的close方法,但是在该类中的close为空,那么去找它的子类,然后发现了BufferHandler类 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-f24b78eda107c0e550ebade808b43b1e0716d871.png) AbstractHandler.php ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-d1705a76040893c98cf8eafc98e74fbf696d88a6.png) 这个类的几个关键 1.用了call\_user\_func,并且$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 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-3b9c9076c9e2a8d0c410ca3935626a9318cecad2.png) 这里执行了$this->rollbarNotifuer的flush方法,那么就可以用来做中间类去执行到BufferHandler::flush方法,那么整个流程就通了,剩下就是类里面每个值的问题 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-31e952a3032f3eb331e49c1760944fc4c95f7b52.png) 最后 成功执行命令 ![图片.png](https://shs3.b.qianxin.com/attack_forum/2024/12/attach-ffcd47e2c2f50da5538d0f9507f090d3c96d7f45.png)
发表于 2025-01-10 09:00:01
阅读 ( 616 )
分类:
WEB安全
2 推荐
收藏
0 条评论
请先
登录
后评论
sky0
1 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!