zoukankan      html  css  js  c++  java
  • 一个XP SP3调用0地址蓝屏BUG

    0x00 蓝屏的堆栈

    在XP SP3上跑POC之后,一段时间之后会出现蓝屏,蓝屏的堆栈如下,可以看出是ACKData里面CALL了一个0指针导致的蓝屏
    名称:  1.jpg
查看次数: 1
文件大小:  178.4 KB


    0x01 蓝屏原因

    1 ETW(Event Tracing for Windows)是系统提供的一种事件监控机制,用ETW可以用来监控网络IO,磁盘IO等事件。XP SP3上ETW内部如何实现网络监控,原理是利用到了tcpip提供的一个指针回调来实现对网络IO的监控,这个指针就是tcpip!TCPCPHandlerRoutine。StartTrace的时候,内核会tcpip!TCPCPHandlerRoutine这个指针设置为WmipTraceNetwork,续相关网络事件发生时,都会调用该回调。StopTrace的时候,内核会把tcpip!TCPCPHandlerRoutine置为NULL,这个过程对tcpip!TCPCPHandlerRoutine的操作是不加锁的。

    2 哪些地方会引用tcpip!TCPCPHandlerRoutine

    可以看出TCPIP里面很多处地方都会引用tcpip!TCPCPHandlerRoutine
    点击图片以查看大图

图片名称:	2.jpg
查看次数:	1
文件大小:	140.1 KB
文件 ID :	101448
     
    不过,只有AckData这处地方的引用才有可能导致蓝屏,原因很简单ACKData对tcpip!TCPCPHandlerRoutine的判空存在多线程的问题。其它地方的判断就没这个问题,因为指针先mov到寄存器里面了。

    0x03 BUG的触发

    1 有一个线程不断的开启,停止ETW的网络监控,这样tcpip!TCPCPHandlerRoutine会不断的被置为NULL和非NULL
    2 开另外的线程不断的发送TCP数据,接收数据包,这样可以频繁的触发AckData
    3 当AckData里面对tcpip!TCPCPHandlerRoutine判断非空之后,调用tcpip!TCPCPHandlerRoutine之前上层把tcpip!TCPCPHandlerRoutine又设置为NULL,蓝屏就发生了。

    0x04 POC


    1 ControlTrace调用返回比较慢,导致触发这个BUG的时间被延长
    2 目前只有XP SP3会出现蓝屏,SP2则不会,SP2 AckData里面对tcpip!TCPCPHandlerRoutine的判空又没问题了
    3 蓝屏触发时,上下文是System,不过也是有可能是当前进程的上下文的 

  • 相关阅读:
    Add Two Numbers
    Reverse Linked List II
    Reverse Linked List
    Remove Duplicates from Sorted List
    Remove Duplicates from Sorted List II
    Partition List
    Intersection of Two Linked Lists
    4Sum
    3Sum
    2Sum
  • 原文地址:https://www.cnblogs.com/sysnap/p/4990659.html
Copyright © 2011-2022 走看看