1.前言
半个月前,我在对Wavlink品牌WL-NU516U1型号路由器进行安全测试时,发现其管理界面存在一处命令注入漏洞。
该漏洞源于系统对用户输入过滤不严,攻击者可通过特制的HTTP请求在设备中执行任意系统命令,从而完全控制设备。
经过深入分析与验证,确认该漏洞具有高危害性,可导致设备被完全接管。
我写了详细的技术报告,包括漏洞成因、利用方式和修复建议,并通过正规渠道向Wavlink厂商及CVE机构提交。
近日,该漏洞已正式获得CVE编号CVE-2025-9149。
wavlink官网
2.漏洞概述
Wavlink是一家专注于网络设备和通信解决方案的公司,提供优质的路由器、扩展器和网络配件。其下的WAVLINK-NU516U1型号的固件,功能用于提供打印机服务器网卡,其管理后台存在命令注入漏洞,允许攻击者完成os命令执行。
固件下载地址:
https://docs.wavlink.xyz/Firmware/fm-516u1/
3.漏洞详情
对固件binwalk -Me [固件位置] 解包- binwalk -Me WAVLINK-NU516U1-WO-A-2024-04-25-b516aec-GDBYFM.bin
复制代码[img=720,503.48448687350833]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/150999c2-0c6c-4884-9c44-9b54936fc33b.png[/img]
获得其解包文件,而我们要找到/squashfs-root/etc/lighttpd/www/cgi-bin中的wireless.cgi二进制文件,
它的位置在 cgi-bin目录下,它是Lighttpd Web服务器的一个后端CGI程序。
[img=720,213.95348837209303]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/302fac54-24e2-4cf7-a94f-a9660fcd42c4.png[/img]
当用户通过浏览器访问路由器的管理界面,比如说随便点击“无线设置”页面提交表单时,Lighttpd Web服务器会接收到这个HTTP请求。
Web服务器根据请求的URL,判断需要由哪个CGI程序来处理,对于无线设置相关的请求,它就会找到并执行这个 wireless.cgi文件。
wireless.cgi程序开始运行,它解析HTTP请求中的数据,比如你提交的表单项,然后可能会调用其他系统工具,如内置的 iwconfig、wpa_supplicant,或者直接读写配置文件, /etc/config/wireless来执行具体的无线网络配置更改。
处理完毕后,wireless.cgi会生成一个HTTP响应,比如一个成功响应的HTML页面,并将其输出到标准输出。
Web服务器捕获到这个输出,并将其打包成完整的HTTP响应,发送回给用户的浏览器。
与用户浏览器直接进行网络通信的是 Lighttpd Web服务器。
wireless.cgi是一个被Web服务器调用的后台程序,负责处理具体的业务逻辑。它是间接与外界通信的关键环节。
所以,这个wireless.cgi虽不直接与外界进行通信,但是它却负责处理用户从外部输入的数据,比如说HTTP请求参数,如果它对这些输入的处理不当,例如没有经过严格过滤就直接拼接成系统命令,就非常容易产生命令注入、缓冲区溢出等漏洞。
找到之后,拿IDA打开,观察其函数,先看main函数,首先用了fgets函数获取标准输入,拿到了用户提交的page参数值。
sub_405EA8函数将page参数值设置为GuestWifi,会跳转进入sub_4032E4函数。
sub_4032E4函数内,获取了Guest_ssid参数值,该值可以post传参可控,而且这段代码是典型的“功能开关”设计,程序在处理HTTP请求参数时,会依次读取多个配置值。
【----帮助网安学习,以下所有学习资料免费领!加vx:YJ-2021-1,备注 “博客园” 获取!】
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
从参数名可以推断,guestEn代表 “Guest Enable”,即访客网络功能的总开关,代码首先获取这个开关的值 (v2 = sub_405EA8("guestEn", a1,0));,并将其保存到变量 v4中,而Guest_ssid是依赖项,Guest_ssid是访客网络功能下的一个子配置项,它的逻辑处理必然依赖于总开关 guestEn是否开启。
随后Guest_ssid参数值被传入sub_407504函数内。
而往上看会发现,必须v4为1,才会去执行sub_407504函数,否则就会跳到label_11的地方去,而v4在往上看则能够发现是字符串guestEn的值。
所以构造poc的时候,必须将guestEn设置为1
而在sub_407504函数中,在其中拼接给v8变量,交给system函数执行,产生了命令注入。
[img=720,389.2610837438424]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/72dfc47a-c80c-49b1-961b-d825ef6d0e71.png[/img]
所以我们只需要构造page=GuestWifi&guestEn=1&Guest_ssid=1.txt就可以产生命令注入漏洞。
4.漏洞验证
首先使用工具将Wavlink模拟起来,这里选择了FrimAE- sudo ./run.sh -r Wavlink /home/fuzz/Wavlink/WAVLINK-NU516U1-WO-A-2024-04-25-b516aec-GDBYFM.bin
复制代码[img=720,279.64285714285717]https://www.yijinglab.com/guide-img/d9634e2f-3b66-42e7-8279-c0877cdd70e5/5c5645dc-f448-4f91-8cd2-17106f983d66.png[/img]
检查名为"httpd"的进程是否正在运行
设备正在运行 lighttpd Web服务器,其配置文件位于 /etc/lighttpd/lighttpd.conf
在浏览器打开F12,观察其Cookie,好帮助我们接下来发包的时候顺利。
接下来进行一个发包测试,将数值写入到poc.txt文件中,观察Wavlink路由器文件是否会出现poc.txt,且里面是否有我们注入的内容。
可以发现已经成功注入进去了,证明这里确实存在命令注入漏洞。
更多网安技能的在线实操练习,请点击这里>>
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |