Android 滲透測試篇之SQL注入

上期回顧:html

    上一篇,分享so文件注入相關的知識、實踐,以及擴展,如何把用戶自定義的so文件加載到宿主進程中,自由改變宿主進程的執行邏輯。本篇將從一個SQL注入漏洞的場景,引出針對Android平臺的滲透測試知識。前端


在Android 端測試與評估過程當中,攻擊者經常逆向APP客戶端存在的各類代碼邏輯漏洞,分析客戶端與服務端數據包通訊風險,甚至挖掘APP服務端的漏洞,部分開發者只考慮到加密客戶端與服務端傳輸數據,卻忽略了APP前端最基礎的過濾和服務端的安全加固,其中,最多見的就是SQL注入漏洞,本篇就以此爲主題,引出相關的知識,實踐,以及擴展。python


SQL注入漏洞原理


SQL注入漏洞狹義上是經過對本地數據庫提交SQL注入命令,致使數據庫執行惡意的SQL命令,從而實現本地注入或者經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,達到欺騙服務器執行惡意的SQL命令實現遠程注入,致使APP的數據庫被拖庫,或者獲取服務端的管理權限。android


漏洞利用過程


這裏咱們主要介紹兩種SQL注入方式,一種是本地SQL注入,一種是遠程SQL注入。
git

1. 本地SQL注入
github

本地SQL注入主要使用Drozer(原名mercury) ,是一款很是不錯的Android端的測試工具。
web

下載地址:https://labs.f-secure.com/tools/drozer/sql

開源項目: https://github.com/fsecurelabs/drozer/ (python版)數據庫

(1)配置環境跨域

步驟1:在PC端安裝 下載好的Drozer;

步驟2:在 Android 測試機中安裝 agent.apk;

步驟3:在 PC 端使用 adb 命令進行端口轉發,轉發到 Drozer使用的端口 31415

命令:adb forward tcp:31415 tcp:31415

步驟4:在 Android 測試機中開啓 Drozer Agent,並選擇 embedded server-enable;

步驟5:在 PC 端開啓 Drozer console;

命令:drozer console connect

(2)測試命令集合

操做命令 功能介紹
run App.package.list  -f 包名 獲取包名
run App.package.info  -a 包名 獲取應用的基本信息
run App.package.attacksurface 包名 查看apk存在的攻擊組件接口
run App.activity.info  -a 包名 收集Activity信息,查找暴露面
run App.activity.start  --component 包名 activity 構造intent信息繞過鑑權直接運行Activity
run App.provider.info  -a 包名 獲取 Content Provider  信息

run  scanner.provider.finduris -a 包名

run App.provider.query  uri

run App.provider.query  ....

先獲取全部能夠訪問的 Uri

獲取各個 Uri 的數據

查詢到數聽說明存在漏洞

run  scanner.provider.injection -a 包名

run  scanner.provider.traversal -a 包名

檢測 SQL 注入

目錄遍歷

run App.service.info  -a 包名 獲取 service 詳情
run App.broadcast.info  -a 包名 獲取broadcast  receivers信息

擴展閱讀:

http://www.secpulse.com/archives/5228.html


(3)實踐案例

步驟1:利用 drozer查找全部能夠訪問content provider的URIs

命令:run scanner.provider.finduris  -a  包名

注:這裏Content URI必須是 「content:///」 的形式,所以咱們須要構造部分content URIs來訪問DBcontent Provider。

步驟2: 根據上圖中獲取到的URIs,繼續查詢數據:

命令: run app.provider.query URIs --vertical

上圖獲取了用戶名,郵箱,以及Base64編碼的密碼字符串。

步驟3: 進行SQL注入操做

注:Android操做系統默認使用SQLite數據庫存儲用戶數據,SQLite數據庫支持SQL語句,可使用--projection參數和--seleciton參數傳遞一些簡單的SQL注入語句到Content provider)

r命令: un URIs --projection "'"  (這裏是雙引號裏有個逗號)

命令: run URIs --selection "'" (這裏是雙引號裏有個逗號)

上面兩條命令執行後Android設備返回了許多的錯誤信息,說明存在SQL注入漏洞。

步驟4:列出數據庫中的全部數據表

命令: run URIs  –projection 「*FROM SQLITE_MASTER WHERE type=’table';–「

步驟5:獲取某個表(如 Key )中的數據

命令:run URIs --projection "* FROM Key;--"


2. 遠程SQL注入

遠程SQL注入一種是使用post方式提交數據,而後抓到數據包,再使用sqlmap工具直接利用。

sqlmap工具使用方法參考連接:http://www.vuln.cn/6491

另一種是APP存在xml注入,能夠修改數據包的內容,而後在返回的數據包中查看到命令執行的結果。

如:將數據包中的filename字段修改成SQL注入語句

查看返回的數據包,可獲得命令執行返回的用戶名信息:


修復建議


1. 使用PDO方式對SQL語句進行預處理,防止SQL注入。

2. 使用WAF配置防止SQL注入的相關策略,防止SQL注入。

3. 將沒必要要導出的Content Provider設置爲不導出,建議顯示設置註冊的ContentProvider組件的「android:exported」屬性爲false;
4. 建議移除該Content Provider的沒必要要的openFile()接口。
5. 過濾限制跨域訪問,對訪問的目標文件的路徑進行有效判斷,

6. 使用簽名驗證來控制Content Provider共享數據的訪問權限:設置protectionLevel=」signature」。



本文主要介紹使用Drozer工具進行SQL注入測試,它不僅是支持SQL注入,還支持組件漏洞測試等等,在Android平臺還有不少優秀的用於Android端的滲透測試工具,下面是收集的一些典型Android 網絡滲透的相關文章,只供你們參考學習,請勿用於其餘用途。




1. Android網絡滲透套件DSploit :

博客地址:

http://www.freebuf.com/articles/wireless/6279.html

2. Android平臺滲透測試套件zANTI 2.0版

博客地址: 

https://www.freebuf.com/sectool/42487.html

3. 使用Introspy進行黑盒測試

博客地址: 

http://bobao.360.cn/learning/detail/154.html (此篇文章末尾有驚喜)


好了,本篇文章就分享到此,下一期再見。


END
---------------------------------------------
本篇部份內容節選《Android 應用安全測試與防禦》
若是您對App安全有任何問題
可在本公衆號進行留言
咱們會進行回覆~
---------------------------------------------
本書由中國工信出版集團人民郵電出版社(2020年5月)出版,可到各大電商平臺(京東、天貓、噹噹等)購買,搜索書名《Android 應用安全測試與防禦》便可。

歡迎關注本書公衆號
獲取更多App安全知識

       

本文分享自微信公衆號 - App安全紅寶書(apphongbaoshu)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索