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

  • 相关阅读:
    HttpURLConnection请求网络数据的GET请求
    ImageLoader的Jar包加载图片
    使用HttpUtils 上传视频文件
    VideoView的视频播放
    VideoView的视频的全屏播放
    Android中在activity中弹出一个popwindow
    随心而记
    Java -- springboot 配置 freemarker
    Tensorflow替换静态图中的OP
    python 系统定时关机
  • 原文地址:https://www.cnblogs.com/sysnap/p/4990659.html
Copyright © 2011-2022 走看看