IIS远程代码执行漏洞——CVE-2015-1635

在这里插入图片描述


QQ 1274510382
Wechat JNZ_aming
商业联盟 QQ群538250800
技术搞事 QQ群599020441
解决方案 QQ群152889761
加入我们 QQ群649347320
共享学习 QQ群674240731
纪年科技aming
网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。

叮叮叮:产品已上线 —>关注 官方-微信公众号——济南纪年信息科技有限公司
民生项目:商城加盟/娱乐交友/创业商圈/外包兼职开发-项目发布/
安全项目:态势感知防御系统/内网巡查系统
云服项目:动态扩容云主机/域名/弹性存储-数据库-云盘/API-AIeverthing
产品咨询/服务售后(同)

纸上得来终觉浅,绝知此事要躬行 !!!
寻找志同道合伙伴创业中。。。抱团滴滴aming联系方式!!


#本文为广告系统自动投放广告

# 如有侵权 删改 请速速联系我们




IIS中默认启用 内核缓存,执行与请求处理管道中缓存有关的任务。

当HTTP协议堆栈(HTTP.sys)不正确地解析HTTP请求时会导致IIS远程代码执行漏洞。

通过实验了解
IIS的体系结构、HTTP协议堆栈及其工作方式和HTTP协议堆栈漏洞,
掌握MS15-034的漏洞利用方式和漏洞原理。


Web安全

信息安全从业人员

计算机基础、计算机网络




预备知识
漏洞信息

漏洞编号:CVE-2015-1635

漏洞描述:
IIS远程代码执行漏洞存在于HTTP协议堆栈(HTTP.sys)中,
当HTTP.sys不正确地解析HTTP请求时会导致此漏洞。

微软关于漏洞的公告:https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2015/ms15-034

影响版本:
安装了微软
IIS 6.0以上的
Windows Server 2008 R2/Server 2012/Server 2012 R2和Windows 7/8/8.1都受到这个漏洞的影响。

IIS体系结构

在这里插入图片描述

在系统上安装IIS(Internet信息服务)后,

有一个名为World Wide Web Publishing服务的服务(WWW服务)。
当客户端向系统发送HTTP请求时,
WWW服务将启动或基于负载均衡策略选择工作进程w3wp.exe,
来处理HTTP请求并发送适当的HTTP响应。

w3wp.exe进程使用HTTP.sys来完成许多与HTTP协议处理相关的任务,
包括HTTP协议解析、响应内容组装和内容缓存。
HTTP.sys接收HTTP请求,并通过TCPIP.sys发送HTTP响应。

HTTP协议栈及其工作方式

IIS Web服务器将HTTP侦听器作为Windows网络子系统的一部分,
这是HTTP协议栈(HTTP.sys)的内核模式设备驱动程序实现的,
HTTP协议栈解析HTTP请求并向客户端提供响应。

HTTP.sys在IIS 6.0中提供以下服务:将HTTP请求路由到正确的请求队列;以内核模式缓存响应;对WWW服务执行所有基于文本的日志记录;实现服务质量功能,包括连接限制、连接超时、队列长度限制和宽度限制。

创建网站时IIS会使用HTTP.sys注册该网站,然后HTTP.sys会收到对该网站的所有HTTP请求。HTTP.sys的功能类似于转发器,将接收到的Web请求,发送到运行网站或Web应用程序用户模式进程的请求队列,并将响应发送回客户端。

除了从其内部缓存中检索存储的响应之外,HTTP.sys不会处理其收到的请求。因此没有将特定于应用程序的代码加载到内核模式,因此特定于应用程序代码中的错误不会影响内核或导致系统故障。

HTTP协议堆栈漏洞

IIS中默认启用内核缓存,执行与请求处理管道中缓存有关的任务。
缓存通过将处理后的信息(如Web页面)存储在服务器上的内存中来提高性能。

使用Range HTTP标头利用此漏洞,
此HTTP标头允许客户端根据需要,从服务器请求特定的内容。
通常Range标头包含以下值:

Range:bytes=124-5656,也可能包含以下值:Range:bytes=0-

如果Range标头中的上限不存在,
则认为客户端正在请求完整的数据。

相反如果攻击者指定了很高的上限,发送带有特殊Range值的HTTP请求,
将导致Range变量在服务器上产生溢出。

Range标头的上限是0xFFFFFFFFFFFFFFFFFF,
这是最大的64位无符号整数。

攻击者发送带有此值的HTTP请求,将导致整数溢出,
服务器回显为‘请求的范围无法满足’,这意味着客户端要求文件的一部分超出服务器上文件末尾的位置。
成功利用攻击还会导致拒绝服务。


IIS服务器安全相关实验

IIS6.0写权限漏洞攻击利用:https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182015102217203100001

IIS6.0远程代码执行0day漏洞分析和利用:https://www.hetianlab.com/expc.do?ec=ECID9d6c0ca797abec2017032915142000001(CVE-2017-7269)

IIS解析漏洞在fckEditor上传攻击中的利用:https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182015102217243800001


实验目的
通过实验了解IIS的体系结构、
HTTP协议栈及其工作方式和HTTP协议堆栈漏洞,
掌握MS15-034的漏洞利用方式和漏洞原理。


实验环境
Client:Windows Server 2008 R2,IP:10.1.1.134

Attack:Kali,IP:10.1.1.100

漏洞利用工具下载地址:http://tools.hetianlab.com/tools/CVE-2015-1635.zip




任务描述:漏洞检测。

