
一个用 Rust 编写的蜜罐,用于模拟存在 CVE-2026-41940(cPanel2Shell 身份验证绕过)漏洞的 cPanel/WHM 实例。
该蜜罐模拟了 cPanel2Shell 漏洞扫描器所使用的响应序列:
msg_code:[expired_session] 标记通过初始探测的攻击者会被引导至一个由内存虚拟文件系统支持的伪 bash shell 中。
cargo build --release
# 默认:端口 2087、2083,自动生成 TLS
./target/release/cpanel2shell-honeypot
# 自定义端口
./target/release/cpanel2shell-honeypot -p 2083,2087
# 禁用 TLS
./target/release/cpanel2shell-honeypot --no-tls
# 按主机名配置 TLS,支持热重载
./target/release/cpanel2shell-honeypot --certs-config data/certs.toml
# 查看所有选项
./target/release/cpanel2shell-honeypot --help
创建 data/certs.toml(参见 data/certs.example.toml):
default = "auto"
[auto]
cache_dir = "./captures/certs"
key_type = "ecdsa-p256"
validity_days = 365
issuer_cn = "Let's Encrypt Authority X3"
[[host]]
sni = "cpanel.example.com"
cert = "/etc/honeypot/certs/cpanel.pem"
key = "/etc/honeypot/certs/cpanel.key"
src/
├── main.rs # 入口点、运行时设置
├── cli.rs # 命令行参数
├── config.rs # 应用程序配置
├── router.rs # HTTP 路由定义
├── capture.rs # 请求日志和载荷存储
├── sessions/ # 会话持久化
├── handlers/ # HTTP 请求处理器
├── shell/ # Bash 解释器和 VFS
│ ├── lexer.rs # 词法分析器
│ ├── parser.rs # 递归下降解析器
│ ├── exec.rs # AST 执行器
│ ├── expand.rs # 变量展开
│ ├── builtins.rs # Shell 内建命令
│ ├── commands.rs # 外部命令桩
│ ├── vfs.rs # 虚拟文件系统
│ └── init.rs # 文件系统种子数据
└── tls/ # TLS 证书管理
├── config.rs # 证书配置
├── generator.rs # 证书生成
├── resolver.rs # SNI 证书解析
└── watcher.rs # 配置文件热重载
伪 shell 实现了 bash 的一个子集:
$VAR、${VAR:-default})$(cmd)、`cmd`)会话状态(当前工作目录、环境变量、VFS 写入、历史记录)通过 JSON 快照在重启后持久保留。
所有攻击者活动都会写入 ./captures/:
until/case 关键字MIT
| 文件模式 | 描述 |
|---|
upload_*.bin | 上传的文件 |
upload_meta_*.txt | 上传元数据 |
post_*.txt | POST 请求体 |
cmd_*.txt | 终端命令 |
sessions/*.json | 会话快照 |
certs/ | 缓存的 TLS 证书 |