Drozer Tutorial

htARTE(HackTricks AWS Red Team Expert) でゼロからヒーローまでAWSハッキングを学ぶ

HackTricks をサポートする他の方法:

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

テストするAPK

このチュートリアルの一部は Drozerドキュメントpdf** から抽出されました。**

インストール

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

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

Androidデバイス上にdrozerによって保存された一時ファイルを削除します。

load

drozerコマンドを含むファイルを読み込んで、順番に実行します。

module

インターネットから追加のdrozerモジュールを見つけてインストールします。

unset

drozerが生成する名前付き変数を削除します。

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

パッケージの基本情報:

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
  • Activities: おそらく、アクティビティを開始し、起動を防ぐはずの種類の認証をバイパスできるかもしれません。

  • Content providers: おそらく、プライベートデータにアクセスしたり、いくつかの脆弱性(SQLインジェクションまたはパストラバーサル)を悪用したりできるかもしれません。

  • Services:

  • is debuggable: 詳細はこちら

Activities

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

コードの中で check して、message受信 する **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

サービスとのやり取り

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の基本情報セクションでは、ブロードキャストレシーバーとは何かを確認できます

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

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

run app.broadcast.info #Detects all

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

#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 のバウンティを獲得しましょう!

**htARTE (HackTricks AWS Red Team Expert)** で **ゼロからヒーローまでのAWSハッキングを学びましょう**!

HackTricks をサポートする他の方法:

Last updated