TheMalwareGuardian/CVE-2018-14847
GitHub: TheMalwareGuardian/CVE-2018-14847
针对 MikroTik RouterOS CVE-2018-14847 路径遍历漏洞的独立 PoC,可未经认证提取并解密管理员凭据,激活开发者后门获取 root 权限。
Stars: 0 | Forks: 0
# ***🐞 MikroTik CVE-2018-14847***
MikroTik 的 Winbox 协议中存在未授权路径遍历漏洞,可从 /flash/rw/store/user.dat 泄露管理员凭据
## ***📑 目录*** ## ***📋 概述*** [CVE-2018-14847](https://nvd.nist.gov/vuln/detail/cve-2018-14847) 是 MikroTik RouterOS 中影响 Winbox 管理协议(TCP 端口 8291)的一个路径遍历漏洞。未经认证的远程攻击者可以从路由器文件系统中读取任意文件,包括使用弱静态 XOR 密钥加密存储密码的用户凭据数据库 /flash/rw/store/user.dat。 该漏洞最初由 Jacob Baines(Tenable)于 2018 年 7 月通过 [By the Way](https://github.com/tenable/routeros/tree/master/poc/bytheway) 漏洞利用程序披露。本代码库包含一个独立的 Python3 重实现版本,并附带完整的协议文档。 ## ***🎯 受影响版本*** | 渠道 | 版本 | |----------|-------------------| | 长期支持版 | 6.30.1 - 6.40.7 | | 稳定版 | 6.29 - 6.42 | | 测试版 | 6.29rc1 - 6.43rc3 | ## ***🔬 漏洞详情*** ### ***🧠 Winbox 协议*** Winbox 是 MikroTik 的专有二进制管理协议,运行在 TCP 端口 8291 上。帧结构如下: ``` [total_len - 2][0x01][0x00][total_len - 4]["M2"][fields...] ``` 每个帧内部的字段编码: | 类型字节 | 含义 | 值 | |-----------|-----------------------|--------------------------------| | 0xff | 扩展字段标记 | 后跟 field_id 和 value | | 0x09 | u8 整数 | 1 个字节 | | 0x21 | 字符串 | 1 字节长度前缀 + 数据 | | 0x88 | 期待回复标记 | 无值 | | 0xfe | 扩展字段 ID | 3 字节 ID + 类型 + 值 | 文件系统处理程序位于端点 (sys=5, handler=0),并公开了三个相关命令: - 0x06 - 打开文件 - 0x04 - 读取文件 - 0x01 - 创建文件 ### ***🧨 路径遍历*** Winbox 文件系统处理程序没有对传递给打开文件命令的路径进行过滤。通过嵌入 '/////./../' 序列,攻击者可以突破沙箱边界并到达根文件系统: ``` /////./..//////./..//////./../flash/rw/store/user.dat ``` 每个 '/////./../' 段(10 个字节)会向上一层目录跳出。三个段即可到达根目录,之后 flash/rw/store/user.dat 便是 RouterOS 的用户凭据数据库。该请求无需任何身份验证。 该漏洞利用发送两个帧: 1. 打开请求:带有遍历路径的打开文件命令 - 响应字节 [38] → session_id 2. 读取请求:填入 session_id 的读取文件命令 - 从字节 [55] 开始的响应内容 → 原始 user.dat 内容 ### ***🔐 密码解密*** user.dat 是一系列 nv::message 记录。每条记录以一个 2 字节的小端序(LE)长度字段开头,并以魔数 M2 开始。记录内部的字段使用 3 字节的小端序(LE)字段 ID: | 字段 ID | 类型 | 含义 | |----------|--------|---------------------------------------| | 0x01 | 字符串 | 用户名 | | 0x02 | u8 | 用户组 - 3 代表完全管理员权限 | | 0x11 | 字符串 | 加密的密码(如果未设置则为空) | 密码使用静态 XOR 密钥进行加密,该密钥由编译到 RouterOS 中的硬编码盐值派生而来: ``` key = MD5(username + "283i4jfkai3389") password = XOR(encrypted_pass[i], key[i % len(key)]) until null byte ``` 这意味着可以从任何受影响的设备中提取 user.dat,并在无需暴力破解的情况下进行离线解密。 ### ***🧬 开发者后门*** 获取管理员密码后,攻击者可以通过 Winbox 进行身份验证,并使用创建文件命令写入两个文件来激活隐藏的开发者登录: ``` /pckg/option activates the option package /flash/nova/etc/devel-login enables the devel user ``` 一旦存在这些文件,路由器就会通过 Telnet 和 SSH 在 devel 用户下公开一个 BusyBox root shell,并使用管理员的密码。 ## ***⚙️ 漏洞利用*** Exploit_CVE_2018_14847.py 是一个零外部依赖的独立 Python3 漏洞利用脚本。它从头实现了 Winbox 二进制协议,并执行以下操作: 1. 未经身份验证的路径遍历以提取 user.dat。 2. nv::message 记录的二进制解析。 3. MD5-XOR 密码解密。 ``` # 默认端口 8291 python3 Exploit_CVE_2018_14847.py 192.168.1.10 # 自定义端口 python3 Exploit_CVE_2018_14847.py 192.168.1.10 8291 ``` 漏洞利用后 - 开发者后门 shell: ``` # Telnet (必须先连接) telnet -l devel 192.168.1.10 # SSH (在 Telnet 会话之后) ssh -oHostKeyAlgorithms=+ssh-dss devel@192.168.1.10 ``` ## ***📚 参考资料*** - **[MikroTik 安全公告](https://blog.mikrotik.com/security/winbox-vulnerability.html)** - 来自 MikroTik 的官方补丁公告和时间线。 - **[Tenable - By the Way PoC](https://github.com/tenable/routeros/tree/master/poc/bytheway)** - 由 Jacob Baines 编写的原始 C++ 漏洞利用程序。 - **[NVD - CVE-2018-14847](https://nvd.nist.gov/vuln/detail/CVE-2018-14847)** - CVSS 9.1(严重)。标签:CISA项目, CVE-2018-14847, MikroTik, PoC, Python3, RouterOS, StruQ, Winbox协议, 云资产清单, 信息泄露, 凭据提取, 密码解密, 开发者后门, 暴力破解, 未授权访问, 漏洞分析, 网络安全, 路径探测, 路径遍历, 路由器安全, 逆向工程, 隐私保护