.. | ||
exploiting-content-providers.md | ||
README.md |
Drozerチュートリアル
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- **ハッキングのトリックを共有するには、hacktricksリポジトリとhacktricks-cloudリポジトリ**にPRを提出してください。
バグバウンティのヒント:ハッカーによって作成されたプレミアムなバグバウンティプラットフォームである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.send
のdrozerのヘルプを見てみましょう:
"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:
-
Connect your Android device to your machine using a USB cable.
-
Enable USB debugging on your Android device.
-
Open a terminal and run the following command to start a
drozer
session:drozer console connect
-
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.
-
Identify the package name of the app you want to check the broadcast receivers for.
-
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
チュートリアル
- https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref
- http://mobiletools.mwrinfosecurity.com/Using-Drozer-for-application-security-assessments/
追加情報
バグバウンティのヒント: Intigritiにサインアップしてください。これは、ハッカーによって作成されたプレミアムなバグバウンティプラットフォームです!今すぐhttps://go.intigriti.com/hacktricksに参加して、最大**$100,000**のバウンティを獲得しましょう!
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンやHackTricksのPDFをダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyをご覧ください。これは、私たちの独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksグッズを手に入れましょう。
- 💬 DiscordグループまたはTelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- **ハッキングのトリックを共有するには、hacktricks repoとhacktricks-cloud repo**にPRを提出してください。