1. 前言
刷文章突然刷到了Netgear的新爆出来的命令执行漏洞,打算试试看。不过由于环境问题,命令执行的代码实际上写不进去,也没得解决掉。。。
ps:没复现出来,不过文章里有POC。
2. 实验环境
1 | Ubuntu 20.04 |
固件下载地址
1 | https://www.downloads.netgear.com/files/GDC/WNR2000V4/wnr2000v4-V1.0.0.70.zip?_ga=2.61220586.756282065.1703562778-449272902.1703562778 |
3. 固件模拟
下载下来固件后,是一个.img的文件,直接用binwalk分离就行。
查看文件系统架构,大端序
起一个qemu-mips的虚拟机,然后准备把文件copy进去。
1 | sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1" -netdev tap,id=tapnet,ifname=tap0,script=no -device rtl8139,netdev=tapnet -nographic |
账密是root/root
这里我提前配置好了IP一类的,具体脚本参见之前的blog。这样有个好处就是,模拟出来的mips虚拟机里面会自动获取一个IP,同时这个IP可以和宿主机(Ubuntu)以及物理机互相通信,也可以通外网。
然后将我们的squashfs-root
文件复制到mips虚拟机中
1 | sudo scp -r squashfs-root root@192.168.7.41:/root/ |
当然,偶尔也会出现问题,比如下面的报错
这里其实就是因为我每次mips虚拟机的IP都是一样的,导致了我们ssh的文本中,主机标识出了问题。解决方法也很简单,直接把/root/.ssh/known_hosts
里面的内容删掉,然后重新copy就行,再复制的时候就很正常了。
成功上传
指定根目录。chroot命令用来在指定的根目录下运行指令。chroot即change root directory
(更改root目录)。
1 | chroot ./squashfs-root/ /bin/sh |
直接运行/usr/sbin/uhttpd
文件,虽然会报错,但是服务也起来了。不过好多内容都是400
的错误。不清楚漏洞复现不成功是不是和这部分有关系。
访问网站后,后台那边会报如下问题
4. 漏洞利用
根据漏洞描述,当使用HTTP进行SOAP身份验证时,命令执行发生在身份验证成功后的过程中。也就是这个漏洞的利用前提是有账密
,能够登陆进后台。
在SOAP认证函数soap_auth
中,认证成功的数据包User-Agent
会被写入到/tmp/soap_user_agent
文件中,从而导致命令注入。Injecton
可以通过handle_request -> ExecuteSoapAction -> soap_auth
来触发。
1 | soap_auth(){ |
当然,上面是官方描述中的内容。我用ida去分析uhttp的时候,估计是反编译的问题吧,实际上有些出入。
4.1 soap_auth函数
uhttp
中soap_auth
函数内容如下:
1 | int __fastcall soap_auth(_DWORD *a1, int a2, int a3, int a4) |
复现漏洞的时候发现问题,怎么发包都提示权限不够。一开始以为环境搭建有问题,毕竟搭起来后缺东少西的,切换了user态
和system态
后发现都是一个状况,提示权限不够。
不过测试发包倒也发出去了
半天没搞明白咋回事,上GDB调试看了眼才发现main函数都没走出去。。。
开个远程调试
1 | sudo chroot . ./qemu-mips-static -g 1234 ./usr/sbin/uhttpd |
GDB开启,加载端口
1 | gdb-multiarch ./usr/sbin/uhttpd |
给main函数入口处下个断点
成功断在main函数这
一路往下运行,一直到0x4043F4
地址
对应反编译代码中的getopt_long
函数
跳转到T9对应地址,0x454870
处
对应汇编代码如下
运行到0x454878
地址,发现开始往0x7f7edbc0
跳转,然后就一直循环,出不来了。。。
而且main函数反编译的代码中,还有一个while(1)
的死循环,也不知道是不是和这个有关系。
4.2 main函数
main函数反编译代码如下
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
也没看明白具体咋回事,反复调试也没搞定这个玩意。流程压根走不到soap_auth
函数这个地方。不过POC看起来倒是挺正常的,估摸着还是我环境有些问题。
暂时放弃~~~
5. POC
1 | GET http://192.168.7.39/currentsetting.htm HTTP/1.1 |
6. 参考链接
1 | WNR2000v4-1.0.0.70 Authorized Command Injection |
发布时间: 2023-12-26
最后更新: 2023-12-29
本文标题: NETGEAR-WNR2000命令执行漏洞(CVE-2023-50089)
本文链接: https://foxcookie.github.io/2023/12/26/NETGEAR-WNR2000命令执行漏洞(CVE-2023-50089)/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!