Android靜態安全檢測 -> Content Provider組件本地SQL注入漏洞

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進行參數化查詢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章