从零开始的cve分析- cve-2016-0095 简易记录
0x00 前言
看k0shl大佬的SSCTF pwn450 Windows Kernel Exploitation Writeup一文,试着写一个x64下的poc。
poc地址:https://github.com/4M4Z4/cve-2016-0095-x64
0x01 环境
- windows 7 旗舰版 Service Pack 1 64位
0x02 poc
emmm,k0shl大佬的分析文章非常好,我看了都不知道该写些啥了。那就写写我是怎么来确定那个是_SURBOJ结构体的 hDEV 为 0 的。
首先运行蓝屏poc:(将我提供的代码main函数中的NullPageAlloc函数注释掉即可)
windbg断下,并显示如下信息:
查看发生错误的位置的汇编代码,可以发现是
test byte ptr [rsi+38h],1
这句汇编指令出错,下面查看一下运行这条指令时的寄存器的值查看寄存器的值,使用
.cxr
命令即可可以发现rsi为0,从而导致0地址的引用,触发内存访问错误。那么正常流程下,那个rsi+38h到底指向的是一个什么东西呢?k0shl大佬的分析文章中已经详细给出了。下面是我分析出这个东西是啥的过程,和k0shl的思路类似,但是我并没有调试,而是纯静态分析的。
我们需要知道这个rsi到底是个啥:
就是这个:[[rdx+50h]+30h] rdx是bGetRealizedBursh的第二个参数
看了看这个rsi的取值来自bGetRealizedBursh函数的第二个参数。
查看栈回溯如下:
而bGetRealizedBrush的第二个参数来自pvGetEngRbrush(struct _BRUSHOBJ *a1)的第一个参数。
而pvGetEngRbrush的第一个参数来自于EngBitBlt的倒数第3个参数,参数类型依然是_BRUSHOBJ,还是没什么信息,那么继续往上。
而EngBitBlt的倒数第3个参数来自于EngPaint的第三个参数,类型依然还是_BRUSHOBJ,继续往上
继续网上却发现EngPaint的第三个参数来自一个局部变量:
那么继续看看,哪儿改了这个v55,映入眼帘的就是上面那个EBURSHOBJ::vInitBrush函数,跟进去一看,就发现门路了。(其实那个v55是a1,我为了看起清楚,就改了名字,改为了v55)
等于说[rdx+50]就是v21,而v21+24是一个_SURFOBJ结构体(32位的win32k.sys中的符号可以显示,但是64位不显示,不知道为啥...)。我们需要的是[[rdx+50h]+30h]的值,而[rdx+50h]+18h指向的是一个SURFOBJ,而SURFOBJ是公开的:
typedef struct _SURFOBJ {
DHSURF dhsurf; //v11+18h
HSURF hsurf; //v11+20h
DHPDEV dhpdev; //v11+28h
HDEV hdev; //v11+30h 指向就是这个
SIZEL sizlBitmap;
ULONG cjBits;
PVOID pvBits;
PVOID pvScan0;
LONG lDelta;
ULONG iUniq;
ULONG iBitmapFormat;
USHORT iType;
USHORT fjBitmap;
} SURFOBJ;
所以可知应该是hdev取为了0
0x3 总结
发现替换token是有几率蓝屏的。然后不知道该怎么解决,知道原因是因为Token值会被释放和DeReference。但是不知道怎么来解决。
发现其实好多提权exp都不太稳定额...那不是检测提权exp检测蓝屏 就可以了? emmm,倒是一种思路。
从零开始的cve分析- cve-2016-0095 简易记录的更多相关文章
- JDK动态代理深入理解分析并手写简易JDK动态代理(下)
原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2019-01-05/27.html 作者:夜月归途 出处:http://www.guitu ...
- JDK动态代理深入理解分析并手写简易JDK动态代理(上)
原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2019-01-03/27.html 作者:夜月归途 出处:http://www.guitu ...
- Microsoft Build 2016 Day 2 记录(多图慎入)
Microsoft Build 2016 Day 1 记录 Microsoft Build 2016 进行到了第二天,我觉得这一天的内容非常精彩,因为主要和开发者相关
- 分析jQuery源码时记录的一点感悟
分析jQuery源码时记录的一点感悟 1. 链式写法 这是jQuery语法上的最大特色,也许该改改POJO里的set方法,和其他的非get方法什么的,可以把多行代码合并,减去每次 ...
- 图书馆管理系统程序+全套开发文档(系统计划书,系统使用说明,测试报告,UML分析与设计,工作记录)
图书馆管理系统程序+全套开发文档(系统计划书,系统使用说明,测试报告,UML分析与设计,工作记录): https://download.csdn.net/download/qq_39932172/11 ...
- java string 细节原理分析(2016.5)
看到了以前2016.5月学习java写的笔记,这里放在一起. String实现的细节原理分析 一.jdk源码中String 的实现 public final class String implemen ...
- Vue源码分析之实现一个简易版的Vue
目标 参考 https://cn.vuejs.org/v2/guide/reactivity.html 使用 Typescript 编写简易版的 vue 实现数据的响应式和基本的视图渲染,以及双向绑定 ...
- 从零开始山寨Caffe·伍:Protocol Buffer简易指南
你为Class外访问private对象而苦恼嘛?你为设计序列化格式而头疼嘛? ——欢迎体验Google Protocol Buffer 面向对象之封装性 历史遗留问题 面向对象中最矛盾的一个特性,就是 ...
- ruby 分析日志,提取特定记录
读取日志中的每一行,分析后存入hash,然后做累加 adx_openx=Hash.new(0) File.open('watch.log.2016-08-24-21').each do |line| ...
随机推荐
- Java——对象比较
前言 本篇博客主要梳理一下Java中对象比较的需要注意的地方,将分为以下几个方面进行介绍: ==和equals()方法 hashCode()方法和equals()方法 Comparator接口和Com ...
- 记录一下对swiper4.x.js在H5单页中的滑动优化
应用场景 仅仅应用于单页应用的滑动操作,用swiper4.x接管页面的滚动操作.用来支持顶部和尾部的回弹效果,进一步来支持常见那种下拉刷新动画效果.不适用于轮播图那种应用场景. 虽然只是针对swipe ...
- Mybatis的原理相关
今天看了一篇有关Mybatis非常好的文章,顺便写了一下学习心得. 原文地址:https://blog.csdn.net/u010349169/article/details/40422941 一.M ...
- Go语言学习笔记说明
参考书籍:<学习Go语言>.<Go语言编程> 程序运行环境:windows(64bit) Go语言版本:go1.0.2 资料: 1.Go语言半小时速成教程 http://w ...
- 为Linux配置常用源:epel和IUS
CentOS上,除了os类的yum源,还需要配置几个常用的源:epel.ius. 有很多国内很多镜像站点都提供了各类仓库的镜像站点,个人感觉比较全的是阿里云http://mirrors.aliyun. ...
- Linux核心命令
Linux核心命令 strace(查看系统调用的一个过程) 例:strace cat /test.txt netstat perf top pidstat mpstat dstat vmstat sl ...
- 【转载】ASP.NET工具类:文件夹目录Directory操作工具类
在ASP.NET开发网站的过程中,有时候会涉及到文件夹相关操作,如判断文件夹目录是否存在.删除文件夹目录.创建文件.删除文件.复制文件夹等等.这一批有关文件目录的操作可以通过Directory类.Fi ...
- 【学习笔记】sklearn数据集与估计器
数据集划分 机器学习一般的数据集会划分为两个部分: 训练数据:用于训练,构建模型 测试数据:在模型检验时使用,用于评估模型是否有效 训练数据和测试数据常用的比例一般为:70%: 30%, 80%: 2 ...
- python面向对象学习(四)继承
目录 1. 单继承 1.1 继承的概念.语法和特点 1.2 方法的重写 1.3 父类的 私有属性 和 私有方法 2. 多继承 2.1 多继承的使用注意事项 2.2 新式类与旧式(经典)类 1. 单继承 ...
- 什么是xss攻击,如何预防(初级)?
概念: XSS(Cross Site Scripting),即跨站脚本攻击,是一种常见于web应用程序中的计算机安全漏洞.XSS通过在用户端注入恶意的可运行脚本,若服务器端对用户输入不进行处理,直接将 ...