加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、容器安全、数据加密、云日志、云数据迁移!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

[原创]D-Link 漏洞挖掘

发布时间:2023-03-01 10:31:29 所属栏目:Linux 来源:转载
导读: 目录前言
学习二进制漏洞有一段时间了,一直学,一直复现,属实有点无聊,但实战挖系统漏洞或者虚拟化有点难度,于是就把目光放到了路由器,于是又学了一段时间的路由器漏洞挖掘基础,最终

目录前言

学习二进制漏洞有一段时间了,一直学,一直复现,属实有点无聊,但实战挖系统漏洞或者虚拟化有点难度,于是就把目光放到了路由器,于是又学了一段时间的路由器漏洞挖掘基础,最终开始分析了D-Link路由器

了解

首先我们去cve-list可以看下历史漏洞,可以看到最近分析DIR-816型号的有点多,那我们也来分析它,但分析之前可以查一下该型号的版本,如果发现A2_v1.10CNB04(简称“B04”)还有更高版本,那尽可能分析更高版本,说不定可以捡漏,在查找版本时,发现它有B05,我选择B05分析

分析

固件下载和binwalk解压我就跳过了,解压后查看rcS文件,发现启动了telnetd和goahead服务,由于不太清楚goahead服务是什么,于是百度了下,发现是嵌入式web服务器

于是从web服务入手,用IDA打开goahead

命令注入

根据cve-list发现在B04的web服务接口setSysAdm存在命令注入,于是我定位B05的setSysAdm接口

doSystem函数是对system函数的二次封装,根据函数可以发现会执行var、v2和v4,这三个参数,但v2变量不可控,所以没办法利用,var和v4分别是admuser和admpass的值,可以利用

栈溢出漏洞

根据cve-list发现在B04的web服务接口form2IPQoSTcAdd存在栈溢出,于是我定位B05的form2IPQoSTcAdd接口

发现只要v10不为0,进去后都会执行sprintf函数,造成栈溢出,而v10值取决于ip_ctl_carrules初始化成功与否,一般情况下肯定成功,所以一定会造成栈溢出

前面都属于捡漏,下面可以利用IDA查找strcpy,sprintf等危险函数的使用,这里就不过多叙述这种方法了,在浏览cve-list发现了B04的web服务接口form2Wan.cgi存在栈溢出,当wantype为3时,l2tp_usrname会被base64解密,结果存入v94,不检查l2tp_usrname的大小,导致栈溢出。由于该溢出和解密有关,所以我就比较好奇了,查看了B05对应接口

有点出入,但出入不大,websDecode64应该是解密函数,第二个参数是l2tp_usrname值,第三个参数是l2tp_usrname的长度,所以第一个参数应该是存储解密后的内容,进一步查看websDecode64函数,发现是base64解密linux漏洞,并且对长度没有限制

这个函数也可以作为危险函数查找,最终提交了6个cve,捡漏两个,挖了四个

调试

用file命令查看goahead,可以看出是32位,小端存储,mips架构

直接运行goahead程序会挂,因为没有相应的配置文件,我们可以尝试调试,先用IDA在主函数打断点

根据汇编和反汇编代码,在各个if里面查看是否有return,在里面有return的if全部打断点,直到web服务启动前的所有if,然后f4,跳转下一断点,如果跳转下一断点,调试结束,说明上一个if,需要修改值,最终需要修改的就是91行的setdefault和126行v19

经过上面两个判断,最终就可以运行了

后面登录,也是需要修改值才能登录成功,如果想要验证的漏洞的话,可以自己尝试一下

看雪2022 KCTF 秋季赛 防守篇规则,征题截止日期11月12日!(iPhone 14等你拿!)

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!