欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

深入分析TP-Link TL-R600VPN远程代码执行漏洞

来源:本站整理 作者:佚名 时间:2019-01-24 TAG: 我要投稿

一、概述
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="

[1] [2] [3] [4] [5] [6] [7]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载