路由器漏洞挖掘

admin 2025年3月25日21:54:34评论30 views字数 3099阅读10分19秒阅读模式

工具

漏洞挖掘用到的工具:binwalk、firmwalker、IDA、burpsuit。

  • • Binwalk用于解包固件,如果使用Kali自带的binwalk很可能会造成有些未加密的固件,解包解不出来的问题;这时候你需要去进行完全安装binwalk。完全安装的方法可Google查找,有很多。
  • • firmwalker是用于帮你快速分析固件的一些信息;让你可以在短时间内了解一款固件的大致框架以及一些服务项;安装方法可自行Google,有很多教程。
  • • IDA用于分析固件的漏洞点;需要掌握IDA的一些基本使用。字符串查找、函数查找、交叉引用等。
  • • burpsuit主要是用于漏洞的验证工作。

挖掘流程

  1. 1. binwalk -eM 固件 --run-asroot
  2. 2. Firmwalker 路径(/home/....../squashfs-root),定位处理文件。
  3. 3. 将处理web服务的二进制文件使用IDA反编译,进行审计。
3.1 看危险函数,例如system、memcpy、strcpy、strncpy等危险函数。3.2 根据危险函数,查找可能存在漏洞的接口;查看当中的参数是否可控。3.3 寻找前端传入的参数的接口,拼接命令或者长字符串导致溢出;将审计出的漏洞寻找设备进行复现。

Netis-WF2210型号路由器:审计过程(通过接口传入的参数,找到处理参数的函数)

fofa随便搜了一下,弱口令进了后台,看到了版本型号,每个模块功能都点了一下,看了数据包和接口之后,再去官网找固件,解包开始审计。拿到固件之后,对固件进行解包,解包之后,看以看到整个文件系统。接着使用Firmwalker对系统进行初步的一个信息收集。

路由器漏洞挖掘
路由器漏洞挖掘

使用firmwalker之后,生成一份信息清单。根据这份信息清单,就会对整个文件系统有个初步的了解。其实直接就能看到web的目录。

路由器漏洞挖掘
路由器漏洞挖掘

到web目录当中,结合站点页面进行分析,看到参数是从/cgi-bin-igd/netcore_set.cgi传入;然后用cgi-bin目录下的cgitest.cgi对传入的参数进行处理。将文件使用IDA打开,对文件进行反编译、审计。

路由器漏洞挖掘

根据数据包当中的参数dns_b,在IDA搜索字符串,然后找字符串被sub_403BDC这个函数引用。通过查找看到sub_403BDC这个函数对web传入的很多参数都进行了处理。

路由器漏洞挖掘
路由器漏洞挖掘

审计之后发现,sub_403BDC函数当中,location_time_enable、led_off_on_status、location_time,这三个参数从前端(netcore_set.cgi)传入,传入之后没有进行过滤等操作,通过sprintf函数进行格式化处理之后,直接使用system函数执行,导致了命令执行漏洞。

路由器漏洞挖掘
路由器漏洞挖掘

找到漏洞之后,直接找设备开始测试。弱口令登陆后台之后,开始检验成果。意外的是,直接能前台RCE,大概是因为固件比较老了,以前的校验不严格。

路由器漏洞挖掘

某型号路由器:审计过程(直接审计固件,找到存在漏洞的函数,然后再去找传入参数的接口。)

fofa随便搜了一下,弱口令进了后台,看到了版本型号,直接就去官网找固件,解包审计出漏洞之后,再去寻找接口复现漏洞。 使用binwalk -eM 123.bin --run-as=root解包,得到整个文件系统。firmwalk进行信息的收集处理,定位到处理web服务的文件,定位到文件为lighttpd在/usr/sbin/目录里面,拿到本地开始审计。不是所有的路由器都一样,需具体情况具体分析,firmwalk这款工具一般情况都能找到处理文件。

路由器漏洞挖掘

查找危险函数system,IDA交叉引用,查找存在漏洞的函数。搜索之后发现sub_456BCC函数存在RCE。前端传入的flag的值给到parm。判断parm是否等于cmd,parm的值等于cmd之后,前端会将传入的cmd的值给到V10,然后将V10的值通过sprintf函数进行格式化处理,并将格式化后的字符串通过system函数执行,最后构造命令达到RCE的效果;

