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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2024-12356 — 非破坏性检测器,用于检测 BeyondTrust Remote Support 和 PRA 中未经身份验证的 RCE,通过链式参数注入和 PostgreSQL 转义绕过,利用基于时间的差分来验证可利用性。 | Kitploit
工具/GitHubGitHub/skraft9/cve-2024-12356
漏洞扫描器漏洞分析漏洞利用Web应用程序漏洞利用渗透测试红队
GitHubskraft9/cve-2024-12356

CVE-2024-12356

非破坏性检测器,用于检测 BeyondTrust Remote Support 和 PRA 中未经身份验证的 RCE,通过链式参数注入和 PostgreSQL 转义绕过,利用基于时间的差分来验证可利用性。

查看仓库
1921天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

BeyondTrust Remote Support 与 Privileged Remote Access 中经由参数注入与 PostgreSQL 字符串转义绕过实现未认证远程代码执行

道德警告: 仅限研究、教育与授权测试用途。请勿在未经许可的系统上使用。


BeyondTrust Remote Support (RS) 与 Privileged Remote Access (PRA) 是用于代理进入组织内部系统的特权远程会话的设备,因此它们经常暴露于互联网,并在网络中占据受信任的位置。

能够访问设备 WebSocket 端点的未认证攻击者,可通过串联两个漏洞以 site 用户身份执行操作系统命令:设备 thin-scc-wrapper 脚本中的参数注入(CVE-2024-12356),以及一个将无效 UTF-8 字节转变为提前中断 SQL 字面量的 PostgreSQL 字符串转义绕过(CVE-2025-1094)。该漏洞路径在任何认证之前即可触达。

本仓库中的 bt_rs_rce_check.py 是针对该漏洞链的非破坏性检测器。它驱动真实漏洞利用所使用的完全相同的未认证代码路径,但止步于可达性证明:它唯一要求目标执行的是良性的 sleep(基于时间的差分)或向您控制的带外收集器发起良性的主机名/HTTP 查询。它从不打开 shell、写入文件、读取数据、持久化或横向移动。

  • CVE 编号:
    • CVE-2024-12356 — BeyondTrust RS 与 PRA 中的命令/参数注入
    • CVE-2025-1094 — PostgreSQL psql 无效 UTF-8 SQL 注入缺陷,串联以完成 RCE
  • 漏洞类型:
    • 根本原因:CWE-88 参数注入(BeyondTrust 将 CVE-2024-12356 归类为 CWE-77;Rapid7 的分析认为 CWE-88 更为准确)
    • 串联缺陷:CWE-89 因不当处理无效 UTF-8 导致的 SQL 注入(CVE-2025-1094)
    • 最终影响:CWE-78 操作系统命令注入(未认证 RCE)
  • 受影响软件: BeyondTrust Remote Support (RS) 与 Privileged Remote Access (PRA)。
  • 受影响版本: 24.3.1 及更早版本(所有未修补的本地部署版本,以及披露时的云端构建版本)。
  • 修复方案: BeyondTrust 补丁 BT24-10(自托管设备使用 BT24-10-ONPREM1 / BT24-10-ONPREM2;云端实例已由 BeyondTrust 修补)。
  • 评分: 9.8(严重)CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
  • 利用状态: 已在野外被积极利用;已列入 CISA KEV 目录。

影响

该漏洞链可在 site 用户身份下实现未认证远程代码执行,而该设备的全部用途就是代理进入内部系统的特权访问,因此单个匿名请求即可将暴露的 RS 或 PRA 主机转化为立足点,并以此为跳板攻击该设备所中介的每一个下游系统。

它不需要任何凭据、用户交互或先前访问权限:攻击者来自外部且匿名,唯一前提是能够通过网络访问设备的 WebSocket 端点。

该漏洞在发现已被野外利用后才被披露,于 2024 年 12 月 19 日被加入 CISA 已知被利用漏洞目录,并已被公开关联到 2024 年 12 月美国财政部遭国家支持行为体攻击的事件。


漏洞链

易受攻击的逻辑位于设备的 thin-scc-wrapper shell 脚本中,该脚本从未认证的 WebSocket 帧中读取攻击者控制的会话密钥(gskey),并将其传递给数据库。完整的 RCE 是三个不同问题的串联。

