您的位置:首页 > 移动开发 > Android开发

Android静态安全检测 -> Content Provider组件本地SQL注入漏洞

2016-11-25 17:42 573 查看
Content Provider组件本地SQL注入漏洞 - ContentProvider.query方法

一、API

1. 继承关系

【1】java.lang.Object

【2】android.content.ContentProvider

2. 主要方法

【1】query(Uri uri, String[ ] projection, String selection, String[ ] selectionArgs, String sortOrder)

         

返回Cursor对象或null

         


【2】insert(),delete(),update()

【3】参考链接

https://developer.android.com/reference/android/content/ContentProvider.html

3. 示例



二、触发条件

1. 定位ContentProvider组件对应的子类

【1】对应到smali语句中的特征

.super Landroid/content/ContentProvider;


2. 判断Provider是否对外暴露(exported属性为true)

3. 判断子类中是否调用query方法

->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;


4. 找到projection,selection参数对应的寄存器名称 v1

5. 判断寄存器V1的赋值来源是否为拼接字符串

三、漏洞原理

【1】暴露的Provider组件,如果在query()中使用拼接字符串组成SQL语句的形式去查询数据库,容易发生SQL注入攻击

【2】更多内容

https://jaq.alibaba.com/community/art/show?articleid=352

http://wolfeye.baidu.com/blog/sql-injection/

http://www.droidsec.cn/android安全开发之provider组件安全/

四、修复建议

【1】不必要导出的Provider组件,建议显示设置组件的“android:exported”属性为false

【2】使用selectionArgs进行参数化查询
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息