mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
254 lines
16 KiB
Markdown
254 lines
16 KiB
Markdown
# 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**" दबाएं
|
|
|
|
.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
|
|
<activity android:name="com.my.app.Initial" android:exported="true">
|
|
</activity>
|
|
```
|
|
**निर्यातित गतिविधियों की सूची**:
|
|
```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
|
|
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
|
|
```
|
|
कोड के अंदर **check** करें **`handleMessage`** फ़ंक्शन के लिए जो **message** को **receive** करेगा:
|
|
|
|
.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** मदद पर एक नज़र डालें:
|
|
|
|
.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
|
|
```
|
|
.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** **बिना अनुमति** मांगे भेज सकते हैं।
|
|
|
|
.png>)
|
|
|
|
.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
|
|
<application theme="@2131296387" debuggable="true"
|
|
```
|
|
आप सभी डिबग करने योग्य अनुप्रयोगों को **Drozer** के साथ ढूंढ सकते हैं:
|
|
```bash
|
|
run app.package.debuggable
|
|
```
|
|
## Tutorials
|
|
|
|
- [https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref](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://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://www.hackingarticles.in/android-penetration-testing-drozer/)
|
|
- [https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac](https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac)
|
|
|
|
## More info
|
|
|
|
- [https://blog.dixitaditya.com/android-pentesting-cheatsheet/](https://blog.dixitaditya.com/android-pentesting-cheatsheet/)
|
|
|
|
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|