| Reporter | Title | Published | Views | Family All 34 |
|---|---|---|---|---|
| Alfred-TryHackMe-Walkthrough-Jenkins-Exploitation-Windows-Token-Privilege-Escalation | 17 May 202623:23 | – | githubexploit | |
| MS12-020 Microsoft RDP Vulnerability Exploit PoC | 12 Mar 201200:00 | – | zdt | |
| Exploit for Code Injection in Microsoft | 27 Nov 202010:59 | – | gitee | |
| Exploit for Code Injection in Microsoft | 25 Nov 202023:04 | – | gitee | |
| Exploit for Code Injection in Microsoft | 17 Nov 202009:07 | – | gitee | |
| CVE-2012-0002 | 13 Mar 201200:00 | – | attackerkb | |
| The vulnerability of the Windows Embedded Standard 2009 operating system, which allows a perpetrator to trigger a service failure | 21 Oct 201500:00 | – | bdu_fstec | |
| CVE-2012-0002 | 16 Mar 201200:00 | – | circl | |
| Microsoft Windows Remote Desktop Protocol Code Execution (MS12-020; CVE-2012-0002) | 13 Mar 201200:00 | – | checkpoint_advisories | |
| Microsoft Windows Remote Desktop Protocol Code Execution (MS12-020) - Ver2 (CVE-2012-0002) | 26 Mar 201500:00 | – | checkpoint_advisories |
`##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Auxiliary
include Msf::Exploit::Remote::Tcp
include Msf::Auxiliary::Scanner
include Msf::Auxiliary::Report
def initialize(info = {})
super(update_info(info,
'Name' => 'MS12-020 Microsoft Remote Desktop Checker',
'Description' => %q{
This module checks a range of hosts for the MS12-020 vulnerability.
This does not cause a DoS on the target.
},
'References' =>
[
[ 'CVE', '2012-0002' ],
[ 'MSB', 'MS12-020' ],
[ 'URL', 'https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2012/ms12-020' ],
[ 'EDB', '18606' ],
[ 'URL', 'https://svn.nmap.org/nmap/scripts/rdp-vuln-ms12-020.nse' ]
],
'Author' =>
[
'Royce Davis "R3dy" <rdavis[at]accuvant.com>',
'Brandon McCann "zeknox" <bmccann[at]accuvant.com>'
],
'License' => MSF_LICENSE
))
register_options(
[
OptPort.new('RPORT', [ true, 'Remote port running RDP', 3389 ])
])
end
def check_rdp
# code to check if RDP is open or not
vprint_status("Verifying RDP protocol...")
# send connection
sock.put(connection_request)
# read packet to see if its rdp
res = sock.get_once(-1, 5)
# return true if this matches our vulnerable response
( res and res.match("\x03\x00\x00\x0b\x06\xd0\x00\x00\x12\x34\x00") )
end
def report_goods
report_vuln(
:host => rhost,
:port => rport,
:proto => 'tcp',
:name => self.name,
:info => 'Response indicates a missing patch',
:refs => self.references
)
end
def connection_request
"\x03\x00" + # TPKT Header version 03, reserved 0
"\x00\x0b" + # Length
"\x06" + # X.224 Data TPDU length
"\xe0" + # X.224 Type (Connection request)
"\x00\x00" + # dst reference
"\x00\x00" + # src reference
"\x00" # class and options
end
def connect_initial
"\x03\x00\x00\x65" + # TPKT Header
"\x02\xf0\x80" + # Data TPDU, EOT
"\x7f\x65\x5b" + # Connect-Initial
"\x04\x01\x01" + # callingDomainSelector
"\x04\x01\x01" + # callingDomainSelector
"\x01\x01\xff" + # upwardFlag
"\x30\x19" + # targetParams + size
"\x02\x01\x22" + # maxChannelIds
"\x02\x01\x20" + # maxUserIds
"\x02\x01\x00" + # maxTokenIds
"\x02\x01\x01" + # numPriorities
"\x02\x01\x00" + # minThroughput
"\x02\x01\x01" + # maxHeight
"\x02\x02\xff\xff" + # maxMCSPDUSize
"\x02\x01\x02" + # protocolVersion
"\x30\x18" + # minParams + size
"\x02\x01\x01" + # maxChannelIds
"\x02\x01\x01" + # maxUserIds
"\x02\x01\x01" + # maxTokenIds
"\x02\x01\x01" + # numPriorities
"\x02\x01\x00" + # minThroughput
"\x02\x01\x01" + # maxHeight
"\x02\x01\xff" + # maxMCSPDUSize
"\x02\x01\x02" + # protocolVersion
"\x30\x19" + # maxParams + size
"\x02\x01\xff" + # maxChannelIds
"\x02\x01\xff" + # maxUserIds
"\x02\x01\xff" + # maxTokenIds
"\x02\x01\x01" + # numPriorities
"\x02\x01\x00" + # minThroughput
"\x02\x01\x01" + # maxHeight
"\x02\x02\xff\xff" + # maxMCSPDUSize
"\x02\x01\x02" + # protocolVersion
"\x04\x00" # userData
end
def user_request
"\x03\x00" + # header
"\x00\x08" + # length
"\x02\xf0\x80" + # X.224 Data TPDU (2 bytes: 0xf0 = Data TPDU, 0x80 = EOT, end of transmission)
"\x28" # PER encoded PDU contents
end
def channel_request
"\x03\x00\x00\x0c" +
"\x02\xf0\x80\x38"
end
def check_rdp_vuln
# check if rdp is open
unless check_rdp
vprint_status "Could not connect to RDP."
return Exploit::CheckCode::Unknown
end
# send connectInitial
sock.put(connect_initial)
# send userRequest
sock.put(user_request)
res = sock.get_once(-1, 5)
return Exploit::CheckCode::Unknown unless res # nil due to a timeout
user1 = res[9,2].unpack("n").first
chan1 = user1 + 1001
# send 2nd userRequest
sock.put(user_request)
res = sock.get_once(-1, 5)
return Exploit::CheckCode::Unknown unless res # nil due to a timeout
user2 = res[9,2].unpack("n").first
chan2 = user2 + 1001
# send channel request one
sock.put(channel_request << [user1, chan2].pack("nn"))
res = sock.get_once(-1, 5)
return Exploit::CheckCode::Unknown unless res # nil due to a timeout
if res[7,2] == "\x3e\x00"
# send ChannelRequestTwo - prevent BSoD
sock.put(channel_request << [user2, chan2].pack("nn"))
report_goods
return Exploit::CheckCode::Vulnerable
else
return Exploit::CheckCode::Safe
end
# Can't determine, but at least I know the service is running
return Exploit::CheckCode::Detected
end
def check_host(ip)
# The check command will call this method instead of run_host
status = Exploit::CheckCode::Unknown
begin
connect
status = check_rdp_vuln
rescue Rex::AddressInUse, ::Errno::ETIMEDOUT, Rex::HostUnreachable, Rex::ConnectionTimeout, Rex::ConnectionRefused, ::Timeout::Error, ::EOFError => e
bt = e.backtrace.join("\n")
vprint_error("Unexpected error: #{e.message}")
vprint_line(bt)
elog(e)
ensure
disconnect
end
status
end
def run_host(ip)
# Allow the run command to call the check command
status = check_host(ip)
if status == Exploit::CheckCode::Vulnerable
print_good("#{ip}:#{rport} - #{status[1]}")
else
print_status("#{ip}:#{rport} - #{status[1]}")
end
end
end
`
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation