Netgear DGN1000 命令执行

IoT 2年前 (2022) admin
877 0 0


0x00. 前言


相信各位关注我们的小伙伴们,之前肯定已经阅读过了我们的一篇叫DIR600绝对路径遍历的文章,那么今天我们来了解另外一种漏洞类型:命令执行。


0x01.固件模拟


  • 型号:Netgear DGN1000

  • 版本:DGN1000WW_V1.1.00.45

  • 官网:https://www.netgear.com/

  • 测试环境:Ubuntu 18.04


使用FirmAE对固件进行模拟,执行的命令如下

sudo ./run.sh -r 1000dng ./firmwares/DGN1000WW_V1.1.00.45.img [sudo] password for iot: [*] ./firmwares/DGN1000WW_V1.1.00.45.img emulation start!!![*] extract done!!![*] get architecture done!!![*] ./firmwares/DGN1000WW_V1.1.00.45.img already succeed emulation!!!
[IID] 2[MODE] run[+] Network reachable on 192.168.0.1![+] Web service on 192.168.0.1Creating TAP device tap2_0...Set 'tap2_0' persistent and owned by uid 0Bringing up TAP device...Starting emulation of firmware... 192.168.0.1 true true .040925734 .040925734


当看到两个true的时候,可以证明固件的Network和Web都已经起来了,使用默认的admin:password登录即可

Netgear DGN1000 命令执行


0x02. 命令执行漏洞


对固件使用binwalk进行解压

binwalk -Me ./DGN1000WW_V1.1.00.45.img

对固件进行解压,进入到系统目录下面

Netgear DGN1000 命令执行

先对各个目录的文件进行检查,查看web端相关代码,可以看到很多请求都与setup.cgi有关

Netgear DGN1000 命令执行


那我们先去看看与setup.cgi相关的的文件

grep -r 'setup.cgi'  

Netgear DGN1000 命令执行


可以看到好多前端的页面都引用了这个文件,都是通过GET,POST请求到这个文件,最后找到这个文件的源文件是在/usr/bin目录下面,接下来打开IDA对这个文件进行一下分析

Netgear DGN1000 命令执行

Netgear DGN1000 命令执行


可以看到setup.cgi对应的Action表,查看左侧的函数表,可以发现一个syscmd的函数

Netgear DGN1000 命令执行


syscmd函数将cmd获取的值通过snprintf格式化到变量v7中,并且对传入的数据没有进行任何过滤,存在命令执行漏洞

通过grep检索与syscmd相关的文件

Netgear DGN1000 命令执行

好家伙还有一个syscmd.htm页面,我们直接访问一下看看

Netgear DGN1000 命令执行


是一个需要授权的命令执行页面,可以看到发送命令访问的目标url为/setup.cgi?todo=syscmd&cmd="+$("#cmdbox").val()+"&curpath="+$("#curpath").val(),传递的键值是todo,cmd和curpath,逆向分析setup.cgi如下:

Netgear DGN1000 命令执行


Netgear DGN1000 命令执行


看到在主函数中使用todo去指定要执行的函数,既然发现了有可以执行命令的函数,那么咱们可以构建一下setug.cgi?todo=syscmd 是不是就可以去执行命令了

接下来直接浏览器访问http://192.168.0.1/setup.cgi?todo=syscmd

Netgear DGN1000 命令执行

发现需要授权,咱们先不管,刚刚在IDA中发现使用cmd去接受的参数,我们去给它赋值再看看

Netgear DGN1000 命令执行


一样还是需要授权,那我们就输入一下账号密码看看能不能执行

Netgear DGN1000 命令执行


0x03.未授权漏洞


上面已经讲解了授权下访问http://192.168.0.1/setup.cgi?to=syscmd&cmd=cat+/www/.htpasswd,成功读取用户名和密码存储的文件,那么如果存在未授权漏洞,则可以未授权执行任意命令

搜索和http相关的服务,可以看到耳熟能详的的mini_httpd,mini_httpd是一个小型 HTTP 服务器。它的性能不是很好,但对于小型的路由器已经足够使用了

Netgear DGN1000 命令执行

使用IDA打开可以得到如下反汇编内容

Netgear DGN1000 命令执行


根据mini_httpd,去github搜索,在如下链接:https://github.com/peter-leonov/mini_httpd,即可获得mini_httpd的相关源代码,只要找到厂商自己添加的模块即可

Netgear DGN1000 命令执行


在main函数的第609行,对应mini_httpd的handle_request的函数

Netgear DGN1000 命令执行


这里是处理http请求的函数

Netgear DGN1000 命令执行


Netgear DGN1000 命令执行

通过和mini_httpd的源码进行对比可以发现,从240行以后是厂商自己添加的处理函数,在这里我们可以看到比较请求的路径是否含有currentsetting.htm,有则将对应的变量设置为对应的值,继续往下跟踪

Netgear DGN1000 命令执行


536行,对应mini_httpd的do_file函数,里面包含权限验证,跟进查看

Netgear DGN1000 命令执行


通过逆向分析可以知道,携带的请求含有currentsetting.htm,则会授权响应,那么针对上面的命令执行漏洞,只要在请求中添加上currentsetting.html触发授权响应即可,payload如下:

http://192.168.0.1/setup.cgi?todo=syscmd&cmd=cat+/www/.htpasswd&currentsetting.htm

Netgear DGN1000 命令执行

可以看到可以在未授权的情况下,成功读取了htpasswd密码文件,那么同理可以在未授权的情况下执行任意系统命令



0x04.总结


以上内容就是针对Netgear DGN1000未授权命令执行的全部分析过程,通过分析可以看到结合github开源项目对逆向分析事半功倍,常见的嵌入式设备web服务端,如goahead,lighttpd等,在市面上的使用量很高,并且也进行了开源 ,相信结合开源代码,能帮助大家快速恢复相关结构体并快速定位到厂商自己的代码,提高漏洞分析和挖掘的效率。


Netgear DGN1000 命令执行

原文始发于微信公众号(IOTsec Zone):Netgear DGN1000 命令执行

版权声明:admin 发表于 2022年1月27日 上午8:00。
转载请注明:Netgear DGN1000 命令执行 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...