在挖掘ruckus服务器的漏洞过程中,首先就是想要登陆进去。所以要找一个路径穿越的漏洞,想到了可以用../../../或者是URL编码后的%2e%2e%2f%2e%2e%2f%2e%2e%2f,进而读取密码文件,但是实践证明不行。比如supportinfo.txt是/www下的一个文件,用来存储路由器的log。如果存在路径穿越,则GET /images/../../../../../../../../../../../supportinfo.txt应该读取不到文件,但最后还是能读到supportinfo.txt。说明将../以某种方式限制在了/www目录
ruckus使用的是GoAhead2.1.8,让我们看看其源码做了哪些处理吧
在这之前可以看看历史漏洞:
https://www.exploit-db.com/exploits/21707
https://www.exploit-db.com/exploits/20607
在多次尝试过后,没法读取在/www外的文件。
虽然如此但还是发现了信息泄露的漏洞,ruckus路由器请求路径以/images/开头可以任意读取/www中的文件,其中supportinfo.txt包含了各种调试信息,(但supportinfo.txt必须在登陆调用相关功能后生成,如果目标曾经使用了这个功能就可以读取到相关内容),可造成信息泄露,比如ps信息,版本信息等。
关于路径穿越比较经典的例子有tp-link的,https://sec-consult.com/fxdata/seccons/prod/temedia/advisories_txt/20150410-0_TP-Link_Unauthenticated_local_file_disclosure_vulnerability_v10.txt,可以直接读取到密码。
其中GoAhead历史漏洞就有https://www.exploit-db.com/exploits/21707
以redirect为例,当你访问目标机器当前不允许访问的页面时会把你重定向到登陆页面。但是其中重定向host是由你发的包的host头决定的,如果你发的越长,返回的也就越长,如果没有准备足够的空间就会造成溢出.
这么说比较模糊,可以看d-link的溢出漏洞,CVE-2018-11013,相关文章:https://0x3f97.github.io/exploit/2018/05/13/D-Link-DIR-816-A2-CN-router-stack-based-buffer-overflow/
GoAhead
这里从代码分析。
其中WEBS_MAX_URL,#define WEBS_MAX_URL 4096 / Maximum URL size for sanity /,尝试过超过4096,burpsuit显示done,但是没有响应包,不会崩溃。
用burpsuit测了好多其他的变量,都不能达到效果。
在最开始接触路由器安全的时候对URL各种请求路径还是很疑惑的,下面就结合ruckus webs二进制文件和源码分析。
IDA反汇编main函数片段,开头有一大段这些mips汇编,是不是不知道该如何分析呢
好在我们可以看源码
看initWebs()
解析URL路径第一层,如果是goform就用websFormHandler处理,如果是 cgi-bin就用websCgiHandler处理,如果是其他,就是websDefaultHandler处理。
对于cgi,编译好源码,把直接把busybox放到/cgi-bin,然后就“命令注入”了一把。
在实际应用中,如果提取解开了固件,对于cgi程序(也有lua php等),都可以找找命令注入。
可以看到下面的源码,其实最后是起了一个程序。
除了cgi,还有一些其他的自定义的路径,都可以尝试去挖掘漏洞,如之前dlink /hnap就爆出漏洞。https://fortiguard.com/encyclopedia/ips/40772
从这里,可以明白两点,一是可以从固件解开得出的webs程序中找到有哪些路径可以访问(找未授权访问),二是这些路径对应的函数(用来分析漏洞,完成利用)
以上是我在挖掘ruckus漏洞时总结的一些东西,和大家分享下,大家最好结合源码自己分析,如果你也对路由器漏洞挖掘感兴趣。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!