路由器漏洞挖掘
路由器漏洞挖掘

确实找到了RCE的点,但是符号表被去掉了;无法直接判断出是从那个接口传进来的参数。这时候就需要去看函数当中的的关键词了。例如上述的关键词为“msp”,那么可以进行关键词查找,发现msp_info.htm,然后直接构造参数。直接就开始找设备测试。其实有时候实在是关键词找不到接口的时候,可以直接去rodata段寻找所有的接口名称,找个感觉差不多的试一下,大不了就都试完呗。

路由器漏洞挖掘

可以看到直接就RCE了。数据包当中存在cookie,显而易见,这个RCE是需要登录到后台才能触发的。算是有点鸡肋,不过不影响水漏洞,这款路由器还是有一定用户量的,所以不太方便说具体型号。

路由器漏洞挖掘

补充

这里再提及一下接口查找的问题。就使用登录的数据包为案例。下面是/login.cgi登录的数据包,那么如何根据这个数据包,去二进制文件当中寻找对应的处理函数呢?前提是定位到了处理web服务的文件,然后用关键字查找,例如登录数据包的关键字为“user”和“password”

路由器漏洞挖掘

IDA打开文件,使用shift+F12查看所有字符串,然后CTRL+F搜索password字符串;双击点进去。按X查找引用,再点进去。

路由器漏洞挖掘
路由器漏洞挖掘

然后就能找到带有password字符串的函数,F5一下,很明显sub_4445EC函数就是处理登录逻辑的函数,也就是数据包当中的login.cgi。

路由器漏洞挖掘
路由器漏洞挖掘

还有就是找不好处理web服务的文件的,你就去squashfs-root文件夹下面,grep -r “password” 这条命令能找到带有字符串password的二进制文件,找到文件之后,重复接口查找的方法判断一下,这样差不多就能找准web服务的处理文件。还有就是去Firmwalker收集的信息基本上也能判断。多实操、多看文章复现,其实有些东西看多了,操作多了自然而然就有经验了。逆向一半多都是靠猜,而这个“猜”就是从经验来的。

问题及解决

固件寻找以及固件版本问题?

有些固件因为地区问题或者别的稀奇古怪的问题,国内官网是找不到的;这时候就可以去Google搜索一下,找一找,大多数还是能找到的。还有就是不要太苛责固件版本,只要固件的大版本没什么问题,具体的小版本的差别不大就可以审计。审计之前可以找一找历史漏洞,这会对对审计有一定的帮助。

找不到固件对应的资产,又或者说找不到想要的固件?

直接fofa找到一款路由器之后,找弱口令进去。进去之后基本上都能直接看到具体的版本型号;或者进去之后去找数据包,有个数据包当中能看到具体的版本型号。知道具体的版本型号之后,去下载。下载下来解包开始实操。但是比较新的固件都是进行加密了的,需要去网上找一些开源的解密脚本,或者你自己去逆出来。

关于溢出漏洞的进一步利用?

溢出漏洞需要去启动虚拟环境qemu模拟固件或者买一台设备。然后去gdb --attach去调试,构造一个ROP链,达到RCE的效果。qemu环境我真没启动成功过;不知道是怎么回事。所以索性就放弃了启动环境模拟固件。遇到溢出漏洞一般验证一下就差不多了,无法进一步利用的溢出漏洞感觉等于DDOS。如果想进一步利用溢出漏洞的话,真得启动一个环境模拟固件,而且还需要去看一下PWN方面的知识。

感谢

在此感谢@99999九爷的深情陪伴、@cxaqhq师傅的IOT漏洞平台以及@Go1d0g悲伤番茄师傅的指点。 本人的经验大抵就这些了,确实有些捉襟见肘,见谅见谅。有误之处,还请指出。

原文链接

https://www.t00ls.com/articles-73007.html

原文始发于微信公众号(T00ls安全):路由器漏洞挖掘

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月25日21:54:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   路由器漏洞挖掘https://cn-sec.com/archives/3884222.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息