httpd中的第一个页面处理代码自动允许一些页面页面

这段代码是httpd中的第一个页面处理代码,它会自动允许一些页面,比如form.css或者func.js,一般这些设置都没有问题,但是例外的是NetGear使用strstr函数来检查是否有“.jpg”、“.gif”或“ess_”字符串来匹配整个 url。

因此,我们可以使用 GET 方法访问设备的任何接口,带有字符串(如“?.gif”),在 URL 中带有 strstr 校验,包括认证接口,使用如下

您可以成功绕过认证访问路由器管理界面。

通过加密的侧信道攻击推断路由器凭据

在这个阶段,我们可以完全控制路由器管理界面,但我们将继续讨论身份验证本身是如何实现的。

我们注意到 httpd 组件在 http 接口上执行基本身份验证。用户名和密码需要使用base64编译,然后在http头中发送。最后,验证保存在路由器内存中的用户名和密码。路由器将这些信息存储在 NVRAM 中间。

在我们的身份验证检查过程中,我们发现了一种旁通道攻击,该攻击可能允许攻击者获取正确的凭据:

请注意,用户名和密码是使用 strcmp 进行比较的,libc 中 strcmp 的实现通过逐个字符进行比较,直到观察到 NUL 终止符或发生不匹配。

攻击者可以通过测量失败所需的时间来利用后者。例如伪代码用什么软件写,在测量第一个字符的次数时,我们得到下图:

这意味着第一个字符是“n”。攻击者可以重复这个过程(“na”、“nb”、“nc”等)来获取第二个字符,直到整个用户名和密码被泄露。

我们向 NETGEAR 建议,他们可以通过执行基于 XOR 的内存比较来避免此类攻击,例如:

图片[1]-httpd中的第一个页面处理代码自动允许一些页面页面-老王博客

即使字节不匹配,该函数也会继续。在诸如 OpenSSL 的 CRYPTO_memcmp 之类的加密安全库中可以看到类似的方法。

检索存储在设备中的密钥

在完成认证绕过漏洞之后,我们仍然想看看是否可以利用其他现有漏洞来恢复路由器使用的用户名和密码,因为我们决定使用路由器的配置备份/恢复功能。

我们可以使用身份绕过来获取文件:

hxxp://router_addr:8080/NETGEAR_DGN2200[.]cfg?pic[.]gif。

该文件具有高熵,这意味着它是加密的,我们无法直接读取内容,并且 binwalk 不会产生任何结果。

当我们反转“备份\恢复”功能时,我们的问题就解决了。

可以看到文件内容是用“NtgrBak”密钥进行DES加密的。因此,也可以通过这种方式获取存储在 NVRAM 中的密码。

展开 Ex6100v2 固件分析

看了这里的漏洞分析文章,根据之前对网件固件的分析,发现这种情况在很多版本的固件中都存在,于是我在实验室拿出了网件Ex6100v2路由设备伪代码用什么软件写,下载到对应版本的固件,然后检查固件被解包和分析。

根据/etc/init.d/rcS文件的内容,找到uhttpd的组件(uHTTPd是OpenWrt/LUCI开发者从零开始编写的一个web服务器),可以看到这个固件采用了NX保护措施。

在我对/etc/boot文件的分析中,看到了如下内容,也可以证明这是一个OpenWRT类型的web组件。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论