Netgear R6220 认证绕过漏洞(CVE-2019-17137)

安全入门
2023-08-16 21:41
144414

固件下载

我们可以在官网上下载1.1.0.114和1.1.0.86版本的固件

漏洞位置

根据提示,通过在路径中插入一个null字节,用户可以跳过大多数身份验证检查。%00为空字符串,我们在漏洞修复后的文件里查询对%00的判断,找到了mini_httpd文件,对mini_httpd进行分析,发现存在%00字符串,那么漏洞应该就在mini_httpd中

测试

这里固件用FirmAE不能直接模拟出来,我们直接用fofa搜索R6200,访问url/currentsetting.htm查看当前版本信息


分析

起初,我们在浏览器中随机访问了一些html界面,发现有些界面是可以不经登录就可以访问的,如:currentsetting.htm、update_setting.htm、debuginfo.htm等,然后我们用IDA分析时,查找字符串,然后发现这些界面都存在于下图.data一段空间里

我们xrefs一下,发现在函数中引用

分析下图,程序j指令跳到一个循环

循环的作用主要是检测uri中是否有不需要检测登录的htm

上图中,当发现目标字符串时,将$v6置1,在下图中就会根据$v6的值决定是否需要验证身份

在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,我们在固件版本为114的网页路径中添加%00字节试试看

我们发现页面报了400错误,并且显示了null字节,这说明在mini_httpd中出现了对%00字符串的过滤
在114版本固件中查找程序中的%00字节(这里使用100版本的固件,效果一样)

我们发现在114的版本中是有%00的空字节的,我们用ida打开逆向分析一下可以发现修补后的程序是对uri进行了过滤,如果检测扫%00就直接错误处理

下图是错误分支的处理

以上分析就是对100版本的分析,程序会检测uri中是否含有不需要登陆验证的界面,还会检测程序中是否有%00,若有,则抛出错误界面

现在我们去86版本中查找%00字节

并没有这个“%00”,就说明没有过滤%00,没有对uri进行空字符串进行过滤。

攻击

根据上面的分析,我们可以构造url/index.htm%00currentsetting.htm, 在解析uri时,遇到%00产生截断,所以请求的是index.htm页面,后面currentsetting.htm无需验证登录,因此在请求index.htm时不需要验证登录

分享到

参与评论

0 / 200

全部评论 0

暂无人评论
投稿
签到
联系我们
关于我们