1.Tenda路由器漏洞分析 CVE-2020-13393
(1)漏洞原理
Tenda路由器的Web服务器httpd中存在一个缓冲区溢出漏洞,在处理POST请求的参数时,数值会直接在strcpy中用于放置在堆栈上的局部变量,造成缓冲区溢出。
(2)影响版本

(3)环境模拟
1.对固件进行提取

2.使用ARM架构的qemu模拟httpd运行

当进行模拟的时候会报如下错误:

3.根据模拟报错的结果进行搜索和Patch二进制文件

成功启动调试,并监听9999端口
4.IDA远程调试httpd根据报错提示的字符串进行字符串搜索,根据调用,追踪到如下的位置,这里主要是模拟失败的地方

这里造成启动失败的原因主要是由于check_network和ConnectCfm造成启动失败,这两个函数主要检测网路用的,但是由于模拟缺失,所以只要绕过这两个函数就能成功将设备启动,这里把MOV R3, R0汇编代码Patch成MOV R3, #1及可完成指定的跳转。这里使用rasm2将汇编指令转换成opcode,使用二进制编辑器更改指定代码即可,这里也可以使用IDA自带的Patch插件。

使用010Editor将0030a0e1替换成0130a0e3,完成Patch

这里先配置br0虚拟网卡是得httpd应用完整启动

这是使用qemu模拟可以成功的启动应用

这里可以看到已经成功启动httpd服务
(4)漏洞分析
1.造成漏洞的原因是对传输过来的字段没有进行长度校验直接使用strcpy函数进行拷贝造成缓冲区溢出漏洞

通过ida分析可以看出httpd在处理传递的参数时没有进行校验且使用危险函数进行拷贝。
(5)POC验证
1.编写POC

POC对time字段进行了溢出测试
2.IDA调试httpd

配置IDA进行调试并设置相应断点

attach上对应的调试进程进行调试,F9直接启动运行

执行poc脚本进行测试

这里可以看出成功停到下断点的位置,单步进行调试,可以看到发生溢出

这里成功验证POC
2.Tenda路由器漏洞分析CVE-2020-13392
(1)漏洞原理
Tenda路由器的Web服务器httpd中存在一个缓冲区溢出漏洞,在处理post请求的funcpara1的参数时,sprintf将该值直接使用到堆栈上,造成缓冲区溢出
(2)影响版本

(3)漏洞分析
获取对应的参数,传递给sub_4E9CC函数

将第一个参数传递给v6

使用sprintf完成格式化输出,但没做边界检验


POC

3.Tenda路由器漏洞分析CVE-2020-13394
(1)漏洞原理
路由器的Web服务器httpd中存在一个缓冲区溢出漏洞。在处理POST请求的/ goform/SetNetControlList列表参数时,将在strcpy中直接使用该值访问放置在堆栈上,造成缓冲区溢出
(2)影响版本

(3)漏洞分析
获取传递的结果

使用strcpy函数直接将数据进行拷贝,未进行任何校验

POC

4.Tenda路由器漏洞分析CVE-2020-13391
(1)漏洞原理
路由器的Web服务器httpd中存在一个缓冲区溢出漏洞。在处理POST请求的/ goform/SetSpeedduizspeed_dir参数时,在sprintf中直接将值用于放置在堆栈上,造成缓冲区溢出。
(2)影响版本

(3)漏洞分析
获取指定参数

POC

-end
