CVE-2020-26567 DSR-250N 远程拒绝服务漏洞分析

阅读量    83744 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

0x01 漏洞信息

漏洞编号:CVE-2020-26567
漏洞详情:在路由器DSR-250N、DSR-500N路由器的固件版本3.17之前的固件中存在一个upgradeStatusReboot.cgi文件,未授权访问此文件能造成设备拒绝服务,不过这个漏洞在3.17B中已修复。

接下来我将从两个固件中来分析这个漏洞产生的原因,和其中的漏洞点,并且在分析的过程中,讲解一些分析固件中所要关注的点。

 

0x02 DSR-250N 固件分析

首先我们先获取来进行对DSR-250N固件的分析,我们很简单的就可以从D-Link Support 那里下载到我们要的固件DSR-250N_Ax_FW3.12_WW。

手动提取固件

拿到固件的第一步,大部分情况下都是用Binwalk来查看固件所带有的信息。用习惯了自动提取固件,这回,我们来手动分析固件然后提取我们需要的文件系统。
直接打开固件,我们先从固件文件系统最常见的中squashfs文件系统来入手,
以squashfs文件系统为例,我们首先要确定固件的magic签名头,常见的squashfs的头部特征有这些sqsh、hsqs、qshs、shsq、hsqt、tqsh、sqlz。
这里确定了固件的“hsqs”,发现了有两个,那么这个固件有可能是有两个squashfs类型的文件系统。

我们现在已经知道了文件的magic签名头,那么我们怎么确定squashfs文件系统的大小。
使用先将 “hsqs”的 magic 签名头的偏移地址开始 dump 出一段数据(一般 squashfs 文件系统的头部校验不会超过100字节)。然后使用 file 命令查看,可以看到 squashfs 文件的大小了。

然后我们将第一部分的squashfs文件从固件中 dump 出来,并且随后使用 unsquashfs 解开。

成功的解开文件系统中的内容,第一部分的固件解出来了,第二部分提取方式一样,这里就不再做赘述。

固件分析

根据漏洞详情,可以直接有效的定位到漏洞点upgradeStatusReboot.cgi,文件位于/www/中,一般来说,cgi文件都是和html的界面放在一起的,因此可以直接去/var/www/查找。

看到文件中的内容,很明显,文件中带有重启reboot的命令

漏洞文件找到了,接下来我们要知道是如何触发这个文件的,cgi文件的作用往往伴随着http的服务,我们应该往固件中web组件去分析,很快,我就在 /sslvpn/bin/ 中找到了 httpd 组件,这是一个在嵌入式设备中最常见的web服务的框架。
并且在文件系统的找到了 sslvpnInit 文件,里面可以看到启动webserver httpd 的命令,并且这个文件还有一个 httpkeepAlive.sh 的后台启动,根据文件命名,这是一个 httpd 的守护进程文件

接着定位 sslvpnInit 的调用方式,可以定位到 /etc/platformInit文件中,而 platformInit 却在系统自启动文件中被执行(/etc/init.d/rcS)

接着在对httpd 的逆向工程中,发现了httpd在启动的过程中,需要加载的文件,刚好的那个upgradeStatusReboot.cgi文件就在/var/www/ 文件中,正因为在启动的时候就需要加载这些文件,并且是不需要授权就可以访问,因此可以触发这个文件的命令。那为什么在还有一个 scgi-bin 的路径呢? 这里我们留着放到DSR-500N固件中再分析。

 

0x03 DSR-500 固件分析

DSR-500文件系统的提取方式和DSR-250一样,这里我们也很快的定位漏洞文件

查找一下这个文件有可能在那些文件中调用到,这里我们看到kepler.config 和 httpdKeepAlive.sh 文件。同时还看到了thttpd 文件,根据以往的固件分析,这大概率是DSR-500 设备的 提供设备web服务的组件。

在/etc/ 文件中,根据thttpd 文件,找到了thttpdInit文件,这个文件应该是thttpd的初始文件,文件内容主要的内容如下,可以看到此文件启动了thttpd组件,并且根据上面的kepler.config 和 httpdKeepAlive.sh文件,基本可以确定,可以根据80端口或者https设置的端口进行未授权访问platform.cgi、dbglog.cgi、quickvpn.cgi、upgradeStatus.cgi、upgradeStatusReboot.cgi 这几个文件。

我在我关注的一个文件userInit 中,这边根据Country 设置安全等级,但是我并没有发现这种设置有什么效果。

反而是发现了不同的漏洞触发点,结合上面的设置,在Russia 的固件,可以通过/scgi-bin/来触发漏洞,而其他地区的固件则是通过 /cgi-bin/ 来触发。

 

0x04 漏洞复现

 

0x05 总结

这里讲述了如果不使用binwalk 的情况下,如何手动的从固件中提取文件系统,并且对漏洞进行分析。
而且根据搜索引擎的搜索,SCGI是什么?其实这些都是为了更好的取代CGI的功能,SCGI全称Simple Common Gateway Interface。顾名思义,这个就是简单咯。scgi也是客户端/服务器端形式,客户端发送请求,处理,服务器端响应请求。简而言之,SCGI定义了发送或者响应报文形式的协议。

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多