1. thin-scc-wrapper 中的参数注入(CVE-2024-12356)。 该包装脚本将不受信任的 gskey 不带引号地传递给辅助程序,因此 shell 会在 echo 运行前将其按单词拆分为参数:

root@kitploit:~
quoted=$(export PHPRC="$BG_app_root/config/php-cli.ini"; echo $gskey | $ingrediRoot/app/dbquote)

以 -e 开头的密钥会将 echo 变为 echo -e,后者会解释反斜杠转义,使攻击者能够向下一阶段的数据流中注入任意原始字节——最重要的是 \xC0。攻击者控制的是现有命令的一个标志,而非注入新命令,这就是为什么这是参数注入(CWE-88)而非经典命令注入。

2. 经由无效 UTF-8 的 PostgreSQL 转义绕过(CVE-2025-1094)。 dbquote 使用 PHP 的 pg_escape_string() 对该值进行转义,后者调用 libpq 的 PQescapeStringInternal()。对于多字节字符,它信任 pg_encoding_mblen() 报告的长度,并逐字复制该字符的字节,而不进行验证:

root@kitploit:~
len = pg_encoding_mblen(encoding, source);
for (i = 0; i < len; i++)   /* copy the character */
    *target++ = *source++;

像 0xC0 这样的字节声明了一个 2 字节字符,因此转义器会将下一个字节吞入作为其“续字节”——即使该字节是单引号(0x27)。因此,序列 0xC0 0x27 会带着一个未转义的单引号字节通过“已转义”的字符串。

3. psql 跳出字面量并运行 \!(CVE-2025-1094)。 “已转义”的字符串被管道传递给 psql,后者不会将 0xC0 0x27 视为一个字符,因此 0x27 会提前闭合 SQL 字符串字面量,其后的所有内容都会被解析为新输入。攻击者利用这一点触达 psql 的 \! 元命令,该命令以 site 用户身份运行 shell 命令:

root@kitploit:~
<0xC0>'; \! <cmd> #

Rapid7 发现,实际中的 RCE 总是依赖 CVE-2025-1094,且该漏洞单独即可成立:在二进制 WebSocket 帧中传递原始 0xC0 字节(而非文本帧——文本帧中的 UTF-8 验证会将其剥离)即可使 gskey 原样到达并触发 SQL 跳出,完全无需 echo -e 步骤。本检测器即采用这种二进制帧方法。


可达性

整个漏洞链可在认证前通过单个 WebSocket 触达:

  1. 端点 — 到 /nw 的未认证 WebSocket(设备上的 Tornado 处理器)。
  2. 应用选择 — 使用 Sec-WebSocket-Protocol: ingredi support desk customer thin 标头选择易受攻击的“thin”应用,以 URL 编码形式发送为 ingredi%20support%20desk%20customer%20thin。
  3. 公司解析 — 目标租户从 HTTP Host 标头(映射到已安装的公司)解析,或作为后备方案使用 X-Ns-Company 标头。如果两者均未映射到已安装的公司,设备会在处理 gskey 之前关闭套接字。
  4. 载荷 — 一个以换行符分隔的二进制帧,携带协议版本 1、一个 thinMint UUID、authType 0(gskey 认证),然后是恶意的 gskey(版本 1 意味着没有 locale_code 行):
root@kitploit:~
1
<thinMint UUID>
0
<0xC0>'; \! <cmd> #

检测

BT24-10 增加了一个输入验证门,在 gskey 到达 dbquote/psql 之前拒绝任何非字母数字的 gskey:

root@kitploit:~
elif [[ ! "$gskey" =~ ^[a-zA-Z0-9]{32}$ ]]; then
    blog "bad session key given"
    ...
    exit 1

任何包含 0xC0、引号或 shell 元字符的密钥都会被拒绝,脚本随即退出,因此已修补的设备不会产生 1 failure 回复,也不会执行任何命令。检测器将该行为差异转化为一种不依赖出口流量的基于时间的差分,无需目标具备出站连接能力:

  • 对照 — 格式合法的 gskey(A × 32)。在已修补和未修补的构建上,这都会到达数据库查询并快速返回 ['2\n', '1 failure\n']。
  • 注入 — <0xC0>'; \! sleep <delay> #。在易受攻击的主机上,psql 会运行注入的 sleep,因此 1 failure 回复会延迟约 <delay> 秒。在已修补的主机上,gskey 正则表达式会拒绝该密钥,脚本退出,套接字快速关闭且无回复。

