22 KiB
Tutorial do Drozer
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de cibersegurança? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e repositório hacktricks-cloud.
Dica de bug bounty: inscreva-se no Intigriti, uma plataforma premium de bug bounty criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje mesmo e comece a ganhar recompensas de até $100.000!
{% embed url="https://go.intigriti.com/hacktricks" %}
APKs para testar
Instalação
Instale o Cliente Drozer em seu host. Faça o download da última versão.
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
Baixe e instale o APK do drozer nas últimas versões. No momento, é este.
adb install drozer.apk
Iniciando o Servidor
O agente está sendo executado na porta 31415, precisamos fazer um redirecionamento de porta para estabelecer a comunicação entre o Cliente Drozer e o Agente. Aqui está o comando para fazer isso:
adb forward tcp:31415 tcp:31415
Finalmente, inicie o aplicativo e pressione o botão "ON"
E conecte-se a ele:
drozer console connect
Comandos Interessantes
Comandos | Descrição |
---|---|
Help MODULE | Mostra a ajuda do módulo selecionado |
list | Mostra uma lista de todos os módulos do drozer que podem ser executados na sessão atual. Isso oculta os módulos para os quais você não tem permissões adequadas para executar. |
shell | Inicia um shell Linux interativo no dispositivo, no contexto do Agente. |
clean | Remove arquivos temporários armazenados pelo drozer no dispositivo Android. |
load | Carrega um arquivo contendo comandos do drozer e os executa em sequência. |
module | Encontra e instala módulos adicionais do drozer da Internet. |
unset | Remove uma variável nomeada que o drozer passa para qualquer shell Linux que ele inicia. |
set | Armazena um valor em uma variável que será passada como uma variável de ambiente para qualquer shell Linux iniciado pelo drozer. |
shell | Inicia um shell Linux interativo no dispositivo, no contexto do Agente |
run MODULE | Executa um módulo do drozer |
exploit | O drozer pode criar exploits para executar no dispositivo. drozer exploit list |
payload | Os exploits precisam de um payload. drozer payload list |
Pacote
Encontre o nome do pacote filtrando por parte do nome:
dz> run app.package.list -f sieve
com.mwr.example.sieve
Informações básicas do pacote:
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 Manifesto:
run app.package.manifest jakhar.aseem.diva
Superfície de ataque do pacote:
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 (Injeção de SQL ou Traversão de Caminho).
- Serviços:
- is debuggable: Saiba mais
Atividades
O valor "android:exported" de um componente de atividade exportado é definido como "true" no arquivo AndroidManifest.xml:
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
Listar atividades exportadas:
To list the exported activities of an Android application, you can use the drozer
tool. This tool allows you to perform various security assessments on Android apps.
To list the exported activities, follow these steps:
-
Install
drozer
on your machine. -
Connect your Android device to your machine using a USB cable.
-
Enable USB debugging on your Android device.
-
Open a terminal or command prompt and navigate to the
drozer
installation directory. -
Run the following command to start the
drozer
console:drozer console connect
-
Once the
drozer
console is open, run the following command to start the app you want to assess:run app.package.list -f <package_name>
Replace
<package_name>
with the package name of the app you want to assess. -
After the app is started, run the following command to list the exported activities:
run app.activity.info -a <package_name>
Replace
<package_name>
with the package name of the app you want to assess. -
The
drozer
tool will display a list of exported activities along with their corresponding details, such as the activity name, package name, and intent filters.
By listing the exported activities of an Android app, you can identify potential security vulnerabilities and assess the app's overall security posture.
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.
{% code overflow="wrap" %}
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
{% endcode %}
Você também pode iniciar uma atividade exportada pelo adb:
- O nome do pacote é com.example.demo
- O nome da atividade exportada é com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity
Provedores de Conteúdo
Este post era muito grande para estar aqui, então você pode acessá-lo em sua própria página aqui.
Serviços
Um serviço exportado é declarado dentro do Manifest.xml:
{% code overflow="wrap" %}
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
{% endcode %}
Dentro do código, verifique a função **handleMessage
** que irá receber a mensagem:
Listar serviço
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
Interagir com um serviço
To interact with a service, you can use the run
command in drozer. This command allows you to execute various actions on the target application.
Para interagir com um serviço, você pode usar o comando run
no drozer. Esse comando permite que você execute várias ações no aplicativo alvo.
The basic syntax for the run
command is as follows:
A sintaxe básica para o comando run
é a seguinte:
run <module> <action> [options]
Where:
<module>
is the name of the module you want to run.<action>
is the action you want to perform on the module.[options]
are additional options or parameters required by the module.
Onde:
<module>
é o nome do módulo que você deseja executar.<action>
é a ação que você deseja realizar no módulo.[options]
são opções ou parâmetros adicionais necessários pelo módulo.
For example, to list all the activities in the target application, you can use the following command:
Por exemplo, para listar todas as atividades no aplicativo alvo, você pode usar o seguinte comando:
run app.activity.info
This will display a list of activities along with their corresponding package names.
Isso exibirá uma lista de atividades juntamente com seus respectivos nomes de pacote.
You can also specify additional options or parameters depending on the module and action you are using. For example, to launch a specific activity, you can use the following command:
Você também pode especificar opções ou parâmetros adicionais dependendo do módulo e ação que você está usando. Por exemplo, para iniciar uma atividade específica, você pode usar o seguinte comando:
run app.activity.start --component <package_name> <activity_name>
Replace <package_name>
with the package name of the target application and <activity_name>
with the name of the activity you want to launch.
Substitua <package_name>
pelo nome do pacote do aplicativo alvo e <activity_name>
pelo nome da atividade que você deseja iniciar.
By using the run
command, you can interact with various services and components of the target application, allowing you to perform actions such as starting activities, sending intents, accessing content providers, and more.
Ao usar o comando run
, você pode interagir com vários serviços e componentes do aplicativo alvo, permitindo que você execute ações como iniciar atividades, enviar intents, acessar provedores de conteúdo e muito mais.
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
:
Observe 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)
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
Receptores de Transmissão
Os aplicativos Android podem enviar ou receber mensagens de transmissão do sistema Android e de outros aplicativos Android, semelhante ao padrão de design publicar-assinar. Essas transmissões são enviadas quando ocorre um evento de interesse. Por exemplo, o sistema Android envia transmissões quando vários eventos do sistema ocorrem, como quando o sistema é inicializado ou o dispositivo começa a carregar. Os aplicativos também podem enviar transmissões personalizadas, por exemplo, para notificar outros aplicativos sobre algo que possa ser do seu interesse (por exemplo, algum novo dado foi baixado).
Os aplicativos podem se registrar para receber transmissões específicas. Quando uma transmissão é enviada, o sistema automaticamente encaminha as transmissões para os aplicativos que se inscreveram para receber aquele tipo específico de transmissão.
Isso pode aparecer dentro do arquivo Manifest.xml:
<receiver android:name=".MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
</intent-filter>
</receiver>
De: https://developer.android.com/guide/components/broadcasts
Após descobrir esses Receptores de Transmissão, você deve verificar o código deles. Preste atenção especial na função onReceive
, pois ela será responsável por lidar com as mensagens recebidas.
Detectar todos os receptores de transmissão
run app.broadcast.info #Detects all
Verificar receptores de transmissão de um aplicativo
To check the broadcast receivers of an app, you can use the drozer
tool. Broadcast receivers are components in an Android app that listen for system-wide events or custom events sent by other apps. They can be potential entry points for attackers to exploit.
To list the broadcast receivers of an app, follow these steps:
-
Install and set up
drozer
on your machine. -
Connect your Android device to your machine using a USB cable.
-
Open a terminal and run the following command to start a
drozer
session:drozer console connect
-
Once the session is started, run the following command to list the broadcast receivers of the target app:
run app.broadcast.info -a <package_name>
Replace
<package_name>
with the package name of the app you want to test. -
drozer
will display a list of broadcast receivers along with their corresponding permissions and exported status. Analyze the output to identify any potential security vulnerabilities.
By checking the broadcast receivers of an app, you can identify any insecure or misconfigured receivers that may pose a risk to the app's security.
#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 de Broadcast
Broadcasts são uma forma de comunicação entre componentes de um aplicativo Android. Eles permitem que um componente envie uma mensagem para todos os outros componentes registrados para receber esse tipo específico de mensagem. Essas mensagens podem ser usadas para iniciar ações em outros componentes, como iniciar uma atividade, exibir uma notificação ou executar um serviço em segundo plano.
No contexto da segurança, os broadcasts podem ser explorados por hackers para realizar ataques em aplicativos Android. Os hackers podem interceptar e manipular broadcasts para obter acesso não autorizado a informações confidenciais ou para executar ações maliciosas no dispositivo.
Neste tutorial, vamos explorar técnicas de pentesting para identificar e explorar vulnerabilidades relacionadas a interações de broadcast em aplicativos Android. Vamos usar a ferramenta Drozer, uma poderosa ferramenta de teste de segurança para aplicativos Android, para realizar esses testes.
Vamos começar examinando os diferentes tipos de interações de broadcast e como eles podem ser explorados em um contexto de pentesting.
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 apk FourGoats do 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.
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!"
Está depurável
Um APK de produção nunca deve estar 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 investigar mais a fundo quando sua aplicação está depurável e injetar código em tempo de execução.
Quando uma aplicação está depurável, ela aparecerá no Manifesto:
<application theme="@2131296387" debuggable="true"
Você pode encontrar todos os aplicativos depuráveis com o Drozer:
run app.package.debuggable
Tutoriais
- https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref
- http://mobiletools.mwrinfosecurity.com/Using-Drozer-for-application-security-assessments/
Mais informações
Dica de recompensa por bugs: inscreva-se na Intigriti, uma plataforma premium de recompensa por bugs criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje mesmo e comece a ganhar recompensas de até $100.000!
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de cibersegurança? Você quer ver sua empresa anunciada no HackTricks? Ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e para o repositório hacktricks-cloud.