Grundlagen der Windows-Berechtigungseskalation

Ich habe mich für mich selbst und für diejenigen, die es nützlich finden würden, entschieden, alles zu sammeln, was ich weiß, aber ich erinnere mich nicht an das Thema in diesem Artikel. Tipps teilen. Die Hauptquelle dieses Artikels ist dies .

Ich übersetzte frei und fügte ein wenig von mir hinzu, was ich sammelte und aus anderen Quellen lernte.

Im Allgemeinen gibt es hier Möglichkeiten, wie wir unser Ziel der Eskalation von Privilegien erreichen können.

Der Ausgangspunkt für diesen kurzen Artikel ist eine nicht privilegierte Shell (Konto). Vielleicht haben wir einen Exploit benutzt oder einen Angriff ausgeführt und diese Shell bekommen.

Grundsätzlich verstehen wir den Computer zu Beginn nicht: Was er tut, womit er verbunden ist, welche Berechtigungen wir haben oder sogar welches Betriebssystem er ist.

Zuerst müssen wir die Informationen erhalten, die wir benötigen, um zu verstehen, wo wir sind und was wir haben:

systeminfo | findstr /B /C:" " /C:" " 

Mit diesem Befehl können Sie den Namen und die Version des Betriebssystems bestimmen, wie Sie daraus sehen können. Sie können es ohne Parameter ausführen, dann ist die Ausgabe des Befehls vollständiger, aber das reicht uns.

Als nächstes ist es wichtig, den Namen des Computers und den Benutzernamen herauszufinden, unter dem wir verbunden sind.

  • Hostname ist der Benutzername.
  • echo% username% - username.

Lassen Sie uns als Nächstes sehen, welche Benutzer sich noch auf diesem Host befinden, und detailliertere Informationen zu ihren Benutzern erhalten.

  • Netznutzer - andere Benutzer
  • net user user1 - detaillierte Informationen zum Benutzer, wobei user1 der Name Ihres Benutzers ist.

Nachdem wir Informationen über das Konto erhalten haben, werden Informationen zur Netzwerkinteraktion dieses Hosts angezeigt.

Schauen Sie sich zunächst die verfügbaren Schnittstellen und die Routing-Tabelle an.

  • ipconfig / all - Informationen zu den verfügbaren Schnittstellen.
  • Routendruck - Routing-Tabelle
  • arp -A - Tabelle der Arp-Einträge

Als nächstes sehen wir die aktiven Netzwerkverbindungen und Firewall-Regeln.

  • netstat -ano - aktive Netzwerkverbindungen.

-a - Beim Starten mit diesem Parameter werden alle aktiven TCP-Verbindungen sowie die vom System abgehörten TCP- und UDP-Ports angezeigt.
-n - Mit dem Parameter können Sie aktive TCP-Verbindungen mit Adressen und Portnummern anzeigen.
-o - zeigt wie der vorherige Schlüssel aktive TCP-Verbindungen an, aber Prozesscodes werden zur Statistik hinzugefügt. Es ist bereits möglich, genau zu bestimmen, welche Anwendung die Verbindung verwendet.

  • netsh firewall show state - Firewall-Status
  • netsh firewall show config - Konfiguration der Firewall

Abschließend untersuchen wir kurz, was auf einem gefährdeten Host funktioniert: geplante Aufgaben, Ausführen von Prozessen, Ausführen von Diensten und installierte Treiber.

 schtasks /query /fo LIST /v 

wo
/ query - Zeigt Daten zu allen geplanten Aufgaben an.
/ fo LIST - Listenausgabe.
/ v - Druckauftragsdetails.

Mit dem folgenden Befehl werden laufende Prozesse mit laufenden Diensten verknüpft.

 tasklist /SVC 

wo
/ SVC - Mapping-Services für jeden Prozess.

Siehe auch eine Liste der ausgeführten Windows-Dienste.

 net start 

Es ist auch nützlich, Informationen zu den Treibern eines gefährdeten Systems anzuzeigen.

 DRIVERQUERY 

Als nächstes möchte ich den wahrscheinlich nützlichsten Windows-Befehl erwähnen - wmic. Mit dem Befehl WMIC (Windows Management Instrumentation Command) können Sie Informationen zu Hardware und System abrufen, Prozesse und deren Komponenten verwalten und Einstellungen mithilfe der Funktionen von Windows Management Instrumentation (Windows Management Instrumentation oder WMI) ändern. Gute Beschreibung .

Leider erlauben einige Windows-Konfigurationen standardmäßig keinen Zugriff auf WMIC, wenn der Benutzer kein Mitglied der Administratorgruppe ist (was eine wirklich gute Idee ist). Jede XP-Version erlaubte keinen Zugriff auf WMIC von einem nicht privilegierten Konto aus.

Im Gegensatz dazu ermöglichten Windows 7 Professional und Windows 8 Enterprise Benutzern mit geringen Berechtigungen die standardmäßige Verwendung von WMIC.

Wie gewohnt - Programmparameter:

 wmic /? 

Ein gutes Skript zum Sammeln von Informationen über wmic.

Bevor Sie fortfahren, sollten Sie die gesammelten Informationen durchgehen. Es lohnt sich auch, auf die im System installierten Patches zu achten, da alle Informationen zu den Lücken im System zusätzliche Unterstützung für die Erhöhung unserer Berechtigungen bieten. HotFix kann nach Schwachstellen bei der Eskalation von Berechtigungen suchen.

Als nächstes betrachten wir eine unbeaufsichtigte Installation. Wenn eine große Maschinenflotte installiert und konfiguriert werden muss, wechselt das technische Personal in der Regel nicht von Maschine zu Maschine, um die einzelnen Maschinen zu konfigurieren. Es gibt verschiedene Lösungen für die unbeaufsichtigte Installation. Für uns ist es nicht so wichtig, was diese Methoden sind und wie sie funktionieren. Entscheidend ist jedoch, dass die für den Installationsprozess verwendeten Konfigurationsdateien viele vertrauliche Informationen enthalten, z. B. den Produktschlüssel des Betriebssystems und das Administratorkennwort. Was uns am meisten interessiert, ist das Administratorkennwort, mit dem wir unsere Berechtigungen erhöhen können.

Dies sind in der Regel folgende Verzeichnisse:

  • c: \ sysprep.inf
  • c: \ sysprep \ sysprep.xml
  • % WINDIR% \ Panther \ Unattend \ Unattended.xml
  • % WINDIR% \ Panther \ Unattended.xml

Es lohnt sich jedoch, das gesamte System zu überprüfen.

Diese Dateien enthalten Kennwörter im Klartext oder BASE64-codiert.
Beispiele:

Sysprep.inf - Passwort im Klartext.

""

Sysprep.xml - Base64-codiertes Passwort.

""

Unattended.xml - Base64-codiertes Passwort.



