Drozer Tutorial

Reading time: 8 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

APKs para testar

Partes deste tutorial foram extraídas da documentação pdf do Drozer.

Instalação

Instale o Drozer Client dentro do seu host. Baixe-o a partir das últimas versões.

bash
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity

Baixe e instale o APK do drozer a partir das últimas versões. Neste momento, é este.

bash
adb install drozer.apk

Iniciando o Servidor

O agente está rodando na porta 31415, precisamos port forward para estabelecer a comunicação entre o Cliente Drozer e o Agente, aqui está o comando para fazer isso:

bash
adb forward tcp:31415 tcp:31415

Finalmente, inicie a aplicação e pressione o botão "LIGAR"

E conecte-se a ela:

bash
drozer console connect

Comandos Interessantes

ComandosDescrição
Help MODULEMostra a ajuda do módulo selecionado
listMostra uma lista de todos os módulos drozer que podem ser executados na sessão atual. Isso oculta módulos que você não tem permissões apropriadas para executar.
shellInicia um shell Linux interativo no dispositivo, no contexto do Agente.
cleanRemove arquivos temporários armazenados pelo drozer no dispositivo Android.
loadCarrega um arquivo contendo comandos drozer e os executa em sequência.
moduleEncontra e instala módulos drozer adicionais da Internet.
unsetRemove uma variável nomeada que o drozer passa para quaisquer shells Linux que ele gera.
setArmazena um valor em uma variável que será passada como uma variável ambiental para quaisquer shells Linux gerados pelo drozer.
shellInicia um shell Linux interativo no dispositivo, no contexto do Agente
run MODULEExecuta um módulo drozer
exploitO drozer pode criar exploits para executar no dispositivo. drozer exploit list
payloadOs exploits precisam de um payload. drozer payload list

Pacote

Encontre o nome do pacote filtrando por parte do nome:

bash
dz> run app.package.list -f sieve
com.mwr.example.sieve

Informações Básicas do pacote:

bash
dz> run app.package.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
Process Name: com.mwr.example.sieve
Version: 1.0
Data Directory: /data/data/com.mwr.example.sieve
APK Path: /data/app/com.mwr.example.sieve-2.apk
UID: 10056
GID: [1028, 1015, 3003]
Shared Libraries: null
Shared User ID: null
Uses Permissions:
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.INTERNET
Defines Permissions:
- com.mwr.example.sieve.READ_KEYS
- com.mwr.example.sieve.WRITE_KEYS

Leia Manifest:

bash
run app.package.manifest jakhar.aseem.diva

Superfície de ataque do pacote:

bash
dz> run app.package.attacksurface com.mwr.example.sieve
Attack Surface:
3 activities exported
0 broadcast receivers exported
2 content providers exported
2 services exported
is debuggable
  • Atividades: Talvez você possa iniciar uma atividade e contornar algum tipo de autorização que deveria impedir você de lançá-la.
  • Provedores de conteúdo: Talvez você possa acessar dados privados ou explorar alguma vulnerabilidade (SQL Injection ou Path Traversal).
  • Serviços:
  • é depurável: Saiba mais

Atividades

O valor “android:exported” de um componente de atividade exportado é definido como “true” no arquivo AndroidManifest.xml:

html
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>

Listar atividades exportadas:

bash
dz> run app.activity.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.FileSelectActivity
com.mwr.example.sieve.MainLoginActivity
com.mwr.example.sieve.PWList

Iniciar atividade:

Talvez você possa iniciar uma atividade e contornar algum tipo de autorização que deveria impedir você de lançá-la.

bash
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList

Você também pode iniciar uma atividade exportada a partir do adb:

  • PackageName é com.example.demo
  • Exported ActivityName é com.example.test.MainActivity
bash
adb shell am start -n com.example.demo/com.example.test.MainActivity

Provedores de Conteúdo

Este post foi tão grande que você pode acessá-lo em sua própria página aqui.

Serviços

Um serviço exportado é declarado dentro do Manifest.xml:

html
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>

Dentro do código verifique a função handleMessage que irá receber a mensagem:

Listar serviço

bash
dz> run app.service.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.AuthService
Permission: null
com.mwr.example.sieve.CryptoService
Permission: null

Interaja com um serviço

bash
app.service.send            Send a Message to a service, and display the reply
app.service.start           Start Service
app.service.stop            Stop Service

Exemplo

Dê uma olhada na ajuda do drozer para app.service.send:

Note que você estará enviando primeiro os dados dentro de "msg.what", depois "msg.arg1" e "msg.arg2", você deve verificar dentro do código quais informações estão sendo usadas e onde.
Usando a opção --extra você pode enviar algo interpretado por "msg.replyTo", e usando --bundle-as-obj você cria um objeto com os detalhes fornecidos.

No exemplo a seguir:

  • what == 2354
  • arg1 == 9234
  • arg2 == 1
  • replyTo == object(string com.mwr.example.sieve.PIN 1337)
bash
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 1 --extra string com.mwr.example.sieve.PIN 1337 --bundle-as-obj

Broadcast Receivers

Na seção de informações básicas do Android, você pode ver o que é um Broadcast Receiver.

Após descobrir esses Broadcast Receivers, você deve verificar o código deles. Preste atenção especial à função onReceive, pois ela estará lidando com as mensagens recebidas.

Detectar todos os broadcast receivers

bash
run app.broadcast.info #Detects all

Verifique os receptores de broadcast de um app

bash
#Check one negative
run app.broadcast.info -a jakhar.aseem.diva
Package: jakhar.aseem.diva
No matching receivers.

# Check one positive
run app.broadcast.info -a com.google.android.youtube
Package: com.google.android.youtube
com.google.android.libraries.youtube.player.PlayerUiModule$LegacyMediaButtonIntentReceiver
Permission: null
com.google.android.apps.youtube.app.common.notification.GcmBroadcastReceiver
Permission: com.google.android.c2dm.permission.SEND
com.google.android.apps.youtube.app.PackageReplacedReceiver
Permission: null
com.google.android.libraries.youtube.account.AccountsChangedReceiver
Permission: null
com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver
Permission: null

Interações Broadcast

bash
app.broadcast.info          Get information about broadcast receivers
app.broadcast.send          Send broadcast using an intent
app.broadcast.sniff         Register a broadcast receiver that can sniff particular intents

Enviar uma mensagem

Neste exemplo, abusando do FourGoats apk Content Provider, você pode enviar um SMS arbitrário para qualquer destino não premium sem pedir permissão ao usuário.

Se você ler o código, os parâmetros "phoneNumber" e "message" devem ser enviados para o Content Provider.

bash
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats.broadcastreceivers SendSMSNowReceiver --extra string phoneNumber 123456789 --extra string message "Hello mate!"

É depurável

Um APK de produção nunca deve ser depurável.
Isso significa que você pode anexar um depurador java à aplicação em execução, inspecioná-la em tempo de execução, definir pontos de interrupção, avançar passo a passo, coletar valores de variáveis e até mesmo alterá-los. O InfoSec Institute tem um excelente artigo sobre como aprofundar quando sua aplicação é depurável e injetar código em tempo de execução.

Quando uma aplicação é depurável, ela aparecerá no Manifest:

xml
<application theme="@2131296387" debuggable="true"

Você pode encontrar todos os aplicativos depuráveis com Drozer:

bash
run app.package.debuggable

Tutoriais

Mais informações

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks