什么是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/
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 /><br />夜神安卓模拟器adb命令详解 [https://www.yeshen.com/faqs/H15tDZ6YW](https://www.yeshen.com/faqs/H15tDZ6YW)<br /> 开搞<br />
1. Insecure Logging
主要是由于app代码中将敏感信息输出到app的logcat中,查看app记录的logcat
D:\Nox\bin>adb logcat
可以看出用户输入的内容被输出到了日志中,看看具体的漏洞代码,用JD-GUI打开LogActivity.class文件,相关代码如图:
Log.e(“diva-log”, “Error while processing transaction with credit card: “ + paramView.getText().toString());
2.Hardcoding Issues-Part1
3.Insecure Data Storage-Part1
不安全的数据存储也是App常见的安全问题之一,主要有三种方式:
1,将敏感数据保存到配置文件中;
2,将敏感数据保存在本地的sqlite3数据库中;
3,将敏感数据保存在临时文件或者sd卡中。
在DIVA中关于此项问题的案例主要是3、4、5、6,首先看敏感数据存储在配置文件中的情况,对应的漏洞代码文件InsecureDataStorage1Activity.class,继续用JG-GUI打开,漏洞代码片段如下:
上面问题代码中,使用了SharedPreferences类,该类是Android平台上一个轻量级的存储类,主要是用来保存一些常用的配置,本例中是用该类存储了用户名和密码,因此是具有风险的。SharedPreferences类存储的数据会以.xml的形式存储在/data/data/apppackagename/shared_prefs目录下。如图:
代码部分:
D:\Nox\bin>adb shell
root@android:/ # cd /data/data/
root@android:/data/data # ls |grep diva
jakhar.aseem.diva
root@android:/data/data # cd jakhar.aseem.diva
root@android:/data/data/jakhar.aseem.diva # ls
cache
databases
lib
shared_prefs
root@android:/data/data/jakhar.aseem.diva # cd shared_prefs
root@android:/data/data/jakhar.aseem.diva/shared_prefs # ls
jakhar.aseem.diva_preferences.xml
aseem.diva_preferences.xml <
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="user">admin</string>
<string name="password">admin</string>
</map>
root@android:/data/data/jakhar.aseem.diva/shared_prefs #
4.Insecure Data Storage-Part2
用户的敏感信息存储到本地的数据库中,一般app对应的数据库目录:/data/data/apppackagename/databases
root@android:/data/data # cd jakhar.aseem.diva
root@android:/data/data/jakhar.aseem.diva # ls
cache
databases
lib
shared_prefs
root@android:/data/data/jakhar.aseem.diva # cd databases
root@android:/data/data/jakhar.aseem.diva/databases # ls
divanotes.db
divanotes.db-journal
root@android:/data/data/jakhar.aseem.diva/databases # ls
divanotes.db
divanotes.db-journal
ids2
ids2-journal
root@android:/data/data/jakhar.aseem.diva/databases # sqlite3 ids2
SQLite version 3.7.11 2012-03-20 11:35:50
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
android_metadata myuser
sqlite> select * from myuser;
admin|admin
sqlite>
5.Insecure Data Storage-Part3
root@android:/data/data/jakhar.aseem.diva/databases # cd
root@android:/data # cd /data/data/jakhar.aseem.diva/
root@android:/data/data/jakhar.aseem.diva # ls
cache
databases
lib
shared_prefs
uinfo1006132197tmp
root@android:/data/data/jakhar.aseem.diva # cat uinfo
/system/bin/sh: cat: uinfo: No such file or directory
1|root@android:/data/data/jakhar.aseem.diva # cat uinfo1006132197tmp
admin:admin
root@android:/data/data/jakhar.aseem.diva #
6.Insecure Data Storage-Part4
InsecureDataStorage4Activity 发现函数getExternalStorageDirectory()及uinfo.txt
root@android:/ # cd mnt
root@android:/mnt # ls
USB
asec
media_rw
obb
sdcard
secure
shared
shell
root@android:/mnt # cd sdcard
root@android:/mnt/sdcard # ls
Alarms
Android
DCIM
Download
Mob
Movies
Music
Notifications
Pictures
Podcasts
Ringtones
YSLauncher
amap
aquery
backups
baidu
data
download_stat.bin
leaf
libs
log
msc
system
tbs
root@android:/mnt/sdcard # ls -la
drwxrwx--- root sdcard_r 2018-09-26 13:19 .DataStorage
drwxrwx--- root sdcard_r 2018-07-09 15:29 .UTSystemConfig
-rw-rw---- root sdcard_r 37 2018-07-09 21:00 .a.dat
drwxrwx--- root sdcard_r 2018-07-09 21:00 .cc
drwxrwx--- root sdcard_r 2018-09-10 17:23 .lm_device
-rw-rw---- root sdcard_r 48 2018-09-25 17:11 .sys.log
-rw-rw---- root sdcard_r 33 2018-07-09 16:45 .tcookieid
-rw-rw---- root sdcard_r 12 2018-09-26 15:36 .uinfo.txt
drwxrwx--- root sdcard_r 2018-07-09 21:00 .um
drwxrwx--- root sdcard_r 2018-07-09 21:00 .uxx
drwxrwx--- root sdcard_r 2018-09-04 09:52 360
drwxrwx--- root sdcard_r 2018-07-06 19:36 Alarms
drwxrwx--x root sdcard_r 2018-07-09 21:00 Android
drwxrwx--- root sdcard_r 2018-07-09 16:45 BaiduMapSDKNew
drwxrwxrwx root sdcard_r 2018-09-25 17:11 BigNoxGameHD
drwxrwx--- root sdcard_r 2018-09-14 11:07 BigNoxHD
drwxrwx--- root sdcard_r 2018-07-06 19:36 DCIM
drwxrwx--- root sdcard_r 2018-09-04 09:52 Download
drwxrwx--- root sdcard_r 2018-07-09 16:45 Mob
drwxrwx--- root sdcard_r 2018-07-06 19:36 Movies
drwxrwx--- root sdcard_r 2018-07-06 19:36 Music
drwxrwx--- root sdcard_r 2018-07-06 19:36 Notifications
drwxrwx--- root sdcard_r 2018-07-09 15:29 Pictures
drwxrwx--- root sdcard_r 2018-07-06 19:36 Podcasts
drwxrwx--- root sdcard_r 2018-07-06 19:36 Ringtones
root@android:/mnt/sdcard # cat .uinfo.txt
admin:admin
root@android:/mnt/sdcard #
7.Input Validation Issues-Part1
8.Input Validation Issues-Part2
应用程序要求提供URL,例如http:baidu.com <br /> 但是,这种情况可用于使用不同的协议来利用浏览器HTTP,例如File协议,用于读取内部文件系统的内容,甚至是外部存储器中的数据。<br /> 从上一个练习中,我们在此路径中存储了一些凭据:- 使用File protocole,可以实现对uinfo文件的访问:- 将File文件路径作为输入,显示uinfo文件的内容:- 在同样,此输入验证漏洞可用于访问外部存储上的数据。<br /><br />
9.Access Control Issues-Part 1
可在AndroidManifest.xml中查看文件中暴露的activity组件
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 }
10.Access Control Issues-Part 2
http://showmeshell.top/2018/08/31/Android-DIVA%E5%88%86%E6%9E%90/