Für Hosts, die mit der Domäne verbunden sind, können Sie auch nach der Datei Group.xml suchen, die das AES256-verschlüsselte Kennwort enthält, die jedoch entschlüsselt werden kann, weil Der Schlüssel wird auf msdn (https://msdn.microsoft.com/en-us/library/cc422924.aspx) und anderen Quellen veröffentlicht. Dies ist jedoch der Fall, wenn die Richtlinie zum Erstellen lokaler Benutzer auf Hosts oder zum Festlegen eines Kennworts für einen lokalen Administrator verwendet wird.

Zum Beispiel habe ich hier:



Nachdem wir es geöffnet haben, suchen wir nach dem Parameter "cpassword".



Als nächstes müssen Sie diese Sequenz entschlüsseln. Wir verwenden zum Beispiel CrypTool . Dekodieren Sie zunächst Base64.
Base64-Features sind, dass seine Länge ein Vielfaches von 4 sein muss. Daher betrachten wir 4er-Blöcke. Wenn der letzte Block nicht genügend Zeichen enthält, fügen wir die fehlenden Zeichen mit „=“ hinzu.
Ich habe 2 "=".



Als nächstes entschlüsseln wir. Verwenden Sie den obigen Schlüssel.



Wir entfernen die zusätzlichen Punkte, die die Zeichen trennen, und erhalten das Passwort.

Neben Group.xml gibt es hier einige andere Richtlinieneinstellungsdateien, die möglicherweise zusätzliche cPassword-Attribute enthalten:

  • Services \ Services.xml
  • ScheduledTasks \ ScheduledTasks.xml
  • Printers \ Printers.xml
  • Drives \ Drives.xml
  • DataSources \ DataSources.xml

Wir alle lieben automatisierte Lösungen, damit wir so schnell wie möglich die Ziellinie erreichen können. Abhängig von der Art der Shell / des Zugriffs gibt es hier zwei Hauptoptionen. Es gibt ein Metasploit-Modul, das über eine eingerichtete Sitzung (https://www.rapid7.com/db/modules/post/windows/gather/credentials/gpp) ausgeführt werden kann, oder Sie können Get-GPPPassword verwenden, das Teil von PowerSploit ist .

Okay, als nächstes. Wir werden nach dem seltsamen Registrierungsparameter "AlwaysInstallElevated" suchen. Mit dieser Option können nicht privilegierte Benutzer MSI-Dateien von NT AUTHORITY \ SYSTEM installieren.

Um dies verwenden zu können, müssen wir überprüfen, ob beide Registrierungsschlüssel installiert sind. In diesem Fall können wir eine SYSTEM-Shell erhalten. Überprüfen Sie:

 reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated 

 reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated 

Metasploit enthält ein spezielles Modul Exploit / windows / local / always_install_elevated, das eine MSI-Datei mit einer speziellen ausführbaren Datei erstellt, die vom Installationsprogramm mit Systemberechtigungen extrahiert und ausgeführt wird. Nach der Ausführung stoppt die msi-Datei die Installation, um die Registrierung von Aktionen im System zu verhindern. Wenn Sie die Installation mit dem Schalter / quiet starten, wird außerdem nicht einmal eine Fehlermeldung angezeigt.

Nun, einige nützliche Suchbefehle im System:

Der folgende Befehl durchsucht das Dateisystem nach Dateinamen, die bestimmte Schlüsselwörter enthalten. Sie können eine beliebige Anzahl von Schlüsselwörtern angeben.

 dir /s *pass* == *cred* == *vnc* == *.config* 

Wenn Sie nach bestimmten Dateitypen nach Schlüsselwörtern suchen, kann dieser Befehl eine Menge Ausgabe generieren.

 findstr /si password *.xml *.ini *.txt 

In ähnlicher Weise können die beiden folgenden Befehle verwendet werden, um die Registrierung nach Schlüsselwörtern zu durchsuchen, in diesem Fall nach "Kennwort".

 reg query HKLM /f password /t REG_SZ /s 

 reg query HKCU /f password /t REG_SZ /s 

Im Moment haben wir bereits genug, um das System zum Laufen zu bringen. Es gibt jedoch einige gezieltere Angriffe, um das gewünschte Ergebnis zu erzielen: Wir werden uns die Windows-Dienste und -Berechtigungen für Dateien und Ordner ansehen. Unser Ziel ist es, schwache Berechtigungen zu verwenden, um die Sitzungsberechtigungen zu verbessern.

Wir werden viele Zugriffsrechte prüfen. Accesschk.exe, ein Tool von Microsoft Sysinternals Suite, wird uns dabei helfen. Microsoft Sysinternals enthält viele großartige Tools. Das Paket kann von der Microsoft Technet-Website (https://docs.microsoft.com/ru-ru/sysinternals/downloads/sysinternals-suite) heruntergeladen werden.

Wir können die erforderliche Berechtigungsstufe für jeden Dienst mit accesschk überprüfen.

Wir können die Berechtigungen sehen, über die jede Benutzerebene verfügt.



Accesschk kann automatisch prüfen, ob wir Schreibzugriff auf einen Windows-Dienst mit einer bestimmten Benutzerebene haben. In der Regel möchten wir als Benutzer mit geringen Berechtigungen die "Benutzer" überprüfen. Stellen Sie sicher, dass Sie überprüfen, zu welchen Benutzergruppen Sie gehören.

-c Der Name ist ein Windows-Dienst, z. B. ssdpsrv (geben Sie "*" an, um alle Dienste anzuzeigen).
-d Nur Verzeichnisse verarbeiten
-e Zeigt nur explizit angegebene Integritätsstufen an (nur Windows Vista)
-k Der Name ist ein Registrierungsschlüssel, z. B. hklm \ software
-n Zeigt nur Objekte an, für die keine Zugriffsregeln gelten
-p Der Name oder die Prozesskennung (PID) wird als Name angegeben, z. B. cmd.exe (geben Sie "*" als Namen an, um alle Prozesse anzuzeigen).
-q Header weglassen
-r Nur Objekte drucken, die Lesezugriff haben
-s Rekursive Verarbeitung
-v Detaillierte Informationen drucken
-w Listet nur Objekte auf, die Schreibzugriff haben



Es gibt noch einen weiteren interessanten Befehl:

 autorunsc.exe -a | findstr /n /R "File\ not\ found" 

Ermöglicht das Suchen eines Registrierungseintrags zu einer Datei, die automatisch gestartet wurde, aber bereits im System fehlt. Der Datensatz könnte bestehen bleiben, wenn beispielsweise der Dienst falsch gelöscht wurde. Bei jedem Start versucht das System erfolglos, diese Datei auszuführen. Sie können diese Situation auch nutzen, um Ihre Autorität zu erweitern. Ersetzen Sie einfach unsere durch unsere Datei.

Als nächstes betrachten wir zwei Schwachstellen:

Erstens: Replizieren Sie die Ergebnisse eines Beitrags von Parvez von GreyHatHacker. "Erhöhen von Berechtigungen durch Ausnutzen schwacher Ordnerberechtigungen" (http://www.greyhathacker.net/?p=738).

Dieses Beispiel ist ein Sonderfall beim Entführen von DLLs. Programme können normalerweise nicht alleine funktionieren, sie haben viele Ressourcen, die sie verbinden müssen (hauptsächlich DLL, aber auch ihre eigenen Dateien). Wenn ein Programm oder ein Dienst eine Datei aus einem Verzeichnis herunterlädt, auf das wir Schreibzugriff haben, können wir sie missbrauchen, um eine Shell mit Berechtigungen zu starten, unter denen das Programm ausgeführt wird.

In der Regel verwendet eine Windows-Anwendung vordefinierte Suchpfade, um die DLL zu finden, und überprüft diese Pfade in einer bestimmten Reihenfolge. DLL-Hijacking tritt normalerweise auf, indem böswillige DLLs entlang eines dieser Pfade platziert werden. Dieses Problem kann behoben werden, indem der Anwendung absolute Pfade zur erforderlichen DLL angezeigt werden.

DLL-Suchreihenfolge:

  1. Das Verzeichnis, aus dem die Anwendung ausgeführt wird
  2. 32-Bit-Systemverzeichnis (C: \ Windows \ System32)
  3. 16-Bit-Systemverzeichnis (C: \ Windows \ System)
  4. Windows-Verzeichnis (C: \ Windows)
  5. Aktuelles Arbeitsverzeichnis (CWD)
  6. Verzeichnisse in der Umgebungsvariablen PATH (System dann Benutzer)

Manchmal versuchen Anwendungen, DLL-Dateien herunterzuladen, die auf dem Computer fehlen. Dies kann verschiedene Gründe haben, z. B. wenn die DLL-Bibliothek nur für bestimmte Plug-Ins oder Komponenten benötigt wird, die nicht installiert sind. In diesem Fall hat Parvez festgestellt, dass einige Windows-Dienste versuchen, DLL-Bibliotheken zu laden, die in den Standardeinstellungen nicht vorhanden sind.

Da die DLL nicht existiert, gehen wir am Ende alle Suchpfade durch. Als Benutzer mit geringen Berechtigungen haben wir kaum eine Chance, eine schädliche DLL in die Punkte 1 bis 4, 5 aufzunehmen. Wenn wir jedoch Schreibzugriff auf eines der Verzeichnisse haben, sind unsere Gewinnchancen groß.

Lassen Sie uns sehen, wie es in der Praxis funktioniert. In unserem Beispiel verwenden wir den IKEEXT-Dienst (IPSec IKE und AuthIP-Schlüsselmodule), der versucht, wlbsctrl.dll herunterzuladen.

Jedes Verzeichnis in "C: \" bietet authentifizierten Benutzern Schreibzugriff. Dies gibt uns eine Chance.

 C:\Users\user1\Desktop> accesschk.exe -dqv "C:\Python27" 

 C:\Python27 Medium Mandatory Level (Default) [No-Write-Up] RW BUILTIN\Administrators FILE_ALL_ACCESS RW NT AUTHORITY\SYSTEM FILE_ALL_ACCESS R BUILTIN\Users FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_EA FILE_TRAVERSE SYNCHRONIZE READ_CONTROL RW NT AUTHORITY\Authenticated Users FILE_ADD_FILE FILE_ADD_SUBDIRECTORY FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_EA FILE_TRAVERSE FILE_WRITE_ATTRIBUTES FILE_WRITE_EA DELETE SYNCHRONIZE READ_CONTROL 

 C:\Users\user1\Desktop> icacls "C:\Python27" 

 C:\Python27 BUILTIN\Administrators:(ID)F BUILTIN\Administrators:(OI)(CI)(IO)(ID)F NT AUTHORITY\SYSTEM:(ID)F NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(ID)F BUILTIN\Users:(OI)(CI)(ID)R NT AUTHORITY\Authenticated Users:(ID)C NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(ID)C 

F - voller Zugriff.
(OI) - Vererbung durch Objekte.
(CI) - Vererbung durch Container.
(IO) - nur Vererbung.
(NP) - ein Verbot der Verteilung der Erbschaft.
(I) - Berechtigungen vom übergeordneten Container erben.

Bevor Sie mit der Aktion fortfahren, müssen Sie den Status des IKEEXT-Dienstes überprüfen. In diesem Fall können wir sehen, dass es auf "AUTO_START" gesetzt ist!

 sc qc IKEEXT 

 [SC] QueryServiceConfig SUCCESS SERVICE_NAME: IKEEXT TYPE : 20 WIN32_SHARE_PROCESS START_TYPE : 2 AUTO_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : C:\Windows\system32\svchost.exe -k netsvcs LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : IKE and AuthIP IPsec Keying Modules DEPENDENCIES : BFE SERVICE_START_NAME : LocalSystem 

Jetzt wissen wir, dass wir die notwendigen Bedingungen haben, und wir können eine bösartige DLL erstellen und die Shell abfangen!

Wir verwenden zum Beispiel Metasploit -> msfvenom.



Nachdem wir die Datei "evil.dll" auf unseren Zielcomputer übertragen haben, müssen wir sie nur in "wlbsctrl.dll" umbenennen und in "C: \ Python27" verschieben. Sobald dies erledigt ist, müssen wir geduldig auf den Neustart des Computers warten (oder wir können versuchen, den Neustart zu erzwingen), und wir erhalten die System-Shell.

 copy evil.dll C:\Python27\wlbsctrl.dll 

Danach muss nur noch auf den Neustart des Systems gewartet werden.

In unserem letzten Beispiel werden wir die geplanten Aufgaben betrachten. Ich werde das Prinzip beschreiben, weil Alle können unterschiedliche Fälle haben.

Wir finden den Prozess, den Dienst und die Anwendung, die vom Taskplaner von SYSTEM gestartet wurden.
Wir überprüfen die Zugriffsrechte auf den Ordner, in dem sich unser Ziel befindet.

 accesschk.exe -dqv "__" 

Es ist klar, dass dies ein ernstes Konfigurationsproblem ist, aber noch schlimmer ist die Tatsache, dass jeder authentifizierte Benutzer (authentifizierter Benutzer) Schreibzugriff auf diesen Ordner hat. In diesem Beispiel können wir die ausführbare Binärdatei einfach mit der von metasploit generierten Datei überschreiben.

Kann optional codiert werden.



Jetzt müssen Sie nur noch die schädliche ausführbare Datei herunterladen und im Ordner für ausführbare Dateien überschreiben. Sobald dies erledigt ist, können wir sicher ins Bett gehen und früh morgens einen systemischen Spaziergang machen.

Diese beiden Beispiele sollen uns einen Eindruck von den Sicherheitslücken geben, nach denen gesucht werden muss, wenn Berechtigungen für Dateien und Ordner berücksichtigt werden. Das Erlernen aller Binpath-Pfade für Windows-Dienste, geplante Aufgaben und Autorun-Aufgaben dauert einige Zeit.

Zum Schluss noch ein paar Tipps zur Verwendung von accesschk.exe.

Finden Sie alle schwachen Berechtigungen für Ordner auf der Festplatte.

 accesschk.exe -uwdqs Users c:\ accesschk.exe -uwdqs "Authenticated Users" c:\ 

Finden Sie alle schwachen Berechtigungen für Dateien auf der Festplatte.

 accesschk.exe -uwqs Users c:\*.* accesschk.exe -uwqs "Authenticated Users" c:\*.* 

Wie alles.

Source: https://habr.com/ru/post/de418441/


All Articles