安卓漏洞学习

移动安全 2017-12-03

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.jpg

测试环境

1,安装JDK,很多工具需要用到Java环境;

2,安装Android开发工具(ADT,Android studio),下载地址:

https://developer.android.com/studio/index.html

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

Apktoolss下载地址:

https://bitbucket.org/iBotPeaches/apktool/downloads

Drozer下载地址:

https://labs.mwrinfosecurity.com/tools/drozer/

Dex2jar下载地址:

https://sourceforge.net/projects/dex2jar/?source=typ_redirect

JD-GUI下载地址:

http://jd.benow.ca/

或者使用Androl4b虚拟机,下载地址:

http://pan.baidu.com/s/1pL1wewV 密码:drgj

PART 1 不安全的日志输出

该问题主要是由于app代码中将敏感信息输出到app的logcat中,查看app记录的logcat,可以使用如下命令:

1.adb logcat

2.输入用户凭证,观察日志输出。

3.源码中:Log.e()

2.jpg

可以看出用户输入的内容被输出到了日志中,看看具体的漏洞代码,用JD-GUI打开LogActivity.class文件,相关代码如图:

3.jpg

PART 2 硬编码1 (class源文件)

很多开发小伙伴在开发app的时候,明明是可以用可变变量的,但是由于没有相关安全开发意识,使用了硬编码的方式,导致存在一定的安全风险。具体有关硬编码的定义可以参考百度,开发人员在开发的过程中应该尽量避免使用硬编码。先看看问题2涉及到的代码HardcodeActivity.class,JD-GUI打开,相关代码如下:

查看HardcodeActivity.class:

4.jpg

攻击者只需要在app中输入秘钥vendorsecretkey就可以访问成功,如图:

5.jpg

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

6.jpg

7.jpg

PART 4 不安全的存储2(databases/xxx.db)

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

/data/data/apppackagename/databases

本例中是:

/data/data/jakhar.aseem.diva/databases

如图:

cd /data/data/jakhar.aseen.diva/databases

8.jpg

9.jpg

PART 5 不安全的存储3(临时文件)

cd /data/data/jakhar.aseen.diva/

10.jpg

11.jpg

PART 6 不安全的存储4(SD卡)

存储在sd卡中,漏洞代码片段:

12.jpg

PART 7 不安全的输入1(sqli)

打开日志:

adb logcat

输入一个单引号,在日志中可以看到报错信息,存在sql注入。

输入' or '1'='1,可返回所有用户密码。

1.jpg

2.jpg

PART 8 不安全的输入2(读取本地文件)

可访问本地的任意文件,输入

file:///data/data/jakhar.aseem.diva/shared_prefs/jakhar.aseem.diva_preferences.xml

3.jpg

PART 9 访问控制1(Activity 1)

查看AndroidManifest.xml文件中暴露的activity组件:

4.jpg

利用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

5.jpg

同时也可以使用drozer来完成:

6.jpg

PART 10 访问控制2(Activity 2)

输入 adb shell am start jakhar.aseem.diva/.APICreds2Activity,并没有出现PART9中的情况,添加了验证PIN码。

7.jpg

PART 11 访问控制3(Content Providers )

查找暴露的Content Providers组件:

8.jpg

然后查找包含content:// 的smali文件。

$ grep -lr “content://” *

9.jpg

查看私有日志内容

$ adb shell content query –uri content://jakhar.aseem.diva.provider.notesprovider/notes

10.jpg

另一种方式:使用drozer:

11.jpg

总结

本文将上次未讲完的内容大概提了一下,大家在学习测试的时候有任何问题都可以提出来,大家一起交流,为了更好的交流请大家加入学习群,向作者大胆提问,共同成长。


本文由 信安之路 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论