OneShell

I fight for a brighter tomorrow

0%

CVE-2016-1554 Netgear wnap320 AP任意命令执行

漏洞概述

简介

undifined
Netgear wnap320 access point是一款很老的路由器设备,早已经停产了。
CVE-2016-1554是上述设备的一个未授权任意命令执行漏洞,通过构造字段macAddress可以拼接成命令让路由器执行。

影响版本

Netgear wnap320 access point Firmware == v2.0.3

漏洞危害

高危

漏洞复现

复现环境

kali、qemu5.2

漏洞原理

漏洞产生的原因是boardDataWW.php页面表单中,对于数据段macAddress的值在后端只做了符合”12个连续整数“字符串的验证,并没有对值整体合法性进行验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$flag=false;
$msg='';
if (!empty($_REQUEST['writeData'])) {
// maxAddress字段不为空 且 reginfo字段值正确 且 macAddress中存在满足[0-9a-fA-F]字符串
if (!empty($_REQUEST['macAddress']) && array_search($_REQUEST['reginfo'],Array('WW'=>'0','NA'=>'1'))!==false && ereg("[0-9a-fA-F]{12,12}",$_REQUEST['macAddress'],$regs)!==false) {
//echo "test ".$_REQUEST['macAddress']." ".$_REQUEST['reginfo'];
//exec("wr_mfg_data ".$_REQUEST['macAddress']." ".$_REQUEST['reginfo'],$dummy,$res);
// 直接将macAddress与命令进行了拼接 存在命令注入
exec("wr_mfg_data -m ".$_REQUEST['macAddress']." -c ".$_REQUEST['reginfo'],$dummy,$res);
if ($res==0) {
conf_set_buffer("system:basicSettings:apName netgear".substr($_REQUEST['macAddress'], -6)."\n");
conf_save();
$msg = 'Update Success!';
$flag = true;
}
}
else
$flag = true;
}
?>

漏洞复现

使用qemu的system模式对路由器整体进行模拟,还是比较简单的,而且漏洞也是php漏洞,分析也不复杂。
首先进行固件的提取,比较简单,在官网上可以下载到存在漏洞版本的固件,然后使用binwalk直接就可以将固件解压,得到的是squashfs文件系统。

1
binwalk -Me WNAP320_V2.0.3_firmware.tar

undifined
使用qemu的system模式对路由器整体进行模拟,虚拟机的搭建过程以及文件系统的挂载可以参考此处
搭建完毕后分析路由器相关进程的启动,在文件夹squashfs-root/etc/init.d/中的启动脚本进行分析,可以知道路由器的整体是由脚本rcS进行初始化的。于是挂载文件系统后直接启动脚本,对路由器进行初始化。
undifined
初始化完毕后,查看虚拟机的网络设置,对相关页面进行访问,看是否启动成功。
undifined
说明路由器的web服务至少是正常启动了,尝试使用EXP去打,的确存在命令执行漏洞
undifined

防护方案

这个程序员就是只对符合标准的字符串进行了正则的匹配,但是却没有对字符串整体进行合法性的验证。

相关链接