• (十)HTTP.sys远程代码执行


    01 漏洞描述

    上篇文章介绍了Host头攻击,今天我们讲一讲HTTP.sys远程代码执行漏洞。

    HTTP.sys是Microsoft Windows处理HTTP请求的内核驱动程序,为了优化IIS服务器性能,从IIS6.0引入,IIS服务进程依赖HTTP.sys。HTTP.sys远程代码执行漏洞实质是HTTP.sys的整数溢出漏洞,当攻击者向受影响的Windows系统发送特殊设计的HTTP 请求,HTTP.sys 未正确分析时就会导致此漏洞,成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码。

    主要存在Windows+IIS的环境下,任何安装了微软IIS 6.0以上的Windows Server 2008 R2/Server 2012/Server 2012 R2以及Windows 7/8/8.1操作系统都受到这个漏洞的影响。

    02 漏洞知识拓展

    说到HTTP.sys远程代码执行漏洞,不得不先介绍一下Range首部字段。

    在“上古时代”,网络并不是很好,下载大型文件很不容易。下载途中如果网络中断,就得重头开始下。为了解决这个问题,HTTP/1.1引入了范围请求。

     
     

    在请求报文的Range首部字段中指定资源的byte范围,告诉服务器,请求的是资源哪个范围的内容,让断点续传和并行下载得以实现。

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

     
     

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

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

    请求成功:

    响应206Partial Content请求范围越界:(范围超过资源的大小)

    响应416Requested Range Not Satisfiable不支持范围请求:

    响应200OK

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

    当然,范围请求不止这些知识点,详情可查看RFC:

    https://tools.ietf.org/html/rfc7233

    03 漏洞检测

    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字段触发的,有兴趣的校友可以去了解了解。

    04 漏洞修复

    升级补丁:

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

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

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



    作者:安全小白团
    链接:https://www.jianshu.com/p/2e00da8a12de
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    pandas的简单使用
    java搭建web从0-1(第一步:创建web工程)
    android通过命令行安装sdk
    iOS8不能通过itms-services协议下载安装app
    date命令转换日期命令提示date: illegal time format
    mac通过命令行获取证书和配置文件过期时间
    jenkin 不必要的Execute shell执行失败,导致jenkins都失败的解决
    命令行执行jenkins,构建job(可传递参数)
    Eclipse启动分析。。
    java非web应用修改 properties/xml配置文件后,无需重启应用即可生效---自动加载
  • 原文地址:https://www.cnblogs.com/uestc2007/p/11010300.html
Copyright © 2020-2023  润新知