一个XP SP3调用0地址蓝屏BUG
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的更多相关文章
- 【旧文章搬运】PsVoid中IrpCreateFile函数在Win7下蓝屏BUG分析及解决
原文发表于百度空间,2010-04-05========================================================================== 这也许是我 ...
- windows xp sp3 下载地址
windows xp service pack 3/ windows xp sp3 简体中文版下载地址: http://download.windowsupdate.com/msdownload/ ...
- 电脑蓝屏分析教程,附工具WinDbg(x86 x64)6.12.0002.633下载
我们常常在使用电脑中,有时会碰到电脑蓝屏,我们经常束手无策,不知道为什么会蓝屏?有些蓝屏后自动重启能正常进入系统,那么我们就可以借助工具进行分析.而有些可能需要进入到安全模式或者pe系统才会正常,那么 ...
- Windows 7 蓝屏代码大全 & 蓝屏全攻略
关于Windows 7.Vista等系统的蓝屏,之前软媒在Win7之家和Vista之家都有很多文章讨论过,但是都是筛选的常见的一些问题,今天这个文章是个大全,希望大家看着别头痛,文章收藏下来以后待查即 ...
- Windows 7 蓝屏代码大全 & 蓝屏全攻略
关于Windows 7.Vista等系统的蓝屏.之前软媒在Win7之家和Vista之家都有非常多文章讨论过,可是都是筛选的常见的一些问题,今天这个文章是个大全.希望大家看着别头痛.文章收藏下来以后待查 ...
- 分析Windows的死亡蓝屏(BSOD)机制
这篇文章本来是投Freebuf的,结果没过.就贴到博客里吧,图懒得发上来了 对于Windows系统来说,被人们视为洪水猛兽的蓝屏也是一种有利于系统稳定的机制.蓝屏其实是Windows系 统的一种自查机 ...
- 用“U盘”重新安装(MSDN)原版Windows XP sp3操作系统(图文)
安装微软(MSDN)原版Windows XP sp3系统的方法不少,可以说是很多,但是我就用“U盘”安装.用“U盘”装XP系统也不是什么稀罕事,不会的,就按照下面我常用的“U盘”装原版Windows ...
- Networx蓝屏问题
本人系统win7专业版64位. 从5月底开始就时不时有蓝屏发生,而且可以说是没有任何征兆就"啪"的一下蓝了... 有时候是隔个四五天蓝屏一次,有时候一天都能蓝好几次,实在是让人恼火 ...
- win7蓝屏死机0x0000003B错误蓝屏故障解决
win7蓝屏死机0x0000003B错误蓝屏故障解决 刚才一个朋友问我:电脑蓝屏了怎么办. 我问他要了电脑的截图,自己看了错误代码:0x0000003B 搜索资料,查询了一番.都是说电脑中病毒或者是系 ...
随机推荐
- [转载]Java中继承、装饰者模式和代理模式的区别
[转载]Java中继承.装饰者模式和代理模式的区别 这是我在学Java Web时穿插学习Java设计模式的笔记 我就不转载原文了,直接指路好了: 装饰者模式和继承的区别: https://blog.c ...
- Kmalloc可以申请的最大内存
Kmalloc申请的最大内存 以前虽然读过源码,但是对于它的申请上限确实没注意过.下面分析下,下面是kmalloc的源码. 可以看出,如果想知道kmalloc能申请的范围,需要跳转到<linux ...
- 【转】DELPHI开始支持LINUX DOCKER
这是咏南翻译Marco Cantu的文章. 在过去的几年中,将服务器端解决方案(实际上是任何类型的应用程序)部署到轻量级DOCKER而不是物理机器或虚拟机已经变得越来越普遍,因为这允许更大的灵活性(在 ...
- Window10下Python3.7 安装与卸载
1.进入官网https://www.python.org/,点击Downloads下的Windows按钮,进入下载页面. 2.如下图所示,点击下载. 3.安装Python3.7.4 4.打开cmd,输 ...
- 【转】Java8中list转map方法总结
https://blog.csdn.net/zlj1217/article/details/81611834 背景在最近的工作开发之中,慢慢习惯了很多Java8中的Stream的用法,很方便而且也可以 ...
- test11111111
test 博文内容中字符过多,拒绝显示 123123123
- 大数据之路week04--day05(java XML解析)
java解析XML的四种方式: XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不 ...
- Redis做消息队列
1.连接从Redis中获取日志文件并存储到ES中 [root@Logstash ~]# vim /usr/local/logstash/config/redis.conf input { be ...
- axios并行请求
有些操作需要在几个异步请求都完成之后再执行,虽然一个Ajax可以放到另一个Ajax完成的回调里面,但这样很容易导致回调地狱,且代码也极其不美观. 幸运的是axios提供了并行请求的方法, 使用方法: ...
- javaMail 详解
原文:http://www.matrix.org.cn/resource/article/44/44101_JavaMail.html 一.JavaMail API简介JavaMail API是读取. ...