什么是diva?
DIVA(Damn insecure and vulnerable App)是一个故意设计的存在很多漏洞的Android app,目的是为了让开发、安全工程师、QA等了解Android app常见的一些安全问题,类似dvwa,也可以把它当成一个漏洞演练系统。

准备工作
1,安装JDK,很多工具需要用到java环境;

2,安装Android开发工具(ADT,Android studio),下载地址:https://developer.android.com/studio/index.html
主要包括SDK管理器,安卓虚拟设备管理器(Android Virtual Device,AVD)等,并且集成了adb、emulator等常用工具。dex2Jar、adb是Android app测试常用到的工具,emulator是ADT自带的模拟器,可以模拟Android环境。

3,安装APKtool、Drozer、dex2jar、JD-GUI

Apktool下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads
https://github.com/iBotPeaches/Apktool

ShakaApktool http://www.rover12421.com/shakaapktool/

  1. Drozer下载地址:[https://labs.mwrinfosecurity.com/tools/drozer/](https://labs.mwrinfosecurity.com/tools/drozer/)<br />[https://github.com/mwrlabs/drozer/releases](https://github.com/mwrlabs/drozer/releases)<br /> <br /> Dex2jar下载地址:[https://sourceforge.net/projects/dex2jar/?source=typ_redirect](https://sourceforge.net/projects/dex2jar/?source=typ_redirect)<br /> <br /> JD-GUI下载地址:[http://jd.benow.ca/](http://jd.benow.ca/)<br />[http://java-decompiler.github.io/](http://java-decompiler.github.io/)<br /> <br /> 4,其实有一个工具把上面的工具集成在一起了,叫做apkide(apk改之理),在吾爱破解的爱盘可以下载到3.3的版本,原作者已经停止更新了。<br /> <br /> 所以,我这里的环境就是JDK+APKIDE<br /> 另外说一下,我这里没用APKIDE里面的adb,原版的APKIDE里面的wifi ip被作者误操作硬编码了。我用的夜神模拟器,直接用夜神模拟器里面带的adb。<br />![](https://cdn.nlark.com/yuque/0/2019/png/258277/1561989021632-10d9f058-c53e-49ab-87d7-6f27d9075cd8.png#align=left&display=inline&height=60&originHeight=60&originWidth=220&size=0&status=done&width=220)<br />夜神安卓模拟器adb命令详解 [https://www.yeshen.com/faqs/H15tDZ6YW](https://www.yeshen.com/faqs/H15tDZ6YW)<br /> 开搞<br />![](https://cdn.nlark.com/yuque/0/2019/png/258277/1561989021662-bb0e911f-63fe-4620-a08f-d221812986cb.png#align=left&display=inline&height=645&originHeight=645&originWidth=373&size=0&status=done&width=373)

1. Insecure Logging

主要是由于app代码中将敏感信息输出到app的logcat中,查看app记录的logcat
D:\Nox\bin>adb logcat
Android DIVA测试 - 图1
可以看出用户输入的内容被输出到了日志中,看看具体的漏洞代码,用JD-GUI打开LogActivity.class文件,相关代码如图:
Android DIVA测试 - 图2

Log.e(“diva-log”, “Error while processing transaction with credit card: “ + paramView.getText().toString());

2.Hardcoding Issues-Part1

使用了硬编码的方式,导致存在一定的安全风险
Android DIVA测试 - 图3

Android DIVA测试 - 图4

3.Insecure Data Storage-Part1

不安全的数据存储也是App常见的安全问题之一,主要有三种方式:

1,将敏感数据保存到配置文件中;

2,将敏感数据保存在本地的sqlite3数据库中;

3,将敏感数据保存在临时文件或者sd卡中。

在DIVA中关于此项问题的案例主要是3、4、5、6,首先看敏感数据存储在配置文件中的情况,对应的漏洞代码文件InsecureDataStorage1Activity.class,继续用JG-GUI打开,漏洞代码片段如下:
Android DIVA测试 - 图5

上面问题代码中,使用了SharedPreferences类,该类是Android平台上一个轻量级的存储类,主要是用来保存一些常用的配置,本例中是用该类存储了用户名和密码,因此是具有风险的。SharedPreferences类存储的数据会以.xml的形式存储在/data/data/apppackagename/shared_prefs目录下。如图:
Android DIVA测试 - 图6

代码部分:

  1. D:\Nox\bin>adb shell
  2. root@android:/ # cd /data/data/
  3. root@android:/data/data # ls |grep diva
  4. jakhar.aseem.diva
  5. root@android:/data/data # cd jakhar.aseem.diva
  6. root@android:/data/data/jakhar.aseem.diva # ls
  7. cache
  8. databases
  9. lib
  10. shared_prefs
  11. root@android:/data/data/jakhar.aseem.diva # cd shared_prefs
  12. root@android:/data/data/jakhar.aseem.diva/shared_prefs # ls
  13. jakhar.aseem.diva_preferences.xml
  14. aseem.diva_preferences.xml <
  15. <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
  16. <map>
  17. <string name="user">admin</string>
  18. <string name="password">admin</string>
  19. </map>
  20. root@android:/data/data/jakhar.aseem.diva/shared_prefs #

4.Insecure Data Storage-Part2

用户的敏感信息存储到本地的数据库中,一般app对应的数据库目录:/data/data/apppackagename/databases

  1. root@android:/data/data # cd jakhar.aseem.diva
  2. root@android:/data/data/jakhar.aseem.diva # ls
  3. cache
  4. databases
  5. lib
  6. shared_prefs
  7. root@android:/data/data/jakhar.aseem.diva # cd databases
  8. root@android:/data/data/jakhar.aseem.diva/databases # ls
  9. divanotes.db
  10. divanotes.db-journal
  11. root@android:/data/data/jakhar.aseem.diva/databases # ls
  12. divanotes.db
  13. divanotes.db-journal
  14. ids2
  15. ids2-journal
  16. root@android:/data/data/jakhar.aseem.diva/databases # sqlite3 ids2
  17. SQLite version 3.7.11 2012-03-20 11:35:50
  18. Enter ".help" for instructions
  19. Enter SQL statements terminated with a ";"
  20. sqlite> .tables
  21. android_metadata myuser
  22. sqlite> select * from myuser;
  23. admin|admin
  24. sqlite>

从sqlite3数据库中读取到用户账号密码。

5.Insecure Data Storage-Part3

Android DIVA测试 - 图7

  1. root@android:/data/data/jakhar.aseem.diva/databases # cd
  2. root@android:/data # cd /data/data/jakhar.aseem.diva/
  3. root@android:/data/data/jakhar.aseem.diva # ls
  4. cache
  5. databases
  6. lib
  7. shared_prefs
  8. uinfo1006132197tmp
  9. root@android:/data/data/jakhar.aseem.diva # cat uinfo
  10. /system/bin/sh: cat: uinfo: No such file or directory
  11. 1|root@android:/data/data/jakhar.aseem.diva # cat uinfo1006132197tmp
  12. admin:admin
  13. root@android:/data/data/jakhar.aseem.diva #

Android DIVA测试 - 图8

6.Insecure Data Storage-Part4

InsecureDataStorage4Activity 发现函数getExternalStorageDirectory()及uinfo.txt
Android DIVA测试 - 图9

  1. root@android:/ # cd mnt
  2. root@android:/mnt # ls
  3. USB
  4. asec
  5. media_rw
  6. obb
  7. sdcard
  8. secure
  9. shared
  10. shell
  11. root@android:/mnt # cd sdcard
  12. root@android:/mnt/sdcard # ls
  13. Alarms
  14. Android
  15. DCIM
  16. Download
  17. Mob
  18. Movies
  19. Music
  20. Notifications
  21. Pictures
  22. Podcasts
  23. Ringtones
  24. YSLauncher
  25. amap
  26. aquery
  27. backups
  28. baidu
  29. data
  30. download_stat.bin
  31. leaf
  32. libs
  33. log
  34. msc
  35. system
  36. tbs
  37. root@android:/mnt/sdcard # ls -la
  38. drwxrwx--- root sdcard_r 2018-09-26 13:19 .DataStorage
  39. drwxrwx--- root sdcard_r 2018-07-09 15:29 .UTSystemConfig
  40. -rw-rw---- root sdcard_r 37 2018-07-09 21:00 .a.dat
  41. drwxrwx--- root sdcard_r 2018-07-09 21:00 .cc
  42. drwxrwx--- root sdcard_r 2018-09-10 17:23 .lm_device
  43. -rw-rw---- root sdcard_r 48 2018-09-25 17:11 .sys.log
  44. -rw-rw---- root sdcard_r 33 2018-07-09 16:45 .tcookieid
  45. -rw-rw---- root sdcard_r 12 2018-09-26 15:36 .uinfo.txt
  46. drwxrwx--- root sdcard_r 2018-07-09 21:00 .um
  47. drwxrwx--- root sdcard_r 2018-07-09 21:00 .uxx
  48. drwxrwx--- root sdcard_r 2018-09-04 09:52 360
  49. drwxrwx--- root sdcard_r 2018-07-06 19:36 Alarms
  50. drwxrwx--x root sdcard_r 2018-07-09 21:00 Android
  51. drwxrwx--- root sdcard_r 2018-07-09 16:45 BaiduMapSDKNew
  52. drwxrwxrwx root sdcard_r 2018-09-25 17:11 BigNoxGameHD
  53. drwxrwx--- root sdcard_r 2018-09-14 11:07 BigNoxHD
  54. drwxrwx--- root sdcard_r 2018-07-06 19:36 DCIM
  55. drwxrwx--- root sdcard_r 2018-09-04 09:52 Download
  56. drwxrwx--- root sdcard_r 2018-07-09 16:45 Mob
  57. drwxrwx--- root sdcard_r 2018-07-06 19:36 Movies
  58. drwxrwx--- root sdcard_r 2018-07-06 19:36 Music
  59. drwxrwx--- root sdcard_r 2018-07-06 19:36 Notifications
  60. drwxrwx--- root sdcard_r 2018-07-09 15:29 Pictures
  61. drwxrwx--- root sdcard_r 2018-07-06 19:36 Podcasts
  62. drwxrwx--- root sdcard_r 2018-07-06 19:36 Ringtones
  63. root@android:/mnt/sdcard # cat .uinfo.txt
  64. admin:admin
  65. root@android:/mnt/sdcard #

7.Input Validation Issues-Part1

Android DIVA测试 - 图10
Android DIVA测试 - 图11

8.Input Validation Issues-Part2

  1. 应用程序要求提供URL,例如http:baidu.com <br /> 但是,这种情况可用于使用不同的协议来利用浏览器HTTP,例如File协议,用于读取内部文件系统的内容,甚至是外部存储器中的数据。<br /> 从上一个练习中,我们在此路径中存储了一些凭据:- 使用File protocole,可以实现对uinfo文件的访问:- File文件路径作为输入,显示uinfo文件的内容:- 在同样,此输入验证漏洞可用于访问外部存储上的数据。<br />![](https://cdn.nlark.com/yuque/0/2019/png/258277/1561989021610-29f353a9-b635-4ba8-b1b2-86d56d042742.png#align=left&display=inline&height=211&originHeight=211&originWidth=555&size=0&status=done&width=555)<br />![](https://cdn.nlark.com/yuque/0/2019/png/258277/1561989021677-8370dd77-44d8-4a7c-a471-cba8870bbe87.png#align=left&display=inline&height=671&originHeight=671&originWidth=377&size=0&status=done&width=377)

9.Access Control Issues-Part 1

可在AndroidManifest.xml中查看文件中暴露的activity组件
Android DIVA测试 - 图12
Android DIVA测试 - 图13
D:\Nox\bin>adb shell am start -a jakhar.aseem.diva.action.VIEW_CREDS
Starting: Intent { act=jakhar.aseem.diva.action.VIEW_CREDS }
Error2: Intent does not match any activities: Intent { act=jakhar.aseem.diva.action.VIEW_CREDS }

D:\Nox\bin>

10.Access Control Issues-Part 2




http://showmeshell.top/2018/08/31/Android-DIVA%E5%88%86%E6%9E%90/