深入分析TP-Link TL-R600VPN远程代码执行漏洞
一、概述
TP-Link最近修复了TL-R600VPN千兆宽带VPN路由器中的3个漏洞,固件版本为1.3.0。在与TP-Link合作确保补丁成功发布之后,Cisco Talos公开披露了这些漏洞。目前,已经发布了解决方案,因此我们希望能深入研究这些漏洞的内部工作方式,并展示出我们的概念证明。
二、背景
TP-Link TL-R600VPN是一款五端口的小型办公室/家庭路由器。该路由器在芯片上集成了Realtek RTL8198集成系统。这个特殊的芯片使用了Lexra开发的MIPS-1架构的分支。除了处理器未对齐加载(Unaligned Load)和存储操作中使用了一些专有指令外,这两个指令集基本相同。在Lexra中未包含的说明包括LWL、SWL、LWR和SWR。这些专有指令通常在更为常见的MIPS-1架构编译程序时使用,如果在Lexra中出现则将会导致段错误(Segfault)。针对这一路由器,要有针对性地开发出漏洞利用代码,必须要首先了解这一关键性的差异。
要了解更多有关Lexra MIPS的知识,以及它与MIPS-1架构的不同之处,请参阅《Lexra的故事》和《MIPS-1专利申请》。
三、侦查阶段
3.1 了解漏洞
在该设备HTTP服务器处理对/fs/目录请求的过程中,存在一个漏洞,允许经过身份验证的攻击者远程执行设备上的代码。
在访问/fs/目录中的下述任意页面时,应用程序会错误地解析传递的HTTP头部。
http:///fs/help
http:///fs/images
http:///fs/frames
http:///fs/dynaform
http:///fs/localiztion(请注意,这里不是拼写错误)
在函数httpGetMimeTypeByFileName中,Web服务器尝试解析所请求页面的文件扩展名,以确定其Mime类型。在这一处理过程中,服务器使用strlen()调用来确定所请求页面名称的长度,并寻找该堆分配字符串(Heap-allocated String)的末尾,并向后读取文件扩展名,直到遇到句点(0x2e)。
#
# calculates the length of the uri and seeks to the end
#
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
# looks for a period at the current index and break out when found
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
LOAD:00425D04
# loop backwards until a period is found, loading the character into $s0
LOAD:00425D04 loc_425D04:
LOAD:00425D04 addiu $s0, -1
LOAD:00425D08 lbu $v0, 0($s0)
LOAD:00425D0C bne $v0, $v1, loc_425D04
LOAD:00425D10 nop
在请求的页面上,应该始终包含一个扩展名,以防止产生易受攻击的漏洞。这一点,可以在下面针对费恶意页面/web/dynaform/css_main.css的GDB字符串输出中看到,其中将解析文件扩展名“css”。
0x67a170: "/web/dynaform/css_main.css"
0x67a18b: "46YWRtaW4="
一、概述
TP-Link最近修复了TL-R600VPN千兆宽带VPN路由器中的3个漏洞,固件版本为1.3.0。在与TP-Link合作确保补丁成功发布之后,Cisco Talos公开披露了这些漏洞。目前,已经发布了解决方案,因此我们希望能深入研究这些漏洞的内部工作方式,并展示出我们的概念证明。
二、背景
TP-Link TL-R600VPN是一款五端口的小型办公室/家庭路由器。该路由器在芯片上集成了Realtek RTL8198集成系统。这个特殊的芯片使用了Lexra开发的MIPS-1架构的分支。除了处理器未对齐加载(Unaligned Load)和存储操作中使用了一些专有指令外,这两个指令集基本相同。在Lexra中未包含的说明包括LWL、SWL、LWR和SWR。这些专有指令通常在更为常见的MIPS-1架构编译程序时使用,如果在Lexra中出现则将会导致段错误(Segfault)。针对这一路由器,要有针对性地开发出漏洞利用代码,必须要首先了解这一关键性的差异。
要了解更多有关Lexra MIPS的知识,以及它与MIPS-1架构的不同之处,请参阅《Lexra的故事》和《MIPS-1专利申请》。
三、侦查阶段
3.1 了解漏洞
在该设备HTTP服务器处理对/fs/目录请求的过程中,存在一个漏洞,允许经过身份验证的攻击者远程执行设备上的代码。
在访问/fs/目录中的下述任意页面时,应用程序会错误地解析传递的HTTP头部。
http:///fs/help
http:///fs/images
http:///fs/frames
http:///fs/dynaform
http:///fs/localiztion(请注意,这里不是拼写错误)
在函数httpGetMimeTypeByFileName中,Web服务器尝试解析所请求页面的文件扩展名,以确定其Mime类型。在这一处理过程中,服务器使用strlen()调用来确定所请求页面名称的长度,并寻找该堆分配字符串(Heap-allocated String)的末尾,并向后读取文件扩展名,直到遇到句点(0x2e)。
#
# calculates the length of the uri and seeks to the end
#
LOAD:00425CDC loc_425CDC:
LOAD:00425CDC la $t9, strlen
LOAD:00425CE0 sw $zero, 0x38+var_20($sp) copyright 无奈人生
LOAD:00425CE4 jalr $t9 ; strlen
LOAD:00425CE8 sh $zero, 0x38+var_1C($sp)
LOAD:00425CEC addu $s0, $v0
# looks for a period at the current index and break out when found
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
LOAD:00425D04
# loop backwards until a period is found, loading the character into $s0
LOAD:00425D04 loc_425D04:
LOAD:00425D04 addiu $s0, -1
LOAD:00425D08 lbu $v0, 0($s0)
内容来自无奈安全网
LOAD:00425D0C bne $v0, $v1, loc_425D04
LOAD:00425D10 nop
在请求的页面上,应该始终包含一个扩展名,以防止产生易受攻击的漏洞。这一点,可以在下面针对费恶意页面/web/dynaform/css_main.css的GDB字符串输出中看到,其中将解析文件扩展名“css”。
0x67a170: "/web/dynaform/css_main.css"
0x67a18b: "46YWRtaW4="
www.wnhack.com
[1] [2] [3] [4] [5] [6] [7] 下一页
copyright 无奈人生