我们知道这是一个位于HTTP.sys中的整数溢出漏洞,
给IIS服务器发送如下格式的HTTP请求,就可以触发漏洞的检测:
在这里插入图片描述
在这里插入图片描述

Kali机器执行命令curl url -H “Host:ip” -H “Range:bytes=0-18446744073709551615”:

在这里插入图片描述

此时18446744073709551615转为十六进制是0xFFFFFFFFFFFFFFFF(16个F),
是64位无符号整型所能表达的最大整数,
那么整数溢出必然和这个异常的整数有关。

如上图示,
若IIS服务器返回“requested range not satisfiable”,则是存在漏洞;
如果返回“the request has an invalid header name”,则说明漏洞已被修补。

下载脚本:

 wget http://tools.hetianlab.com/tools/CVE-2015-1635.zip
 unzip CVE-2015-1635.zip

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意修改其中的实验机IP:

在这里插入图片描述
在这里插入图片描述

利用POC进行漏洞检测:
在这里插入图片描述

表示目标机器存在漏洞。




实验步骤二

任务描述:MS15-034利用攻击:获取内存数据。

Kali机器打开msfconsole,搜索漏洞相关利用模块:
在这里插入图片描述

在这里插入图片描述

利用第二个模块
ms15_034_http_sys_memory_dump读取服务器内存数据:
HTTP协议堆栈请求处理HTTP.SYS内存信息公开。

在这里插入图片描述
在这里插入图片描述

执行攻击:

在这里插入图片描述

成功读取服务器内存数据。
在这里插入图片描述




实验步骤三

任务描述:MS15-034利用攻击:拒绝服务攻击。

利用第一个模块
ms15_034_ulonglongadd进行ddos攻击:HTTP协议栈请求处理拒绝服务

在这里插入图片描述

配置参数并执行攻击:
在这里插入图片描述

注:执行攻击前可以先切换到客户机,感受攻击前和攻击后的运行状态。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实验机器上客户机被攻击成功的表现:
在这里插入图片描述




实验步骤四

漏洞分析:拒绝服务攻击。

将请求发送到HTTP Server之后,
w3wp.exe会处理HTTP请求,
TCPIP.sys将任何HTTP协议内容转发到HTTP.sys。
如果该请求是HTTP范围内的请求,
将调用函数UlpParseRange(),来解析请求以获取请求范围的起始和结束位置,
并计算范围的长度。

当起始位置为0、结束位置为0xFFFFFFFFFFFFFFFFFF时,
范围长度等于0,代码不检查是否存在溢出,且不采取错误处理措施;

当起始位置为284、结束位置为0xFFFFFFFFFFFFFFFFFF时,
范围长度等于-284,十六进制值为0xFFFFFFFFFFFFFFFEE4,
如果将其解释为无符号整数,则该值非常大。

解析完HTTP请求后,将调用函数UlAdjustRangesToContentSize()。

如果起始位置和长度为‘无效’
(包括范围起始位置为0xFFFFFFFFFFFFFFFFFF、范围长度为0xFFFFFFFFFFFFFFFFFF、
起始位置>=请求的网页长度和结束位置>=请求的网页长度),
则该功能会调整范围的起始位置和长度。

如果连续收到一个相同的请求,则该请求的响应将被缓存,并将从缓存中获取并发送给请求者。
这一过程将调用函数UxpTpDirectTransmit(),来计算HTTP响应数据包的长度。

组装完HTTP响应程序包后,
HTTP.sys会将数据包信息转发到协议堆栈驱动程序进行发送,
TCPIP.sys的函数TcpSegmentTcbSend()将遍历数据包每个部分的内容,函数中存在整数溢出。

当HTTP范围请求的起始位置为284,
结束位置为18446744073709551615(十六进制值为0xFFFFFFFFFFFFFFFFFFFF)时,
范围超过所请求网页文件的大小。

由于HTTP响应长度非常大,当循环运行多次、触发整数溢出后,
将使用虚拟地址来构建部分内存描述符列表。因为该范围不是源范围中的子范围,则会导致蓝屏死机。




实验步骤五

漏洞分析:获取内存数据。

假设将3-18446744073709551615设为range1,
将1-600设为range2,
在函数UlpParseRange()解析HTTP请求后,
将调用函数UlAdjustRangesToContentSize(),
此时range1将触发整数溢出(3+0xFFFFFFFFFFFFFFFD>=0)。

如果连续收到相同的操作,该请求的响应将被缓存,从缓存中获取并发送给请求者。

通过使用多范围请求,
在每个范围内容之前都有一个范围绑定标记和范围信息。
组装完HTTP响应程序包后,HTTP.sys将在协议栈驱动程序下转发数据包信息来进行发送。
TCPIP.sys的函数TcpSegmentTcbSend()将遍历数据包的每个部分内容。

使用多范围请求可以使HTTP响应长度变大,从而泄露更多信息。
如果仅使用单个范围,则HTTP响应长度会变得太大或太小:

如果HTTP响应长度太大,则会导致系统蓝屏死机;
如果HTTP响应长度太小,则在目标网页内容泄露信息后,不会覆盖缓冲区。
因此攻击者会使用多范围请求来泄露更多信息。

漏洞修复
将输出缓存中的启用内核缓存禁掉(禁用IIS内核缓存):
在这里插入图片描述

在这里插入图片描述



分析与思考

更多分析见:https://blogs.360.cn/post/cve_2015_6135_http_rce_analysis.html。

参考

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

2、https://www.trendmicro.com/en_us/research/15/d/iis-at-risk-the-http-protocol-stack-vulnerability.html?_ga=2.58551274.1902911539.1609211638-1589647619.1609211638

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页