hacktricks/mobile-pentesting/android-app-pentesting/drozer-tutorial
2024-07-19 11:40:15 +00:00
..
exploiting-content-providers.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 11:40:15 +00:00
README.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 11:40:15 +00:00

Drozer Tutorial

{% hint style="success" %} Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks
{% endhint %}

Bug bounty wenk: meld aan by Intigriti, 'n premium bug bounty platform geskep deur hackers, vir hackers! Sluit by ons aan by https://go.intigriti.com/hacktricks vandag, en begin verdien bounties tot $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

APKs om te toets

Dele van hierdie tutoriaal is onttrek uit die Drozer dokumentasie pdf.

Installasie

Installeer Drozer Client binne jou gasheer. Laai dit af van die nuutste vrystellings.

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

Laai die drozer APK af en installeer dit vanaf die nuutste vrystellings. Op hierdie oomblik is dit hierdie.

adb install drozer.apk

Starting the Server

Agent loop op poort 31415, ons moet port forward om die kommunikasie tussen die Drozer Client en Agent te vestig, hier is die opdrag om dit te doen:

adb forward tcp:31415 tcp:31415

Laastens, begin die toepassing en druk die onderkant "AAN"

En verbind daarmee:

drozer console connect

Interessante Opdragte

Opdragte Beskrywing
Help MODULE Wys hulp van die geselekteerde module
list Wys 'n lys van alle drozer modules wat in die huidige sessie uitgevoer kan word. Dit verberg modules waarvoor jy nie toepaslike regte het om te loop nie.
shell Begin 'n interaktiewe Linux-skaal op die toestel, in die konteks van die Agent.
clean Verwyder tydelike lêers wat deur drozer op die Android-toestel gestoor is.
load Laai 'n lêer wat drozer-opdragte bevat en voer dit in volgorde uit.
module Vind en installeer addisionele drozer modules van die Internet.
unset Verwyder 'n benoemde veranderlike wat drozer aan enige Linux-skaal wat dit genereer, deurgee.
set Stoor 'n waarde in 'n veranderlike wat as 'n omgewingsveranderlike aan enige Linux-skaal wat deur drozer gegenereer word, deurgegee sal word.
shell Begin 'n interaktiewe Linux-skaal op die toestel, in die konteks van die Agent
run MODULE Voer 'n drozer module uit
exploit Drozer kan eksplosiewe skep om in die toestel uit te voer. drozer exploit list
payload Die eksplosiewe benodig 'n payload. drozer payload list

Pakket

Vind die naam van die pakket deur te filter op 'n deel van die naam:

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

Basiese Inligting van die pakket:

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

Lees Manifest:

run app.package.manifest jakhar.aseem.diva

Aanvaloppervlak van die pakket:

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
  • Aktiwiteite: Miskien kan jy 'n aktiwiteit begin en 'n tipe magtiging omseil wat jou moet keer om dit te begin.
  • Inhoudverskaffers: Miskien kan jy toegang tot private data verkry of 'n sekuriteitskwesbaarheid benut (SQL Injection of Path Traversal).
  • Dienste:
  • is debuggable: Leer meer

Aktiwiteite

'n Uitgevoerde aktiwiteit komponent se “android:exported” waarde is op “true” in die AndroidManifest.xml-lêer gestel:

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

Lys van uitgevoerde aktiwiteite:

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

Begin aktiwiteit:

Miskien kan jy 'n aktiwiteit begin en 'n tipe magtiging omseil wat jou moet keer om dit te begin.

{% code overflow="wrap" %}

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

{% endcode %}

Jy kan ook 'n geëksporteerde aktiwiteit vanaf adb begin:

  • Pakketnaam is com.example.demo
  • Geëksporteerde Aktiwiteitnaam is com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity

Inhoudverskaffers

Hierdie pos was te groot om hier te wees, so jy kan dit in sy eie bladsy hier toegang.

Dienste

'n Geverifieerde diens word binne die Manifest.xml verklaar:

{% code overflow="wrap" %}

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

{% endcode %}

Binne die kode kontroleer vir die **handleMessage** funksie wat die boodskap sal ontvang:

Lysdiens

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

Interaksie met 'n diens

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

Voorbeeld

Kyk na die drozer hulp vir app.service.send:

Let daarop dat jy eers die data binne "msg.what" sal stuur, dan "msg.arg1" en "msg.arg2", jy moet binne die kode watter inligting gebruik word en waar nagaan.
Met die --extra opsie kan jy iets stuur wat deur "msg.replyTo" geïnterpreteer word, en met --bundle-as-obj skep jy 'n objek met die verskafde besonderhede.

In die volgende voorbeeld:

  • 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

Uitsendingsontvangers

In die Android basiese inligting afdeling kan jy sien wat 'n Uitsendingsontvanger is.

Na die ontdekking van hierdie Uitsendingsontvangers moet jy die kode daarvan nagaan. Gee spesiale aandag aan die onReceive funksie aangesien dit die ontvangde boodskappe sal hanteer.

Detecteer alle uitsendingsontvangers

run app.broadcast.info #Detects all

Kontroleer uitsaaikreceivers van 'n app

#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

Uitsending Interaksies

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

Stuur 'n boodskap

In hierdie voorbeeld wat die FourGoats apk Content Provider misbruik, kan jy enige SMS na 'n nie-premium bestemming stuur sonder om die gebruiker om toestemming te vra.

As jy die kode lees, moet die parameters "phoneNumber" en "message" na die Content Provider gestuur word.

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!"

Is debuggeable

'n Produksie APK moet nooit debuggeable wees.
Dit beteken dat jy java debugger aan die lopende toepassing kan heg, dit in werklike tyd kan inspekteer, breekpunte kan stel, stap vir stap kan gaan, veranderlike waardes kan versamel en selfs hulle kan verander. InfoSec institute het 'n uitstekende artikel oor hoe om dieper te delf wanneer jou toepassing debuggeable is en runtime kode in te spuit.

Wanneer 'n toepassing debuggeable is, sal dit in die Manifest verskyn:

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

U kan alle debugbare toepassings met Drozer vind:

run app.package.debuggable

Tutorials

More info

Bug bounty tip: meld aan by Intigriti, 'n premium bug bounty platform geskep deur hackers, vir hackers! Sluit vandag by ons aan by https://go.intigriti.com/hacktricks en begin om bounties tot $100,000 te verdien!

{% embed url="https://go.intigriti.com/hacktricks" %}

{% hint style="success" %} Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}