Netgear n300 身份验证绕过漏洞

逆向工程 拆卸 固件 米普
2021-07-07 13:41:00

我一直在寻找的书面记录在美国网件N300认证绕过漏洞,我发现在文章中的一些矛盾与我对它的理解。我想对此有第二意见,因为我不太擅长阅读 MIPS 反汇编。

我对文章中的两个陈述有疑问

正如您在下图中看到的,如果 url 包含字符串 (BRS_netgear_success.html),它将移动到一段有趣的代码,该代码将 nvram 中的两个变量设置为 0(need_not_login 和 start_in_blankstate)

据我所知,nvram_set 函数将取自 asc_40B7A8 的第一个变量“need_not_login”设置为“0”(ascii),但我认为第二个“start_in_blankstate”设置为“1”。因为 $a1 设置为来自 aGate_interf+0x18 的值。我认为这是某种编译器优化。aGate_interf 从 0x40BCA8 开始,当我们添加 0x18 时,我们得到 0x40BCC0,它指向字符“1”。这是显示这一点的反汇编:

nvram_set 用于 start_in_blankstate
和 aGate_interf+0x18: aGate_interf+0x18

第二个错误也与此有关。作者声称,当“start_in_blankstate”的值与“1”不同时,登录将被绕过。

如果是,我们找到一个对 start_in_blankstate 的引用,它被比较为与 1 不同,如果是,则登录被绕过:

但这对我来说没有意义。据我了解,nvram_get 将 'start_in_blankstate' 的值加载到 $v0,然后将其复制到 $v1 并且 $v0 加载了 '1'。它们在 0x403940 处进行比较。有 bne 指令,因此如果它们不相等,则为真(绿色),如果相等,则为假(红色)并绕过身份验证。可以在这里看到: 身份验证绕过

这也很适合变量名称“start_in_blankstate”,当它设置为 1 时,路由器尚未启动并且处于空白状态,因此绕过登录,用户可以设置他的密码。我对此的理解是正确的还是作者正确的?

1个回答

据我所知,鉴于您提供的数据,您在两个帐户上都是正确的,如果我理解正确的话。

不过要注意两点:

  • inaGate_interf+0x18的值确实是设置为start_in_blankstate`的值,但鉴于第二张图片,那里的值不太清楚。

  • 如果start_in_blankstate等于“1”,则不采用分支,并且继续执行 strcmp` 调用(这可能是密码验证?)。

这可能是补丁版本,或者文章中的一些错误。它看起来确实有点像从其他地方复制的,或者固件下载的链接是在未经验证的情况下添加的。