# Drozer Tutorial {{#include ../../../banners/hacktricks-training.md}} ## APKs to test - [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (mrwlabs से) - [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz) **इस ट्यूटोरियल के कुछ भाग** [**Drozer दस्तावेज़ pdf**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)** से निकाले गए हैं।** ## Installation Drozer Client को अपने होस्ट के अंदर इंस्टॉल करें। इसे [latest releases](https://github.com/mwrlabs/drozer/releases) से डाउनलोड करें। ```bash pip install drozer-2.4.4-py2-none-any.whl pip install twisted pip install service_identity ``` drozer APK को [latest releases](https://github.com/mwrlabs/drozer/releases) से डाउनलोड और इंस्टॉल करें। इस समय यह [this](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk) है। ```bash adb install drozer.apk ``` ### सर्वर शुरू करना एजेंट पोर्ट 31415 पर चल रहा है, हमें [port forward](https://en.wikipedia.org/wiki/Port_forwarding) करना होगा ताकि Drozer Client और Agent के बीच संचार स्थापित किया जा सके, इसे करने के लिए यहां कमांड है: ```bash adb forward tcp:31415 tcp:31415 ``` अंत में, **launch** करें **application** और नीचे "**ON**" दबाएं ![](<../../../images/image (459).png>) और इससे कनेक्ट करें: ```bash drozer console connect ``` ## Interesting Commands | **Commands** | **Description** | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Help MODULE** | चयनित मॉड्यूल की मदद दिखाता है | | **list** | वर्तमान सत्र में निष्पादित किए जा सकने वाले सभी drozer मॉड्यूल की सूची दिखाता है। यह उन मॉड्यूल को छिपाता है जिनके लिए आपके पास उचित अनुमति नहीं है। | | **shell** | एजेंट के संदर्भ में डिवाइस पर एक इंटरैक्टिव लिनक्स शेल शुरू करें। | | **clean** | एंड्रॉइड डिवाइस पर drozer द्वारा संग्रहीत अस्थायी फ़ाइलें हटा दें। | | **load** | drozer कमांड वाले फ़ाइल को लोड करें और उन्हें अनुक्रम में निष्पादित करें। | | **module** | इंटरनेट से अतिरिक्त drozer मॉड्यूल खोजें और स्थापित करें। | | **unset** | एक नामित चर को हटा दें जिसे drozer किसी भी लिनक्स शेल में पास करता है जिसे यह उत्पन्न करता है। | | **set** | एक मान को एक चर में संग्रहीत करें जिसे drozer द्वारा उत्पन्न किसी भी लिनक्स शेल में पर्यावरणीय चर के रूप में पास किया जाएगा। | | **shell** | एजेंट के संदर्भ में डिवाइस पर एक इंटरैक्टिव लिनक्स शेल शुरू करें। | | **run MODULE** | एक drozer मॉड्यूल निष्पादित करें | | **exploit** | Drozer निर्णय में निष्पादित करने के लिए शोषण बना सकता है। `drozer exploit list` | | **payload** | शोषण को एक पेलोड की आवश्यकता होती है। `drozer payload list` | ### Package **नाम** का पता लगाएं जो नाम के भाग द्वारा फ़िल्टर किया गया है: ```bash dz> run app.package.list -f sieve com.mwr.example.sieve ``` **पैकेज की मूल जानकारी:** ```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 ``` **मैनिफेस्ट**: ```bash run app.package.manifest jakhar.aseem.diva ``` **पैकेज की हमले की सतह**: ```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 ``` - **Activities**: शायद आप एक गतिविधि शुरू कर सकते हैं और किसी प्रकार की प्राधिकरण को बायपास कर सकते हैं जो आपको इसे लॉन्च करने से रोकनी चाहिए। - **Content providers**: शायद आप निजी डेटा तक पहुँच सकते हैं या कुछ कमजोरियों (SQL Injection या Path Traversal) का लाभ उठा सकते हैं। - **Services**: - **is debuggable**: [Learn more](#is-debuggeable) ### Activities एक निर्यातित गतिविधि घटक का “android:exported” मान AndroidManifest.xml फ़ाइल में **“true”** पर सेट किया गया है: ```html ``` **निर्यातित गतिविधियों की सूची**: ```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 ``` **Start activity**: शायद आप एक गतिविधि शुरू कर सकते हैं और कुछ प्रकार की प्राधिकरण को बायपास कर सकते हैं जो आपको इसे लॉन्च करने से रोकनी चाहिए। ```bash dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList ``` आप **adb** से एक निर्यातित गतिविधि भी शुरू कर सकते हैं: - PackageName com.example.demo है - Exported ActivityName com.example.test.MainActivity है ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` ### सामग्री प्रदाता यह पोस्ट यहाँ इतनी बड़ी थी कि **आप इसे** [**यहाँ अपनी पृष्ठ पर एक्सेस कर सकते हैं**](exploiting-content-providers.md). ### सेवाएँ एक निर्यातित सेवा Manifest.xml के अंदर घोषित की जाती है: ```html ``` कोड के अंदर **check** करें **`handleMessage`** फ़ंक्शन के लिए जो **message** को **receive** करेगा: ![](<../../../images/image (82).png>) #### सूची सेवा ```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 ``` #### **एक सेवा के साथ इंटरैक्ट करें** ```bash app.service.send Send a Message to a service, and display the reply app.service.start Start Service app.service.stop Stop Service ``` #### उदाहरण `app.service.send` के लिए **drozer** मदद पर एक नज़र डालें: ![](<../../../images/image (1079).png>) ध्यान दें कि आप पहले "_msg.what_" के अंदर डेटा भेजेंगे, फिर "_msg.arg1_" और "_msg.arg2_"। आपको कोड के अंदर **यह जांचना चाहिए कि कौन सी जानकारी का उपयोग किया जा रहा है** और कहाँ।\ `--extra` विकल्प का उपयोग करके आप "_msg.replyTo_" द्वारा व्याख्यायित कुछ भेज सकते हैं, और `--bundle-as-obj` का उपयोग करके आप प्रदान की गई जानकारी के साथ एक ऑब्जेक्ट बनाते हैं। निम्नलिखित उदाहरण में: - `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 ``` ![](<../../../images/image (647).png>) ### Broadcast Receivers **Android के बुनियादी जानकारी अनुभाग में आप देख सकते हैं कि Broadcast Receiver क्या है**। इन Broadcast Receivers का पता लगाने के बाद आपको **उनका कोड** चेक करना चाहिए। विशेष ध्यान दें **`onReceive`** फ़ंक्शन पर क्योंकि यह प्राप्त संदेशों को संभाल रहा होगा। #### **सभी** ब्रॉडकास्ट रिसीवर्स का पता लगाएं ```bash run app.broadcast.info #Detects all ``` #### किसी ऐप के ब्रॉडकास्ट रिसीवर्स की जांच करें ```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 ``` #### प्रसारण **इंटरैक्शन** ```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 ``` #### संदेश भेजें इस उदाहरण में [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider का दुरुपयोग करते हुए आप **किसी भी गैर-प्रीमियम गंतव्य पर मनचाहा SMS** **बिना अनुमति** मांगे भेज सकते हैं। ![](<../../../images/image (415).png>) ![](<../../../images/image (573).png>) यदि आप कोड पढ़ते हैं, तो "_phoneNumber_" और "_message_" पैरामीटर 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!" ``` ### Is debuggeable एक प्रोडक्शन APK कभी भी डिबग करने योग्य नहीं होना चाहिए।\ इसका मतलब है कि आप **जावा डिबगर** को चल रहे एप्लिकेशन से जोड़ सकते हैं, इसे रन टाइम में निरीक्षण कर सकते हैं, ब्रेकपॉइंट सेट कर सकते हैं, कदम से कदम आगे बढ़ सकते हैं, वेरिएबल के मान इकट्ठा कर सकते हैं और यहां तक कि उन्हें बदल भी सकते हैं।[ InfoSec institute has an excellent article](../exploiting-a-debuggeable-applciation.md) जब आपका एप्लिकेशन डिबग करने योग्य होता है और रनटाइम कोड इंजेक्ट करने पर गहराई से खुदाई करने के लिए। जब एक एप्लिकेशन डिबग करने योग्य होता है, तो यह मैनिफेस्ट में दिखाई देगा: ```xml