• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 安卓Hacking Part 2: Content Provider攻防

    在上一期中,我們討論了攻擊及加固Activity組件的方法,今天我們來看看所謂的”Content Provider Leakage”。

    什么是Content Provider?

    按照Google為Android設計的安全模型,應用的數據屬于私有數據,故默認情況下,應用無法訪問其他應用的私有數據。但當應用需要與其他應用共享數據時,Content Provider就扮演著應用間數據共享橋梁的角色。Content Providers使用標準的insert(),query(),update(), delete()等方法來操作應用的數據,每個Content Provider都對應一個以”content://”開頭的特定URI,任何應用都可以通過這個URI操作Content Provider 應用的數據庫。
    在這里插入圖片描述某些時候,應用的Content Provider并不是為了與其他應用共享數據,或者是為了與具有一定權限的應用共享數據,在這種情況下,如果應用對權限控制不當就會造成信息泄露。

    Android中內置的SMS短信應用就是一個典型的Content Provider的例子,任何應用都能通過這個URI讀取收件箱:content://sms/inbox,但必須在應用的AndroidManifest.xml文件中登記READ_SMS權限。

    前期準備:

       安裝了Android SDK的電腦
    
       一臺未root的Android設備
    

    示例程序功能測試:

    下載了測試應用之后,安裝在一個未root的android設備中

    可通過以下命令安裝

    #adb install <name of the apk>.apk
    

    在這里插入圖片描述我們的目標是尋找該應用是否實現了Content Provider,如果有,我們就需要進一步對其進行測試看是否會造成信息泄露。

    相關主題:

       信息收集
    
       攻擊脆弱的Content Provider
    
       應用加固
    

    信息收集:

    與其他的滲透測試步驟一樣,我們同樣從信息收集入手。假設現在我們都拿到了APK文件,使用我們第一期介紹的方法反編譯該APK文件,檢查在APK的AndroidManifest.xml文件中注冊的content provider。并檢查所有用到了相關URI的smali文件。

    Content provider 通常以如下形式在AndroidManifest.xml中注冊

    在這里插入圖片描述檢查測試應用的AndroidManifest.xml文件:

    在這里插入圖片描述我們在AndroidManifest.xml文件中發現其中注冊了一個content provider ,并且該content provider 是暴露的(android:exported=”true”),這意味著所有應用都可以訪問這個content provider

    攻擊content provider

    這是我們這次試驗最有趣的部分了,現在我們嘗試通過這個content provider 去查詢數據,如果有數據返回,就意味著這個content provider 是可以被攻擊的,我們有很多種辦法來進行這個查詢:

    1、 使用adb命令

    2、 使用一個惡意應用發起查詢

    3、 使用Mercury框架(譯者注:以改名為drozer)

    使用adb

       要使用adb來訪問content provider,測試應用要先安裝在一臺供測試的設備上。
    
       首先獲得一個adb shell (cmd: # adb shell),并使用下面的命令來讀取content provider.比如我現在要去的讀取一個在MyProvider.smali中發現的URI:
    
       Content –query –uri content://com.isi.contentprovider.MyProvider/udetails
    

    不出意外的話,我們就能看到儲存在應用數據庫中的內容了,如下圖所示:

    在這里插入圖片描述

    使用惡意應用

    我們甚至能自己寫一個簡單的惡意應用來讀取content provider。以下一段讀取收件箱的示例代碼:
    在這里插入圖片描述

    使用Mercury框架(drozer)

    使用mercury框架,整個攻擊過程將更加簡單和高效。

    標題加固應用

    1、 設置android:exported 屬性為false:

    在我們這個應用的AndroidManifest.xml文件中,我們應該加上以下屬性來對應用進行加固,比如,我們的content provider 的類名是com.isi.contentprovider.MyProvider

    在這里插入圖片描述
    如果我再嘗試讀取一個屬性android:exported 為false的content provider就會拋出異常,如圖所示:
    在這里插入圖片描述注:API level 在17以下的所有應用的android:exported屬性默認值都為true.

    2、 通過設置自定義權限來限制對content provider的訪問

    我們可以通過自定義權限來對content provider的訪問進行權限控制.這在開發者想對具有特定權限的應用開放訪問的情況下很有用。

    標題Content Provider的其他安全問題

    SQL注入:如果安全控制不當,Content Provider 會造成客戶端的SQL注入,與傳統的SQL注入攻擊方法類似。

    目錄遍歷:如果Content Provider的實現存在問題,可能還會造成目錄遍歷。這與WEB中的目錄遍歷類似,允許攻擊者遍歷并訪問本地文件系統。可通過該漏洞讀取設備中的敏感文件。

    版權聲明:本文為weixin_43639443原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_43639443/article/details/103386058

    智能推薦

    安卓復習.Part4

    概念 Fragment 表示 FragmentActivity 中的行為或界面的一部分。可以在一個 Activity 中組合多個片段,從而構建多窗格界面,并在多個 Activity 中重復使用某個片段。可以將片段視為 Activity 的模塊化組成部分,它具有自己的生命周期,能接收自己的輸入事件,并且可以在 Activity 運行時添加或移除片段(這有點像可以在不同 Activity 中重復使用的...

    安卓復習.Part3

    Android UI元素 Android 界面元素主要由5部分組成: 視圖(View) 視圖容器(ViewGroup) 布局管理(Layout) Activity Fragment 視圖View 常見的子類及其功能: 視圖容器 ViewGroup類通常作為其他組件的容器使用。 示意圖: ViewGroup類提供的主要方法: ViewGroup的繼承者大部分位于android.widget包中。 布...

    Content Provider與SQLite結合使用

    前言   雖然推薦使用數據庫保存結構化的復雜數據,但是數據共享是一個挑戰,因為數據庫只允許創建它的應用訪問。 在Android中共享數據   在Android中,推薦使用content provider方法在不同包之間共享數據。content provider可以被視為一個數據倉庫。它如何存儲數據與應用如何使用它無關。然而,應用如何使用一致的編程接口在它的里面的數據非常重要。content pro...

    Android學習羈絆之Content Provider

    原文鏈接:Android學習羈絆–>Content Provider Content Provider(內容提供器)主要用于在不同的應用程序之間實現數據共享的功能,它提供了一套完整的機制,允許一個程序訪問另一個程序中的數據,同時還能保證被訪數據的安全性。目前,使用內容提供器是Android實現跨程序共享數據的標準方式。 不同于文件存儲和SharedPreferences存儲中的兩...

    (譯)從Content Provider中獲取數據

    原文:https://developer.android.google.cn/guide/topics/providers/content-provider-basics.html Content Provider基礎 Content Provider管理對中央數據倉庫的訪問,它是Android應用的一部分,通常會提供自己的UI來使用數據。然而,Content Provider主要是為了給其他應用...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