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