Mit diesem Tool können Sie Folgendes erkennen:
Falsche Zugriffskontrolle auf ein COM-Objekt (LaunchPermission, AccessPermission) – LPE durch missbräuchliche COM-Methoden, DCOM-Authentifizierungsweiterleitung. Das ist PermissionHunter
.
Falsche Registrierungsrechte für ein COM-Objekt – LPE durch COM-Hijacking. Das ist ComDiver
.
Finden Sie einen neuen Elevation-Moniker – UAC-Umgehung. Das ist MonikerHound
.
Erhalten Sie detaillierte Informationen zu einer bestimmten CLSID. Untersuchen Sie das COM-Objekt, um missbräuchliche COM-Methoden zu finden. Das ist ClsidExplorer
.
Überprüfen Sie die sitzungsübergreifende Aktivierung im Namen eines Benutzers mit geringen Berechtigungen – Versuch, ein Objekt in der Sitzung einer anderen Person für LPE zu instanziieren. Das ist ComTraveller
.
Wenn wir dieses Tool vor ein paar Monaten veröffentlicht hätten (z. B. Frühjahr 2024), hätten Sie CVE-2024-38100 (FakePotato) und CVE-2024-38061 (SilverPotato) entdeckt.
Wenn Sie dieses Tool verwenden, finden Sie weitere Möglichkeiten, die Berechtigungen auf Windows-Systemen zu erhöhen. Es ist wie ein automatisiertes OleViewDotnet :)
PermissionHunter ist ein Tool, mit dem Sie LaunchPermission und ActivatePermission für alle COM-Objekte im System untersuchen können.
PS A:mzhmo> .PermissionHunter.exe -h , `-. .-' ,-"`````""-__ | / '-.._ _.-'` '-o, _>--:{{< ) |) .-'' '-.__ .-o` '-._____..-/` | ,-' / `-. ` PermissionHunter – Jagd nach falscher LaunchPermission und ActivatePermission CICADA8-Forschungsteam von Michael Zhmaylo (MzHmO)PermissionHunter.exeKleines Tool, mit dem Sie anfällige COM-Objekte mit falscher LaunchPermission und ActivatePermission finden können[OPTIONS]-outfile: Ausgabedateiname-outformat: Ausgabeformat. Akzeptiert 'csv' und 'xlsx' -h/--help : zeigt dieses Fenster an
Hier gibt es nur zwei Argumente:
-outfile
– Name der Datei mit dem Rechtebericht;
-outformat
– Format der Datei mit dem Bericht, Sie können sowohl im CSV- als auch im XLSX-Format ausgeben. Es ist besser, im CSV-Format auszugeben, denn wenn Sie nicht über Excel verfügen, können Sie nicht im XLSX-Format ausgeben.
Beispiel:
PS A:mzhmo> .PermissionHunter -outfile result -outformat xlsx , `-. .-' ,-"`````""-__ | / '-.._ _.-'` '-o, _>--:{{< ) |) .-'' '-.__ .-o` '-._____..-/` | ,-' / `-. ` PermissionHunter – Suche nach falscher LaunchPermission und ActivatePermission. CICADA8-Forschungsteam von Michael Zhmaylo (MzHmO)[+] Ergebnis wird im Ergebnis sein, Format xlsx[+] Erfolgreich
Danach erhalten Sie eine Datei result.xlsx, die alle Rechte an vorhandenen COM-Objekten auflistet.
Ich gebe folgende Spalten aus:
ApplicationID
– Anwendungs-ID eines bestimmten COM-Objekts. Bsp.: {69AD4AEE-51BE-439b-A92C-86AE490E8B30}
;
ApplicationName
– Anwendungsname eines bestimmten COM-Objekts. Beispiel: Background Intelligent Transfer Service
;
RunAs
– RunAs-Registrierungsschlüssel eines COM-Objekts. Beispiel: Interactive User
;
LaunchAccess
, LaunchType
, LaunchPrincipal
, LaunchSid
– LaunchPermission-Registrierungsschlüssel. LaunchPrincipal gibt den Benutzer an, der über LaunchAccess-Rechte für das COM-Objekt verfügt. LaunchType – ACE-Typ: Aktivieren oder Deaktivieren. LaunchSID – SID von LaunchPrincipal. Ex:
LocalLaunch. RemoteLaunch. LokaleAktivierung. RemoteActivation AccessAllowed NT AUTHORITYSYSTEM S-1-5-18
Dies bedeutet, dass das System über die Berechtigungen LocalLaunch, RemoteLaunch, LocalActivation und RemoteActivation für dieses COM-Objekt verfügt.
AccessAccess
, AccessType
, AccessPrincipal
, AccessSID
– Felder haben dieselbe Bedeutung wie LaunchPermissions, nur im Kontext von AccessPermission;
AuthLevel
, ImpLevel
– Authentifizierungsebene und Identitätswechselebene. Standardmäßig sind sie auf RPC_C_AUTHN_LEVEL_CONNECT
und RPC_C_IMP_LEVEL_IDENTIFY
festgelegt.
CLSIDs
– COM-Objekt-CLSIDs.
Wenn Sie ein COM-Objekt finden, auf das Sie beispielsweise im Namen eines Benutzers mit geringen Berechtigungen zugreifen können, können Sie es wie folgt missbrauchen:
Erstellen Sie eine Instanz und rufen Sie die Methoden dieses COM-Objekts auf, um beispielsweise eine beliebige Datei im Namen des Systems zu schreiben. Sie haben beispielsweise ein COM-Objekt mit einer DeployCmdShell()
Methode gefunden, die im Namen des NT AUTHORITYSYSTEM
Kontos ausgeführt wird, und Sie verfügen über LaunchPermissions
und AccessPermissions
. Sie können dieses COM-Objekt starten, die DeployCmdShell()
Methode aufrufen und die Codeausführung im Namen des Systems veranlassen. Sie können die verfügbaren Methoden mit ClsidExplorer
anzeigen.
Missbrauch der DCOM-Authentifizierung. Siehe hierzu RemoteKrbRelay
Alle Informationen zu COM-Objekten befinden sich in der Registrierung. Was aber, wenn die Registrierung falsch war? In einem solchen Fall haben wir die Möglichkeit, COM-Einstellungen zu überschreiben, um beispielsweise die ausführbare Datei zu kapern.
Mit diesem Tool können Sie solche Schwachstellen erkennen und die Registrierung anhand der Priorität der angezeigten Schlüssel bei der Suche nach COM-Objekten scannen. Auf diese Weise können Sie sogar Shadow COM Hijacking finden. Die Priorität ist wie folgt:
1. HKCUSoftwareClasses(GUID)TreatAs 2. HKLMSoftwareClasses(GUID)TreatAs 3. HKCUSoftwareClasses(GUID)InprocServer32 4. HKLMSoftwareClasses(GUID)InprocServer32 5. HKCUSoftwareClasses(GUID)LocalServer32 6. HKLMSoftwareClasses(GUID)LocalServer32
Somit entstehen mindestens zwei Vektoren der Privilegienausweitung:
Wenn wir über Schreibberechtigungen für HKCU...TreatAs
verfügen und sich die ursprüngliche ausführbare COM-Datei in HKCU...LocalServer32
befindet, können wir Shadow COM Hijacking durchführen, indem wir unsere ausführbare Datei in HKCU..TreatAs
schreiben.
Wenn das COM-Objekt in HKCU..LocalServer32
liegt und wir in HKCU..LocalServer32
schreiben können, können wir COM-Hijacking durchführen
Schauen wir uns das Tool genauer an:
PS A:ssdgitrepoCOMThanasiaComDiverx64Debug> .ComDiver.exe -h / o ^ o / ( ) / ____________(%%%%%%%)____________ ( / / )%%%%%%%( ) (___/___/__/ ________) ( / /(%%%%%%%) ) (__/___/ (%%%%%%%) _____) /( ) / (%%%%%) (%%%) !----------- COM DIVER -------------- [?] Kleines Tool zum Überprüfen unsicherer Registrierungs- und Festplattenberechtigungen für COM-Objekte [?] ARGS -h/--help <- Diese Nachricht anzeigen --from<- CLSIDs aus dieser CLSID analysieren --target <- eine Ziel-CLSID analysieren --no-context <- keinen anderen COM-Server-Kontext prüfen. Nur Registrierungsanalyse. --no-create <- Ziel-COM-Objekt nicht erstellen. Dies ist der schnellste Modus
Es akzeptiert die folgenden Argumente:
--from
– Auf einem Windows-System gibt es viele CLSIDs. Wenn Sie nicht möchten, dass das Tool alle CLSIDs von Anfang an betrachtet, können Sie die CLSID angeben, mit der begonnen werden soll, z. B. --from {50FDBB99-5C92-495E-9E81-E2C2F48CDDA}
--target
– spezifische Clsid analysieren;
--no-context
– überprüft nicht den Namen des Benutzers, in dessen Namen das COM-Objekt gestartet wird;
--no-create
– um kein erkanntes COM-Objekt zu erstellen. Dies schränkt die Informationen ein, die Sie darüber erhalten können. Dies ist jedoch die schnellste Möglichkeit, nur die Registrierungsrechte zu untersuchen.
Beispiel:
.ComDiver.exe --no-create
In diesem Fall können wir sehen, dass in HKCU keine Schlüssel vorhanden sind und wir über Schreibberechtigungen für diese Schlüssel verfügen. Wenn wir dementsprechend unseren eigenen Wert in diesen Pfad schreiben, führen wir COM-Hijacking durch.
Wenn Sie in der Tool-Ausgabe rote Linien sehen, ist dies eine potenzielle Möglichkeit, ein COM-Objekt zu missbrauchen! Sie können COM Hijacking (Spoofing einer vorhandenen ausführbaren Datei) oder Shadow COM Hijacking (Spoofing einer fehlenden ausführbaren Datei) durchführen. Lesen Sie hier mehr über COM-Hijacking
Es gibt eine integrierte Möglichkeit, die Benutzerkontensteuerung auf einem Windows-System zu umgehen. Dies erfolgt über Elevation Moniker. Mehr darüber können Sie hier lesen. Diese Art der UAC-Umgehung erfordert eine nicht standardmäßige Methode zur Registrierung des COM-Objekts in der Registrierung, die relativ einfach nachzuverfolgen ist. Sie können also mein Tool nutzen, um neue Möglichkeiten der UAC-Umgehung zu finden.
Beispiel:
PS A:ssdgitrepoCOMThanasiaMonikerHoundx64Debug> .MonikerHound.exe ,_ _ _, oo/ ,(.-.), _/ |) (| _ /=-=/ ,| =/ |, _/ | / _ _!_/ MonikerHound – finden Sie Ihren eigenen UAC-Bypass! CICADA8-Forschungsteam Von Michael Zhmaylo (MzHmO) [+] Potenzieller COM-Server für Höhenmoniker gefunden! Name: CEIPLuaElevationHelper CLSID: {01D0A625-782D-4777-8D4E-547E6457FAD5} LocalizedString: @%systemroot%system32werconcpl.dll,-351 Aktiviert: 1 IconReference: @%systemroot%system32werconcpl.dll,-6 Aktivieren: Erfolg PID: 15800 DllHost.exe [+]........................[+] [+] Potenzieller COM-Server für Höhenmoniker gefunden! Name: CTapiLuaLib-Klasse CLSID: {03e15b2e-cca6-451c-8fb0-1e2ee37a27dd} LocalizedString: @%systemroot%system32tapiui.dll,-1 Aktiviert: 1 IconReference: @%systemroot%system32tapiui.dll,-201 Aktivieren: Erfolg PID: 440 DllHost.exe [+]........................[+]
Sobald Sie potenzielle Kandidaten für UAC Bypass entdeckt haben, können Sie mit der Prüfung beginnen. Als großartige Vorlage zum Ausführen von Elevation Moniker können Sie diese Funktion oder dieses Programm verwenden.
Mit ClsidExplorer können Sie Informationen zu einer bestimmten CLSID abrufen. Das Programm gibt folgende Daten aus:
AppID
– Anwendungs-ID eines bestimmten COM-Objekts;
ProgID
– ProgID eines bestimmten COM-Objekts;
PID
– PID, in der dieses COM-Objekt ausgeführt wird;
Process Name
– der Name des PID-Prozesses;
Username
– Name des Benutzers, in dessen Namen der Prozess ausgeführt wird;
Methods
– verfügbare Methoden des COM-Objekts. Erstellt durch Parsen von TypeLib.
PS A:ssdgitrepoCOMThanasiaClsidExplorerx64Debug> .CLSIDExplorer.exe -h CLSIDExplorer.exe – Identifizieren Sie alle Informationen anhand der clsid Verwendung: .CLSIDExplorer.exe --clsid „{00000618-0000-0010-8000-00aa006d2ea4}“
Das Programm akzeptiert nur ein Argument:
--clsid
– Ziel-CLSID für die Analyse
PS A:ssdgitrepoCOMThanasiaClsidExplorerx64Debug> .CLSIDExplorer.exe --clsid "{00000618-0000-0010-8000-00aa006d2ea4}"[{00000618-0000-0010-8000-00aa006d2ea4}] AppID: Unbekannt ProgID: Unbekannt PID: 1572 Prozessname: CLSIDExplorer.exe Benutzername: WINPCMichael Methoden: [0] __stdcall void QueryInterface(IN GUID*, OUT void**) [1] __stdcall unsigned long AddRef() [2] __stdcall unsigned long Release() [3] __stdcall void GetTypeInfoCount(OUT unsigned int*) [4] __stdcall void GetTypeInfo(IN unsigned int, IN unsigned long, OUT void**) [5] __stdcall void GetIDsOfNames(IN GUID*, IN char**, IN unsigned int, IN unsigned long, OUT long*) [6] __stdcall void Invoke(IN long, IN GUID*, IN unsigned long, IN unsigned short, IN DISPPARAMS*, OUT VARIANT*, OUT EXCEPINFO*, OUT unsigned int*) [7] __stdcall BSTR Name() [8] __stdcall void Name(IN BSTR) [9] __stdcall RightsEnum GetPermissions(IN VARIANT, IN ObjectTypeEnum, IN VARIANT) [10] __stdcall void SetPermissions(IN VARIANT, IN ObjectTypeEnum, IN ActionEnum, IN RightsEnum, IN InheritTypeEnum, IN VARIANT) [11] __stdcall void ChangePassword(IN BSTR, IN BSTR) [12] __stdcall Groups* Groups() [13] __stdcall Properties* Properties() [14] __stdcall _Catalog* ParentCatalog() [15] __stdcall void ParentCatalog(IN _Catalog*) [16] __stdcall void ParentCatalog(IN _Catalog*) [ENDE]
Dieses Programm eignet sich hervorragend zum Überprüfen einer mit ComTraveller
, PermissionHunter
oder MonikerHound
entdeckten COM-Klasse auf interessante Methoden, die missbraucht werden können.
ComTraveller – mit diesem Tool können Sie alle verfügbaren COM-Objekte erkunden. Erstens können Sie COM-Objekte mit interessanten Werten (RunAs Interactive User), der Verfügbarkeit von TypeLib und sitzungsübergreifenden Aktivierungsfunktionen schnell identifizieren. Auf diese Weise können Sie schnell Objekte erkennen, die möglicherweise in einer anderen Benutzersitzung instanziiert werden, was zu einer Rechteausweitung führt.
PS A:SSDgitrepoCOMThanasiaComTravellerx64Debug> .ComTraveller.exe -h ,,_ zd$$??= z$$P? F:`c, _ d$$, `c'cc$$i ,cd$?R $$$$ cud$,?$$$i ,=P"2?z " $" " ?$$$, ?$$$. ,-''`>, bzP 'cLdb,?$$,?$$$ ,h' "I$'J$P ... `?$$$,"$$,`$$h $$PxrF'd$"d$PP""?-,"?$$,?$h`$$,,$$'$F44 "?,,_`=4c,?=,"?hu?$`?L4$'? ' `""?==""=-"" `""-`'_,,,, .ccu? m?e?JC,-,"=? """=='?"ComTraveller – kleines Tool zum Parsen und Extrahieren von Informationen über alle registrierten CLSIDs im System. Verwendung:--file– Name der Ausgabedatei. Standard: output.csv--from – Beginnen Sie mit der Erkundung von clsids von dieser clsid aus. (z. B. Standard-Enum von 1 bis 9. mit --from 4 wird von 4 bis 9 sein)--session – verwenden Sie diese Option, wenn Sie die sitzungsübergreifende Aktivierung in einer bestimmten Sitzung überprüfen möchten. Nur nützlich bei „Als interaktive Benutzer-COM-Objekte ausführen“ – Ziel – Analysieren Sie diese CLSID – h/--help – zeigt diesen Bildschirm an
--file
– Name der Datei, in die Informationen über COM-Objekte ausgegeben werden;
--from
– Auf einem Windows-System gibt es viele CLSIDs. Wenn Sie nicht möchten, dass das Tool alle CLSIDs von Anfang an betrachtet, können Sie die CLSID angeben, mit der begonnen werden soll, z. B. --from {50FDBB99-5C92-495E-9E81-E2C2F48CDDA}
--session
– versucht, ein Objekt in der Sitzung einer anderen Person zu instanziieren
--target
– Analysiert nur eine Ziel-CLSID
Beispiel:
.ComTraveller.exe --file rep.csv --session 1
Danach finden Sie eine rep.csv-Datei mit Informationen zu COM-Objekten. Hier gibt es mehrere Spalten:
CLSID
– CLSID des COM-Objekts;
AppId
– APPID des COM-Objekts;
ProgId
– APPID des COM-Objekts;
RunAs
– Wert in der RunAs-Registrierung. Wenn der Wert The Interactive User
oder NT AUTHORITYSYSTEM
ist, können Sie versuchen, LPE zu erstellen;
Username
– Name des Benutzers, in dessen Namen das COM-Objekt ausgeführt wird;
PID
– die PID, in der das COM-Objekt ausgeführt wird;
ProcessName
– Name des Prozesses, in dem das COM-Objekt ausgeführt wird;
HasTypeLib
– ob das COM-Objekt über TypeLib verfügt. Wenn dies der Fall ist, können Sie dieses Objekt an ClsidExplorer
übergeben, um die verfügbaren Methoden anzuzeigen.
canCrossSessionActivate
– ob es möglich ist, diese COM-Klasse für LPE durch Aktivierung in der Sitzung einer anderen Person zu missbrauchen. Wenn der Wert +
ist oder der Fehler ACCESS DENIED
lautet, könnte dies ein potenzieller Kandidat für LPE sein.
Wenn man beispielsweise Filter anwendet, findet man sofort interessante COM-Klassen :) Wow, ist das eine COM-Klasse, die sitzungsübergreifend aktiviert werden kann und systemseitig funktioniert?
Es ist zu beachten, dass das Programm aufgrund der Fülle an COM-Objekten abstürzen kann. In diesem Fall können Sie es wie folgt neu starten:
.ComTraveller.exe --file rep.csv --session 1 --from "{0006F071-0000-0000-C000-000000000046}"