DIVA(Damn insecure and vulnerable App)是一个故意设计的存在很多漏洞的Android app,目的是为了让开发、安全工程师、QA等了解Android app常见的一些安全问题,类似dvwa,也可以把它当成一个漏洞演练系统。
下载地址:
http://www.payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz
测试环境
1,安装JDK,很多工具需要用到Java环境;
2,安装Android开发工具(ADT,Android studio),下载地址:
3,安装APKtool、Drozer、dex2jar、JD-GUI
Apktoolss下载地址:
Drozer下载地址:
Dex2jar下载地址:
https://sourceforge.net/projects/dex2jar/?source=typ_redirect
JD-GUI下载地址:
或者使用Androl4b虚拟机,下载地址:
http://pan.baidu.com/s/1pL1wewV 密码:drgj
PART 1 不安全的日志输出
该问题主要是由于app代码中将敏感信息输出到app的logcat中,查看app记录的logcat,可以使用如下命令:
1.adb logcat
2.输入用户凭证,观察日志输出。
3.源码中:Log.e()
可以看出用户输入的内容被输出到了日志中,看看具体的漏洞代码,用JD-GUI打开LogActivity.class文件,相关代码如图:
PART 2 硬编码1 (class源文件)
很多开发小伙伴在开发app的时候,明明是可以用可变变量的,但是由于没有相关安全开发意识,使用了硬编码的方式,导致存在一定的安全风险。具体有关硬编码的定义可以参考百度,开发人员在开发的过程中应该尽量避免使用硬编码。先看看问题2涉及到的代码HardcodeActivity.class,JD-GUI打开,相关代码如下:
查看HardcodeActivity.class:
攻击者只需要在app中输入秘钥vendorsecretkey就可以访问成功,如图:
PART 3 不安全的存储1(shared_prefs/xxx.xml)
不安全的数据存储也是App常见的安全问题之一,主要有三种方式:
1,将敏感数据保存到配置文件中;
2,将敏感数据保存在本地的sqlite3数据库中;
3,将敏感数据保存在临时文件或者sd卡中。
SharedPreferences类存储的数据会以.xml的形式存储在
/data/data/apppackagename/shared_prefs
目录下。如图:
cd /data/data/jakhar.aseen.diva/shared_prefs
PART 4 不安全的存储2(databases/xxx.db)
用户的敏感信息存储到本地的数据库中,一般app对应的数据库目录:
/data/data/apppackagename/databases
本例中是:
/data/data/jakhar.aseem.diva/databases
如图:
cd /data/data/jakhar.aseen.diva/databases
PART 5 不安全的存储3(临时文件)
cd /data/data/jakhar.aseen.diva/
PART 6 不安全的存储4(SD卡)
存储在sd卡中,漏洞代码片段:
PART 7 不安全的输入1(sqli)
打开日志:
adb logcat
输入一个单引号,在日志中可以看到报错信息,存在sql注入。
输入' or '1'='1,可返回所有用户密码。
PART 8 不安全的输入2(读取本地文件)
可访问本地的任意文件,输入
file:///data/data/jakhar.aseem.diva/shared_prefs/jakhar.aseem.diva_preferences.xml
PART 9 访问控制1(Activity 1)
查看AndroidManifest.xml文件中暴露的activity组件:
利用am(Activity Manager tool)启动暴露的组件,来绕过权限控制:
adb shell am start jakhar.aseem.diva/.APICredsActivity
adb shell am start -n jakhar.aseem.diva/.APICredsActivity -a jakhar.aseem.diva.action.VIEW_CREDS
同时也可以使用drozer来完成:
PART 10 访问控制2(Activity 2)
输入 adb shell am start jakhar.aseem.diva/.APICreds2Activity,并没有出现PART9中的情况,添加了验证PIN码。
PART 11 访问控制3(Content Providers )
查找暴露的Content Providers组件:
然后查找包含content:// 的smali文件。
$ grep -lr “content://” *
查看私有日志内容
$ adb shell content query –uri content://jakhar.aseem.diva.provider.notesprovider/notes
另一种方式:使用drozer:
总结
本文将上次未讲完的内容大概提了一下,大家在学习测试的时候有任何问题都可以提出来,大家一起交流,为了更好的交流请大家加入学习群,向作者大胆提问,共同成长。
楼主残忍的关闭了评论