基于tenda路由器的缓冲区溢出漏洞总结
基于tenda路由器的缓冲区溢出漏洞总结
前言
本文仅基于tenda-AC6和tenda-AC15的路由器的情况分析
仅为个人理解
漏洞共性
类型:栈缓冲区溢出(CWE-120 / CWE-121)
位置:集中在 Web管理接口 /goform/xxx
根源:无输入长度校验,直接用 strcpy/sprintf/strcat 拷贝到固定栈缓冲区
危害:远程代码执行RCE、设备崩溃、未授权接管
条件:多数无需登录,直接POST恶意请求即可触发
环境搭建
tenda类路由器的web服务的启动都是靠一个名为httpd的程序,但是开启的仅仅只是web的服务,不是整个路由器的服务,所以可以通过查找inittab中的rcS的内容,这个rcS是路由器启动必须项
然后进行qemu模拟时会发现,不管是用户态还是系统态,都会卡在输出welcome的地方,gdb调试一下发现程序是一直在一个哦按段中循环,经IDA分析后可以发现程序会无法通过两个循环条件,所以直接给他返回1就可以正常启动了,然后会发现qemu用户态启用时并没有给ip,给的是255.254.255.255,tenda产品是使用br0网卡,所以执行一下sudo brctl addbr br0;sudo ifconfig br0 192.168.29.129/24,然后重新启动就可以正常访问页面了
IDA部分
以tenda-AC15为例,基本上所有的函数追踪分析都会指向到一个名为sub_42378的函数,打开后会发现这是一个cgi处理函数,例如 sub_171EC("updateUrlLog", updateUrlLog);,这个意思就是当访问/goform/updateUrlLog,会执行updateUrlLog函数
利用条件
路由器Web管理端口可访问(内网/公网)
发送超长POST参数覆盖返回地址
多数PoC只需几十到几百字节即可触发
基本结构就是
1 | import requests |