路由器漏洞挖掘利用的一些基础知识
提取固件的几种方法
1 从厂商网站下载
2 代理或镜像设备更新时的流量
通过MITM提取出下载URL,或许还需要设置UA
3 直接从设备转储固件
固件一般烧录在FlashROM上,通过以下几个方法获取
1 用编程器+烧录夹读取
2 用TTL小板连UART串口从bootloader中提取或者直接进shell
3 把FlashROM 切下来,再用编程器+烧录底座读取
4 Google搜索
固件中提取文件系统
1 binwalk
binwalk -e
binwalk -E 进行熵分析,判断是否有加密
文件系统分析方法
1 查看配置文件,Web 目录, 口令文件,查找后门等
find . -name "*.conf"
2 使用firmwalker
3 对二进制文件进行分析
动态分析
1 基于固件仿真的自动化脚本
Firmware Analysis Toolkit(Firmadyne的自动化脚本)
Firmadyne
2 手工下载目标架构的debian镜像,chroot运行web服务器或其他需要测试的组件
3 有真机的情况
先root设备,再把gdb扔上去,在shell里面用gdb附加目标漏洞进程
4 qemu
路由器的构造
CPU FlashRom RAM 其他(网卡,天线,调试接口,各种元器件等)
挖洞主要关注FlashROM(可能需要真机提取固件) UART串口(可能用来getshell和调试)
路由器的攻击面
1 web
几种不同web架构
1 一个web后台进程+ 多个cgi程序 + 各种静态资源
优先逆cgi程序,这些cgi一般实现管理业务,容易有命令注入,然后再逆web守护进程
2 一个web后台进程 + 各种静态资源
3 一个web后台进程 + 解析器与lua/php/asp + 各种静态资源
先审计脚本程序,容易出现命令注入
2 实现upnp的代码
几乎所有路由器都有实现upnp协议的代码,这个协议主要用于局域网中设备间的通信,路由器在实现upnp中某个自定义action时,可能会有输入数据处理不当的溢出漏洞,命令注入较少
3 实现一些私有协议的代码
例如,很多路由器厂商有提供“设备发现”功能,容易出现溢出
4 后门类漏洞
路由器自带telnetd/ftpd/sshd,可以看看有没有厂商留下的后门密码
路由器的漏洞利用技巧
1 基于http的命令注入漏洞
;cmd;
|| cmd ||
&& cmd &&
2 栈溢出
基本套路和pc端一致,一些差异如下
1 路由器大端字节序居多,遇到strcpy sprintf存在溢出时,返回地址有00会复制不过去,解决办法是跳到动态库中的代码,一般不会有00
2 路由器一般不会开ASLR,NX经常开启,构造ROP即可
路由器shell的利用
1 wget
2 tftp
3 用echo写文件进去
echo -e -n "\x11\x22\x33\x44" > /tmp/elf
路由器漏洞分析练习
DVRF