Android sqlite load_extension漏洞解析

路人甲 · 2015/09/25 14:54

0x01 sqlite load_extension


SQLite從3.3.6版本(http://www.sqlite.org/cgi/src/artifact/71405a8f9fedc0c2)開始提供了支持擴展的能力,通過sqlite_load_extension API(或者load_extensionSQL語句),開發者可以在不改動SQLite源碼的情況下,通過動態加載的庫(so/dll/dylib)來擴展SQLite的能力。

便利的功能總是最先被黑客利用來實施攻擊。借助SQLite動態加載的這個特性,我們僅需要在可以預測的存儲路徑中預先放置一個覆蓋SQLite擴展規范的動態庫(Android平臺的so庫),然后通過SQL注入漏洞調用load_extension,就可以很輕松的激活這個庫中的代碼,直接形成了遠程代碼執行漏洞。國外黑客早就提出使用load_extension和sql注入漏洞來進行遠程代碼執行攻擊的方法,如下圖。

也許是SQLite官方也意識到了load_extension API的能力過于強大,在放出load_extension功能后僅20天,就在代碼中(http://www.sqlite.org/cgi/src/info/4692319ccf28b0eb)將load_extension的功能設置為默認關閉,需要在代碼中通過sqlite3_enable_load_extensionAPI顯式打開后方可使用,而此API無法在SQL語句中調用,斷絕了利用SQL注入打開的可能性。

0x02 Android平臺下的sqlite load_extension支持


出于功能和優化的原因,Google從 Android 4.1.2開始通過預編譯宏SQLITE_OMIT_LOAD_EXTENSION,從代碼上直接移除了SQLite動態加載擴展的能力,如下圖。

可以通過adb shell來判斷Android系統是不是默認支持load_extension,下圖為Android4.0.3下sqlite3的.help命令:

可以看出支持load extension,而Android4.1.2上則沒有該選項。

0x03 Android平臺下的sqlite extension模塊編譯


sqlite extension必須包含sqlite3ext.h頭文件,實現一個sqlite3_extension_init 入口。下圖為一個sqlite extension的基本框架:

接著是Android.mk文件,如下圖:

我們實現一個加載時打印log輸出的一個sqlie extension:

0x04 Android平臺下sqlite load_extension實戰


由于sqlite是未加密的數據庫,會導致數據泄露的風險,Android App都開始使用第三方透明加密數據庫組件,比如sqlcipher。由于sqlcipher編譯時沒移除load extension,如圖,導致使用它的App存在被遠程代碼執行攻擊的風險。

下面我們將通過一個簡單的demo來展示sql注入配合load_extension的漏洞利用。

首先,實現一個使用sqlcipher的Android程序,下載sqlcipher包,將庫文件導入項目,如下圖:

將導入包換成sqlcipher的:

加載sqlcihper的庫文件,并且打開數據庫時提供密鑰:

編譯的時候如果出錯,則將jar包引入并導出,如下圖:

實現一個存在sql注入的數據庫查詢語句,外部可控,如下圖:

該函數接收一個外部可控的參數,并將數據庫查詢語句進行拼接,導致可被外部植入惡意代碼進行代碼執行攻擊,如下圖:

執行之后,可以看到so加載成功,如下圖:

0x05 Android平臺下sqlite load_extension攻防


攻擊場景:存在漏洞的app可以接收文件,黑客可將文件通過目錄遍歷漏洞放到app私有目錄下,再通過發消息觸發sql注入語句,完美的遠程代碼執行攻擊。

漏洞防御:

  1. 由于sqlcipher的擴展默認是開啟的,如果需要sqlcipher,編譯sqlcipher的時候通過SQLITE_OMIT_LOAD_EXTENSION宏來關閉sqlcipher的擴展功能。
  2. 進行數據庫操作時,禁止將查詢語句進行拼接,防止存在sql注入漏洞。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391086.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391086.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391086.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

去除Java字符串中的空格

問題:去除Java字符串中的空格 俺有一個像這樣的字符串 mysz "namejohn age13 year2001";我想要去除字符串里面的空格。我嘗試使用 trim() ,但是呢它只去除了字符串前后的空格。我也嘗試用 ("\W", “”),但是它把也給搞…

谷歌瀏覽器bug調試快捷鍵_Bug壓榨初學者指南:如何使用調試器和其他工具查找和修復Bug

谷歌瀏覽器bug調試快捷鍵As web developers, it often feels like we spend more time fixing bugs and trying to solve problems than we do writing code. In this guide well look at some common debugging techniques, so lets get stuck in.作為Web開發人員,…

吳恩達神經網絡1-2-2_圖神經網絡進行藥物發現-第1部分

吳恩達神經網絡1-2-2預測溶解度 (Predicting Solubility) 相關資料 (Related Material) Jupyter Notebook for the article Jupyter Notebook的文章 Drug Discovery with Graph Neural Networks — part 2 圖神經網絡進行藥物發現-第2部分 Introduction to Cheminformatics 化學…

再利用Chakra引擎繞過CFG

xlab 2015/12/24 15:00Author:[email protected]0x00 前言本文源自一次與TK閑聊,期間得知成功繞過CFG的經過與細節(參考:[利用Chakra JIT繞過DEP和CFG])。隨即出于對技術的興趣,也抽出一些時間看了相關的東西,結果發現了另一處繞…

論文搜索源

中國科學院文獻情報中心 見下圖 中國計算機學會推薦國際學術會議和期刊目錄 EI學術會議中心,        engieer village 轉載于:https://www.cnblogs.com/cxy-941228/p/7693097.html

重學TCP協議(10)SYN flood 攻擊

1.SYN flood 攻擊 SYN Flood(半開放攻擊)是一種拒絕服務(DDoS)攻擊,其目的是通過消耗所有可用的服務器資源使服務器不可用于合法流量。通過重復發送初始連接請求(SYN)數據包,攻擊者能…

大數據入門課程_我根據數千個數據點對互聯網上的每門數據科學入門課程進行了排名...

大數據入門課程by David Venturi大衛文圖里(David Venturi) A year ago, I dropped out of one of the best computer science programs in Canada. I started creating my own data science master’s program using online resources. I realized that I could learn everyt…

python 數據框缺失值_Python:處理數據框中的缺失值

python 數據框缺失值介紹 (Introduction) In the last article we went through on how to find the missing values. This link has the details on the how to find missing values in the data frame. https://medium.com/kallepalliravi/python-finding-missing-values-in-…

Spring Cloud 5分鐘搭建教程(附上一個分布式日志系統項目作為參考) - 推薦

http://blog.csdn.net/lc0817/article/details/53266212/ https://github.com/leoChaoGlut/log-sys 上面是我基于Spring Cloud ,Spring Boot 和 Docker 搭建的一個分布式日志系統. 目前已在我司使用. 想要學習Spring Cloud, Spring Boot以及Spring 全家桶的童鞋,可以參考學習,如…

51nod1832(二叉樹/高精度模板+dfs)

題目鏈接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId1832 題意: 中文題誒~ 思路: 若二叉樹中有 k 個節點只有一個子樹, 則答案為 1 << k. 詳情參見:http://blog.csdn.net/gyhguoge01234/article/details/77836484 代碼: 1 #include <iostream&g…

重學TCP協議(11)TFO(Tcp Fast Open)

1. TFO 為了改善web應用相應時延&#xff0c;google發布了通過修改TCP協議利用三次握手時進行數據交換的TFO(TCP fast open&#xff0c;RFC 7413)。 TFO允許在TCP握手期間發送和接收初始SYN分組中的數據。如果客戶端和服務器都支持TFO功能&#xff0c;則可以減少建立到同一服…

[網絡安全] 遠程登錄

遠程登錄方式: 1.圖像化遠程登錄 做法: 運行"窗口"輸入 "mstsc " 輸入ip地址 注意: 被遠程計算機&#xff0c;必須打開遠程登錄服務: 信息面板–系統–允許遠程訪問。被遠程計算機&#xff0c;必須存在擁有遠程桌面權限的用戶。 2.命令行遠程登錄 teln…

外星人圖像和外星人太空船_衛星圖像:來自太空的見解

外星人圖像和外星人太空船By Christophe Restif & Avi Hoffman, Senior Software Engineers, Crisis Response危機應對高級軟件工程師Christophe Restif和Avi Hoffman Editor’s note: In 2019, we piloted a new feature in Search SOS Alerts for major California wild…

chrome恐龍游戲_如何玩沒有互聯網的Google Chrome恐龍游戲-在線和離線

chrome恐龍游戲Several years ago, Google added a fun little Easter egg to Chrome: if your internet went down and you tried to visit a web page, youd see the message "Unable to connect to the Internet" or "No internet" with a little pixi…

Hotpatch潛在的安全風險

屎蛋 2016/06/22 10:11author:[email protected]0x00 “Hotpatch”簡介IOS App的開發者們經常會出現這類問題&#xff1a;當一個新版本上線后發現存在一個嚴重的bug&#xff0c;有可能因為一個邏輯問題導致支付接口存在被薅羊毛的風險&#xff0c;這個時候能做的只能是趕快修復…

spring中@Inject和@Autowired的區別?分別在什么條件下使用呢?

問題&#xff1a;spring中Inject和Autowired的區別&#xff1f;分別在什么條件下使用呢&#xff1f; 我在瀏覽SpringSource上的一些博客&#xff0c;在其他一個博客中&#xff0c;那個作者用了Inject&#xff0c;但是我覺得他用Autowired也行 下面是一部分代碼&#xff1a; …

Objective-C語言的動態性

Objective-C具有相當多的動態特性&#xff0c;基本的&#xff0c;也是經常被提到和用到的有動態類型&#xff08;Dynamic typing&#xff09;&#xff0c;動態綁定&#xff08;Dynamic binding&#xff09;和動態加載&#xff08;Dynamic loading&#xff09; 一、編譯時和運行…

內存泄漏和內存溢出的區別

原文地址https://www.zhihu.com/question/40560123 簡單來說&#xff0c;操作系統就像資源分配人員&#xff0c;你要使用內存的時候分給你&#xff0c;你用完了還給它。如果你使用了沒有分配給你的內存就是內存溢出&#xff0c;如果你用完了沒有還就是內存泄漏。會引起的問題&a…

怎么注銷筆記本icloud_如何在筆記本電腦或臺式機的Web瀏覽器中在線查看Apple iCloud照片

怎么注銷筆記本icloudPicture this: you just returned from a beautiful vacation and want to show all those gorgeous photos to your family. But your phone just died. And since youre at a family dinner your laptop is nowhere to be found.想象一下&#xff1a;您剛…

棒棒糖 宏_棒棒糖圖表

棒棒糖 宏AKA: lollipop plot又名&#xff1a;棒棒糖情節 WHY: a lollipop chart (LC) is a handy variation of a bar chart where the bar is replaced with a line and a dot at the end. Just like bar graphs, lollipop plots are used to make comparisons between diff…