由于判定依据是设备自身回复的时序,因此即使目标阻止出站 DNS/HTTP 也能成立——在这种情况下,仅靠 OAST 回调会产生误报。可选的回调模式仅作为佐证,适用于确实允许出站流量的主机。


使用方法

安装唯一依赖:

root@kitploit:~
pip install -r requirements.txt

差分模式(推荐,不依赖出口流量):

root@kitploit:~
python3 bt_rs_rce_check.py --target rs.example.com --mode differential

带 OAST 佐证的差分模式:

root@kitploit:~
python3 bt_rs_rce_check.py --target rs.example.com \
    --oast <your-collector>.oast.pro --mode both

当 Host 标头无法解析到租户时, 提供显式 slug,或提供一个候选 slug 文件(每行一个),通过 X-Ns-Company 标头依次尝试:

root@kitploit:~
python3 bt_rs_rce_check.py --target rs.example.com --company acme
python3 bt_rs_rce_check.py --target rs.example.com --company-list slugs.txt

主要选项:

解读结果:

  • VULNERABLE — 注入的 1 failure 回复相对于对照延迟了约 --delay 秒。sleep 已执行;该主机上的未认证 RCE 漏洞链可利用。
  • PATCHED — 对照快速返回 1 failure,但注入被拒绝且无回复。BT24-10 的 gskey 正则已生效,注入从未到达 psql 汇点。
  • UNRESOLVED(“company did not resolve”) — 两个探测均未产生 1 failure,因此对照也从未到达 gskey 处理器。这不是已修补的结果;设备因 Host/公司未映射到已安装的公司而关闭了套接字。请使用正确的虚拟主机(--target)或有效的 slug(--company / --company-list)重试。

修复建议

应用 BT24-10(BT24-10-ONPREM1 / BT24-10-ONPREM2)或升级至 24.3.1 以上版本。由于该漏洞链还依赖 PostgreSQL psql 缺陷(CVE-2025-1094),请同时保持 PostgreSQL 客户端工具已修补,并在可行的情况下限制设备 WebSocket 端点的网络暴露。


参考资料

  • CVE-2024-12356 — NVD 条目:BeyondTrust RS/PRA 命令/参数注入(CVSS 9.8)。
  • CVE-2025-1094 — NVD 条目:PostgreSQL psql 无效 UTF-8 / SQL 注入缺陷,串联以完成 RCE。
  • BeyondTrust 公告 BT24-10 — 针对 RS/PRA 命令注入的官方厂商安全公告与补丁。
  • CISA KEV 目录条目 — CVE-2024-12356,于 2024 年 12 月 19 日添加,以及宣布添加该条目的 CISA 警报。
  • Rapid7 分析:CVE-2024-12356 — 重现了未认证 RCE 并发现了串联的 PostgreSQL 缺陷 CVE-2025-1094。
  • Metasploit 漏洞利用模块 — rapid7/metasploit-framework PR #19877,针对 BeyondTrust RS/PRA 的未认证 RCE。

法律声明

本软件仅供授权安全测试与防御性研究使用。请仅针对您拥有或获得书面明确授权测试的系统运行。它是一个非破坏性检测器,刻意避免武器化的命令执行、数据访问与持久化。您有责任遵守所有适用法律并获得适当授权;作者对滥用行为不承担任何责任。

下载工具
选项含义
--target <host>设备虚拟主机 / FQDN(必填)。
--company <slug>显式租户 slug,作为 X-Ns-Company 发送。
--company-list <file>候选 slug 文件,依次尝试直至解析成功。
--oast <domain>用于回调佐证的带外收集器域名。
--mode {differential,callback,both}检测策略(默认 differential)。
--delay <seconds>基于时间测试的 sleep 时长(默认 9)。
--timeout <seconds>每次探测的套接字超时(默认 25)。
--header 'H: v'额外的原始请求标头;可重复。