0x00 蓝屏的堆栈

在XP SP3上跑POC之后,一段时间之后会出现蓝屏,蓝屏的堆栈如下,可以看出是ACKData里面CALL了一个0指针导致的蓝屏

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

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

一个XP SP3调用0地址蓝屏BUG的更多相关文章

  1. 【旧文章搬运】PsVoid中IrpCreateFile函数在Win7下蓝屏BUG分析及解决

    原文发表于百度空间,2010-04-05========================================================================== 这也许是我 ...

  2. windows xp sp3 下载地址

      windows xp service pack 3/ windows xp sp3 简体中文版下载地址: http://download.windowsupdate.com/msdownload/ ...

  3. 电脑蓝屏分析教程,附工具WinDbg(x86 x64)6.12.0002.633下载

    我们常常在使用电脑中,有时会碰到电脑蓝屏,我们经常束手无策,不知道为什么会蓝屏?有些蓝屏后自动重启能正常进入系统,那么我们就可以借助工具进行分析.而有些可能需要进入到安全模式或者pe系统才会正常,那么 ...

  4. Windows 7 蓝屏代码大全 & 蓝屏全攻略

    关于Windows 7.Vista等系统的蓝屏,之前软媒在Win7之家和Vista之家都有很多文章讨论过,但是都是筛选的常见的一些问题,今天这个文章是个大全,希望大家看着别头痛,文章收藏下来以后待查即 ...

  5. Windows 7 蓝屏代码大全 & 蓝屏全攻略

    关于Windows 7.Vista等系统的蓝屏.之前软媒在Win7之家和Vista之家都有非常多文章讨论过,可是都是筛选的常见的一些问题,今天这个文章是个大全.希望大家看着别头痛.文章收藏下来以后待查 ...

  6. 分析Windows的死亡蓝屏(BSOD)机制

    这篇文章本来是投Freebuf的,结果没过.就贴到博客里吧,图懒得发上来了 对于Windows系统来说,被人们视为洪水猛兽的蓝屏也是一种有利于系统稳定的机制.蓝屏其实是Windows系 统的一种自查机 ...

  7. 用“U盘”重新安装(MSDN)原版Windows XP sp3操作系统(图文)

    安装微软(MSDN)原版Windows XP sp3系统的方法不少,可以说是很多,但是我就用“U盘”安装.用“U盘”装XP系统也不是什么稀罕事,不会的,就按照下面我常用的“U盘”装原版Windows ...

  8. Networx蓝屏问题

    本人系统win7专业版64位. 从5月底开始就时不时有蓝屏发生,而且可以说是没有任何征兆就"啪"的一下蓝了... 有时候是隔个四五天蓝屏一次,有时候一天都能蓝好几次,实在是让人恼火 ...

  9. win7蓝屏死机0x0000003B错误蓝屏故障解决

    win7蓝屏死机0x0000003B错误蓝屏故障解决 刚才一个朋友问我:电脑蓝屏了怎么办. 我问他要了电脑的截图,自己看了错误代码:0x0000003B 搜索资料,查询了一番.都是说电脑中病毒或者是系 ...

随机推荐

  1. [转载]Java中继承、装饰者模式和代理模式的区别

    [转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...

  2. Kmalloc可以申请的最大内存

    Kmalloc申请的最大内存 以前虽然读过源码,但是对于它的申请上限确实没注意过.下面分析下,下面是kmalloc的源码. 可以看出,如果想知道kmalloc能申请的范围,需要跳转到<linux ...

  3. 【转】DELPHI开始支持LINUX DOCKER

    这是咏南翻译Marco Cantu的文章. 在过去的几年中,将服务器端解决方案(实际上是任何类型的应用程序)部署到轻量级DOCKER而不是物理机器或虚拟机已经变得越来越普遍,因为这允许更大的灵活性(在 ...

  4. Window10下Python3.7 安装与卸载

    1.进入官网https://www.python.org/,点击Downloads下的Windows按钮,进入下载页面. 2.如下图所示,点击下载. 3.安装Python3.7.4 4.打开cmd,输 ...

  5. 【转】Java8中list转map方法总结

    https://blog.csdn.net/zlj1217/article/details/81611834 背景在最近的工作开发之中,慢慢习惯了很多Java8中的Stream的用法,很方便而且也可以 ...

  6. test11111111

    test 博文内容中字符过多,拒绝显示 123123123

  7. 大数据之路week04--day05(java XML解析)

    java解析XML的四种方式: XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不 ...

  8. Redis做消息队列

    1.连接从Redis中获取日志文件并存储到ES中 [root@Logstash ~]# vim /usr/local/logstash/config/redis.conf input {     be ...

  9. axios并行请求

    有些操作需要在几个异步请求都完成之后再执行,虽然一个Ajax可以放到另一个Ajax完成的回调里面,但这样很容易导致回调地狱,且代码也极其不美观. 幸运的是axios提供了并行请求的方法, 使用方法: ...

  10. javaMail 详解

    原文:http://www.matrix.org.cn/resource/article/44/44101_JavaMail.html 一.JavaMail API简介JavaMail API是读取. ...