hyper-v debug 0

hyper-v漏洞的调试分析

这个部分有一点点的问题. 我无法去接受编译内核的模式. 因为每一个洞我都要编译一遍漏洞的话… 每次编译的时间都是二十多个小时… 我还是等我有钱了买一个好的电脑完成调试吧.

cve-2016-008调试分析笔记

简明分析

[+] 漏洞组件: Vmswitch.sys
[+] 漏洞函数: VmsMpCommonPvtHandleMulticastOids
[+] 漏洞类型: 越界读写内存. 可以造成相连堆块的5byte数据的写入. 破坏了POOL_HEADER. 造成BSOD.

漏洞的详细分析

整体的漏洞代码

第一步

程序执行到此处的if语句时候. vul_struct+0xEE0存放一个指针. 此时指针的值为NULL. 进入内部的if分支.

第二步.

程序执行到此处的if语句的时候. vul_struct存放了分配的pool的len/6的结果. 此时应该为0. 进入else分支.

第三步

进入else之后. 程序分配了len大小的pool. 并且将user可以控制的数据存放到分配的coor_pool当中去.

接着把coor_pool的指针放到vul_struct+0xEE0当中去.

第四步

len/6放到vul_struct+0xEE8当中去.

漏洞触发第一步

获取相关的信息.

漏洞触发第二步

假设:

[+] 上一次的Len是6
[+] 此时的len是11

我们明白:

[+] 11/6 == 6/6 == 1(c语言特性)

进入if当中.

漏洞触发第三步

因为11/6 == 6/6 == 1. 会进入此语句当中.

[+] vul_struct存放上一次分配的pool(6 byte). 
[+] 此时的len为11byte.
[+] 会多复制5byte的字节. 且这点内容用户可以控制.
[+] 越界写pool_header
[+] 漏洞触发.

漏洞触发的条件

[+] 6的例子是不对的. 因为分配的时候会有对齐.
[+] 另外换个例子.
    [+] 0x60 
    [+] 0x65

漏洞调试

第一步: 设置IDA.



第二步

不相等会进行分配.

第三步

存储到相应的结构体中去.

漏洞触发

和上次一样.

改变一个值:

结果:

pool_header受到破坏.

BSOD:

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. hyper-v漏洞的调试分析
  2. 2. cve-2016-008调试分析笔记
    1. 2.1. 简明分析
    2. 2.2. 漏洞的详细分析
      1. 2.2.1. 整体的漏洞代码
      2. 2.2.2. 第一步
      3. 2.2.3. 第二步.
      4. 2.2.4. 第三步
      5. 2.2.5. 第四步
      6. 2.2.6. 漏洞触发第一步
      7. 2.2.7. 漏洞触发第二步
      8. 2.2.8. 漏洞触发第三步
    3. 2.3. 漏洞触发的条件
    4. 2.4. 漏洞调试
      1. 2.4.1. 第一步: 设置IDA.
      2. 2.4.2. 第二步
      3. 2.4.3. 第三步
      4. 2.4.4. 漏洞触发
,