• HTTP.sys远程代码执行(CVE2015-1635,MS15-034)


    HTTP.sys远程代码执行(CVE2015-1635)

    漏洞原理

    在原来网络不是很好的时候,下载大型文件很不容易,如果下载中断 ,那么只能重头开始下载,为了解决这个问题 HTTP/1.1引入的范围请求。即请求这个文件x~y的字节,指定范围,在请求报文的首部添加Range字段,此字段指定资源的byte范围,告诉服务器,请求资源是哪个范围的内容,让断点续传和并行下载得以实现。

    如果服务器支持范围请求,响应包中,会存在Accept-Range字段(且值部位none,bytes为资源范围的单位),并在content-length字段告诉客户端资源的大小范围。

    GET /js/site.js HTTP/1.1
    Range: bytes=0-18446744073709551615
    Cookie: ASPSESSIONIDAQCSSQQQ=AENCJGCBHMLGFOCHOJEBNLCJ
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Encoding: gzip,deflate
    Host: xxx.xxx.com
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 .....
    Connection: Keep-alive
    
    响应:
    HTTP/1.1 416 Requested Range Not Satisfiable
    Content-Type: application/x-javascript
    Last-Modified: Wed, 18 Sep 2013 05:52:53 GMT
    Accept-Ranges: bytes
    ETag: "963ee15033b4ce1:0"
    Server: Microsoft-IIS/7.5
    X-Powered-By: ASP.NET
    Date: Sat, 05 Sep 2020 03:16:27 GMT
    Content-Length: 362
    Content-Range: bytes */1602
    
    .....
    
    

    如果没有Accept-Ranges字段,则服务器可能不支持范围请求,有的服务器会明确将值设为“none”。

    服务器面对范围请求,有三种响应:

    请求成功:    响应206 Partial Content
    请求范围越界:(范围超过资源的大小)    响应416 Requested Range Not Satisfiable
    不支持范围请求:    响应200 OK
    

    而HTTP.sys远程代码执行漏洞正是利用Range字段注入恶意数据。该漏洞的检测,也是利用服务器面对范围请求时的响应特征来判断

    漏洞检测

    HTTP.sys漏洞的检测比较简单,先判断目标环境是不是Windows+IIS,然后构造Range字段进行检测即可。

    检测时,在请求包中添加Range字段,如下:

    Range: bytes=0-18446744073709551615
    

    服务器响应400,证明不存在HTTP.sys远程代码执行漏洞。如果响应416,则证明系统存在漏洞。

    这里简单说一下Range字段值的含义。18446744073709551615转为十六进制是 0xFFFFFFFFFFFFFFFF(16个F),是64位无符号整型所能表达的最大整数,整数溢出和这个超大整数有关。

    另外,Apache几个老版本存在的Apache HTTP Server畸形Range选项处理远程拒绝服务漏洞,也是通过Range字段触发的,有兴趣的校友可以去了解了解。

    漏洞修复

    升级补丁:

    http://technet.microsoft.com/security/bulletin/MS15-034

    禁用IIS内核缓存(缓解方案):

    https://technet.microsoft.com/en-us/library/cc731903(v=ws.10).aspx

  • 相关阅读:
    在ant编译java文件时产生debug信息
    Ant里面神奇的fork
    在ant中将依赖jar包一并打包的方法
    Java通过class文件得到所在jar包
    Bat脚本:通过端口号查找进程号
    使用emma时遇到的一些问题
    python之路-day18-反射
    python之路-day17-类与类之间的关系
    python之路-day16-类的成员
    python之路-day15-初识面向对象
  • 原文地址:https://www.cnblogs.com/forforever/p/13622625.html
Copyright © 2020-2023  润新知