(十)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
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
(十)HTTP.sys远程代码执行的更多相关文章
- HTTP.SYS远程代码执行漏洞测试(ms15-034)
		1.HTTP.SYS远程代码执行漏洞简介 首先漏洞编号:CVE-2015-1635(MS15-034 ) 远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未 ... 
- HTTP.SYS远程代码执行漏洞测试
		简介: 在2015年4月安全补丁日,微软发布的众多安全更新中,修复了HTTP.sys中一处允许远程执行代码漏洞,编号为:CVE-2015-1635(MS15-034 ).利用HTTP.sys的安全漏洞 ... 
- MS15-034漏洞复现、HTTP.SYS远程代码执行漏洞
		#每次命令都百度去找命令,直接弄到博客方便些: 漏洞描述: 在2015年4月安全补丁日,微软发布的众多安全更新中,修复了HTTP.sys中一处允许远程执行代码漏洞,编号为:CVE-2015-1635( ... 
- 【研究】Tomcat远程代码执行漏洞(CVE-2017-12615)
		一.Tomcat远程代码执行漏洞(CVE-2017-12615) 1.1 实验环境 操作机:windows 10 IP:192.168.1. ... 
- Tomcat CGIServlet enableCmdLineArguments远程代码执行_CVE-2019-0232漏洞复现
		Tomcat CGIServlet enableCmdLineArguments远程代码执行_CVE-2019-0232漏洞复现 一.漏洞描述 该漏洞是由于tomcat CGI将命令行参数传递给Win ... 
- Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现
		Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现 一.漏洞描述 Joomla是一套内容管理系统,是使用PHP语言加上MYSQL数据库所开发的软件系统,最新版本为3.9.12,官网: ... 
- Office--CVE-2017-11882【远程代码执行】
		Office远程代码执行漏洞现POC样本 最近这段时间CVE-2017-11882挺火的.关于这个漏洞可以看看这里:https://www.77169.com/html/186186.html 今天在 ... 
- Struts2-057远程代码执行漏洞(s2-057/CVE-2018-11776)复现
		参考了大佬的链接:https://github.com/jas502n/St2-057 00x01前言 Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用 ... 
- CVE-2020-5902 F5 BIG-IP 远程代码执行漏洞
		CVE-2020-5902 F5 BIG-IP 远程代码执行漏洞复现 漏洞介绍 F5 BIG-IP 是美国 F5 公司的一款集成了网络流量管理.应用程序安全管理.负载均衡等功能的应用交付平台. 近日, ... 
随机推荐
- Python 图像处理 OpenCV (1):入门
			引言 又开一个新的系列分享,对图像处理感兴趣的同学可以关注这个系列. 更新频率尽量保持一周两到三次推送. 新系列第一件事儿当然是资源推荐,下面是一些有关 OpenCV 的资源链接: 资源链接: 官方网 ... 
- Python-MD5加密算法接口测试
			前言 在之前的Python系列的随笔中,我跟小伙伴们讲述了Python-AES加密算法接口测试和Python-SHA256加密算法接口测试,今天我们来学习一下登录密码是md5加密的情况下,该如何使用p ... 
- 【雕爷学编程】Arduino动手做(60)---WS2812直条8位模块
			37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ... 
- git pull 部分文件无法获取
			今天发现git pull origin master 的时候部分文件无法获取,然后学到了一个新方法: git fetch git checkout origin/master -- path/to/f ... 
- jenkins+gitee+ssh自动化部署
			一.准备环境 1,配置maven(MAVEN_HOME) 2,配置jdk(JAVA_HOME)我这里用的jdk1.8.0_121,之前碰到过一次别的版本的jdk在启动tomcat无法解析https情况 ... 
- 2-SAT poj3207将边看做点
			Ikki's Story IV - Panda's Trick Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 10238 ... 
- POJ1930
			题目链接:http://poj.org/problem?id=1930 题目大意: 给一个无限循环小数(循环节不知),要求你输出当该小数所化成的最简分数分母最小时所对应的最简分数. AC思路: 完全没 ... 
- Flexible 应用
			Flexibl.js 为我们做了一项工作,媒体查询工作,节约了许多操作 举个例子,移动端的页面设计稿是750px,我们自己换算rem单位,比如我想把屏幕划分为15等份,我就750/15=50,然后用所 ... 
- Unity实现写入json文件
			using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using ... 
- iOS开发判断手机号及其运营商
			根据三大运营商出现的号段(号段来自百度百科) 判断是否是手机号 + (BOOL)isMobile:(NSString *)str { NSString *MOBILE = @"^1(3[0- ... 
