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,不过也是有可能是当前进程的上下文的 

  • 相关阅读:
    Linux IO接口 监控 (iostat)
    linux 防火墙 命令
    _CommandPtr 添加参数 0xC0000005: Access violation writing location 0xcccccccc 错误
    Visual Studio自动关闭
    Linux vsftpd 安装 配置
    linux 挂载外部存储设备 (mount)
    myeclipse 9.0 激活 for win7 redhat mac 亲测
    英文操作系统 Myeclipse Console 乱码问题
    Linux 基本操作命令
    linux 查看系统相关 命令
  • 原文地址:https://www.cnblogs.com/sysnap/p/4990659.html
Copyright © 2011-2022 走看看