.. | ||
exploiting-content-providers.md | ||
README.md |
Tutorial di Drozer
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF Controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud github repos.
Suggerimento per bug bounty: iscriviti a Intigriti, una piattaforma premium per bug bounty creata da hacker, per hacker! Unisciti a noi su https://go.intigriti.com/hacktricks oggi stesso e inizia a guadagnare ricompense fino a $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
APK da testare
Parti di questo tutorial sono state estratte dal pdf di documentazione di Drozer.
Installazione
Installa Drozer Client all'interno del tuo host. Scaricalo dalle ultime versioni.
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
Scarica e installa l'APK di drozer dalle ultime versioni. Al momento, è questa.
adb install drozer.apk
Avvio del server
L'agente è in esecuzione sulla porta 31415, è necessario effettuare il port forwarding per stabilire la comunicazione tra il client Drozer e l'agente. Ecco il comando da utilizzare:
adb forward tcp:31415 tcp:31415
Infine, avvia l'applicazione e premi il pulsante "ON"
E connettiti ad essa:
drozer console connect
Comandi Interessanti
Comandi | Descrizione |
---|---|
Help MODULE | Mostra l'aiuto del modulo selezionato |
list | Mostra un elenco di tutti i moduli drozer che possono essere eseguiti nella sessione corrente. Questo nasconde i moduli per i quali non si dispone delle autorizzazioni appropriate per eseguirli. |
shell | Avvia una shell Linux interattiva sul dispositivo, nel contesto dell'Agente. |
clean | Rimuove i file temporanei memorizzati da drozer sul dispositivo Android. |
load | Carica un file contenente comandi drozer ed eseguili in sequenza. |
module | Trova e installa moduli drozer aggiuntivi da Internet. |
unset | Rimuove una variabile nominata che drozer passa a qualsiasi shell Linux che avvia. |
set | Memorizza un valore in una variabile che verrà passata come variabile ambientale a qualsiasi shell Linux avviata da drozer. |
shell | Avvia una shell Linux interattiva sul dispositivo, nel contesto dell'Agente |
run MODULE | Esegue un modulo drozer |
exploit | Drozer può creare exploit da eseguire nel dispositivo. drozer exploit list |
payload | Gli exploit hanno bisogno di un payload. drozer payload list |
Pacchetto
Trova il nome del pacchetto filtrando per parte del nome:
dz> run app.package.list -f sieve
com.mwr.example.sieve
Informazioni di base del pacchetto:
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
Leggi Manifest:
run app.package.manifest jakhar.aseem.diva
Superficie di attacco del pacchetto:
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
- Attività: Forse puoi avviare un'attività e bypassare qualche tipo di autorizzazione che dovrebbe impedirti di lanciarla.
- Provider di contenuti: Forse puoi accedere a dati privati o sfruttare qualche vulnerabilità (SQL Injection o Path Traversal).
- Servizi:
- is debuggable: Scopri di più
Attività
Il valore "android:exported" di un componente di attività esportato è impostato su "true" nel file AndroidManifest.xml:
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
Elenco delle attività esportate:
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
Avviare un'attività:
Forse puoi avviare un'attività e bypassare qualche tipo di autorizzazione che dovrebbe impedirti di lanciarla.
{% code overflow="wrap" %}
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
{% endcode %}
Puoi anche avviare un'attività esportata da adb:
- Il nome del pacchetto è com.example.demo
- Il nome dell'attività esportata è com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity
Fornitori di contenuti
Questo post era troppo grande per essere qui, quindi puoi accedere ad esso nella sua pagina dedicata qui.
Servizi
Un servizio esportato viene dichiarato all'interno del Manifest.xml:
{% code overflow="wrap" %}
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
{% endcode %}
All'interno del codice controlla la funzione **handleMessage
** che riceverà il messaggio:
Elenco dei servizi
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
Interagire con un servizio
To interact with a service, you need to establish a connection and send requests to it. In the context of Android app pentesting, this means interacting with the app's components and APIs.
Drozer provides several modules that allow you to interact with different services. These modules can be used to perform various actions, such as sending intents, making HTTP requests, and accessing content providers.
Here are some examples of how you can use Drozer to interact with services:
-
Intents: You can use the
app.activity.start
module to send intents to the app's activities. This can be useful for launching specific activities or triggering certain actions within the app. -
HTTP requests: The
app.webview.inject
module allows you to inject JavaScript code into the app's WebView component. This can be used to perform actions such as clicking buttons or filling out forms on web pages. -
Content providers: Drozer provides the
content.provider.query
module, which allows you to query the app's content providers and retrieve data from them. This can be useful for extracting sensitive information or testing for data leakage vulnerabilities.
By using these modules and understanding how the app's services work, you can effectively interact with the app and uncover potential security issues.
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
Esempio
Dai un'occhiata all'aiuto di drozer per app.service.send
:
Nota che invierai prima i dati all'interno di "msg.what", poi "msg.arg1" e "msg.arg2", dovresti controllare all'interno del codice quali informazioni vengono utilizzate e dove.
Utilizzando l'opzione --extra
puoi inviare qualcosa interpretato da "msg.replyTo", e utilizzando --bundle-as-obj
crei un oggetto con i dettagli forniti.
Nell'esempio seguente:
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
Ricevitori di trasmissione
Nella sezione Informazioni di base su Android puoi vedere cosa è un ricevitore di trasmissione.
Dopo aver scoperto questi ricevitori di trasmissione, dovresti controllare il codice di essi. Presta particolare attenzione alla funzione onReceive
poiché gestirà i messaggi ricevuti.
Rileva tutti i ricevitori di trasmissione
run app.broadcast.info #Detects all
Verifica i ricevitori di trasmissione di un'app
To check the broadcast receivers of an app, you can use the drozer
tool. This tool allows you to interact with Android devices and applications, and it provides a wide range of functionalities for mobile penetration testing.
To begin, make sure you have drozer
installed on your machine. Once installed, follow these steps:
-
Connect your Android device to your machine using a USB cable.
-
Enable USB debugging on your Android device by going to Settings > Developer options and toggling the USB debugging option.
-
Open a terminal and run the following command to start the
drozer
console:drozer console connect
-
Once connected, run the following command to list all the installed applications on the device:
run app.package.list -f
This will display a list of installed applications along with their package names.
-
Identify the package name of the app you want to check the broadcast receivers for.
-
Run the following command to list the broadcast receivers of the app:
run app.broadcast.info -a <package_name>
Replace
<package_name>
with the actual package name of the app.This command will display information about the broadcast receivers registered by the app, including their names, permissions, and exported status.
By checking the broadcast receivers of an app, you can identify potential security vulnerabilities or misconfigurations that could be exploited by attackers.
#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
Interazioni di Broadcast
Broadcast è un meccanismo utilizzato nelle applicazioni Android per consentire la comunicazione tra diverse componenti dell'applicazione o tra diverse applicazioni. Le interazioni di broadcast consentono alle applicazioni di inviare e ricevere messaggi di broadcast, che possono essere utilizzati per scopi diversi, come la notifica di eventi o l'aggiornamento dei dati.
Le interazioni di broadcast possono essere utilizzate anche per scopi malevoli, come l'intercettazione di informazioni sensibili o l'esecuzione di azioni non autorizzate. Pertanto, è importante comprendere come funzionano le interazioni di broadcast e come proteggere le applicazioni da potenziali attacchi.
In questo tutorial, impareremo come utilizzare Drozer per esplorare e testare le interazioni di broadcast nelle applicazioni Android. Drozer è uno strumento di test delle applicazioni Android che consente di analizzare e manipolare le applicazioni Android in esecuzione su un dispositivo o un emulatore.
Continua a leggere per scoprire come utilizzare Drozer per identificare e sfruttare le vulnerabilità nelle interazioni di broadcast delle applicazioni Android.
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
Invia un messaggio
In questo esempio, sfruttando l'apk FourGoats Content Provider, è possibile inviare un SMS arbitrario a una destinazione non premium senza chiedere il permesso all'utente.
Se leggi il codice, i parametri "phoneNumber" e "message" devono essere inviati al 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!"
È debuggabile
Un APK di produzione non dovrebbe mai essere debuggabile.
Questo significa che è possibile collegare un debugger Java all'applicazione in esecuzione, ispezionarla durante l'esecuzione, impostare punti di interruzione, procedere passo dopo passo, raccogliere valori delle variabili e persino modificarli. InfoSec institute ha un eccellente articolo su come approfondire quando l'applicazione è debuggabile e iniettare codice in tempo di esecuzione.
Quando un'applicazione è debuggabile, apparirà nel Manifest:
<application theme="@2131296387" debuggable="true"
Puoi trovare tutte le applicazioni debuggabili con Drozer:
run app.package.debuggable
Tutorial
- https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref
- https://github.com/mgcfish/mobiletools/blob/master/_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md
- https://www.hackingarticles.in/android-penetration-testing-drozer/
- https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac
Ulteriori informazioni
Suggerimento per bug bounty: iscriviti a Intigriti, una piattaforma premium per bug bounty creata da hacker, per hacker! Unisciti a noi su https://go.intigriti.com/hacktricks oggi stesso e inizia a guadagnare ricompense fino a $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF, controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai repository github di HackTricks e HackTricks Cloud.