Eine kurze Diskussion über Methoden zum Hochladen von Dateien zum Erhalten von Berechtigungen

王林
Freigeben: 2023-04-09 09:11:03
nach vorne
1087 Leute haben es durchsucht

Übersicht

Sicherheitslücken beim Datei-Upload treten in Anwendungen mit Upload-Funktionen auf. Wenn die Anwendung keine Kontrolle über die hochgeladenen Dateien des Benutzers hat oder Fehler aufweist, können Angreifer die Fehler in der Anwendungs-Upload-Funktion ausnutzen, um Trojaner, Viren und andere schädliche Dateien hochzuladen an den Server senden und den Server steuern.

Ursache und Schaden der Sicherheitslücke

Der Hauptgrund für die Sicherheitslücke beim Hochladen von Dateien besteht darin, dass die Anwendung über eine Upload-Funktion verfügt, die hochgeladenen Dateien jedoch keine strenge Legalitätsprüfung bestanden haben oder die Prüffunktion fehlerhaft ist, wodurch Trojaner-Dateien zugelassen werden auf den Server hochgeladen werden. Sicherheitslücken beim Hochladen von Dateien sind äußerst schädlich, da bösartiger Code direkt auf den Server hochgeladen werden kann, was schwerwiegende Folgen haben kann, z. B. Manipulation der Webseite des Servers, Hängenbleiben der Website, Fernsteuerung des Servers und Installation von Hintertüren.

Hier besprechen wir verschiedene Verifizierungs- und Umgehungsmethoden für das Hochladen von Dateien:

1. Lokale Verifizierung (Front-End-Verifizierung)

Die Schwachstelle bei der Umgehung des Front-End-JS-Filters liegt darin, dass die Anwendung durch JS-Code im Front-End verifiziert wird , und Die Überprüfung wird nicht im Backend des Programms durchgeführt, sodass Sie die Upload-Filterung umgehen und Trojaner hochladen können, indem Sie den Front-End-JS-Code ändern.

Wie kann man also beurteilen, ob es sich um eine Front-End-Verifizierung handelt? Ich persönlich denke, wir können beim Hochladen und Erfassen des Pakets überprüfen, ob wir das Datenpaket erhalten können, ob Daten durchfließen, oder wir können überprüfen, ob auf der hochgeladenen Bildseite die hochgeladene Bildadresse usw. angezeigt wird.

Bypass: Entfernen Sie den Filtercode, ändern oder deaktivieren Sie Javascript.

2. Backend-Überprüfung und -Umgehung

Gemeinsame Überprüfungen für den Datei-Upload: Suffixname (direkte Überprüfung), Datei, Dateikopf (indirekte Überprüfung). 2.1 Suffixname Es gibt keine vollständige Filterung, sodass Angreifer Dateien hochladen können, die nicht auf der schwarzen Liste stehen.

Blacklist-Beurteilungsmethode: Dateien hochladen. Das System weist darauf hin, dass das Hochladen von Dateien im xxx-Format nicht zulässig ist.

Umgehung: Verwenden Sie andere Formate (php5, Phtml, php3) oder Dateiformate, und Sie können auch einige Interferenzsymbole hinzufügen, um eine Umgehung zu erreichen.

2.1.2 .htaccess (pseudostatisches Protokoll) – Analyse neu schreiben (nur in Apache verfügbar und Aktivierung des pseudostatischen Moduls)

.htaccess-Datei-Upload ist eine Funktion, die auf dem Webserver mit konfiguriert werden kann. htaccess-Dateien zum Erreichen von JPG-, PNG- und anderen Suffixen werden als PHP-Dateianalyseprozess verwendet.

.htaccess-Dateien (verteilte Konfigurationsdateien) bieten eine Möglichkeit, Konfigurationsänderungen pro Verzeichnis vorzunehmen. Eine Datei, die eine oder mehrere Konfigurationsanweisungen enthält, wird in einem bestimmten Dokumentverzeichnis abgelegt, und die Anweisungen in der Datei gelten für dieses Verzeichnis und alle seine Unterverzeichnisse. .htaccess ist eine Konfigurationsdatei des Webservers. Mit der .htaccess-Datei können Sie Konfigurationen wie die Parsing-Methode und die Umleitung von Definitionsdateien im Webserver implementieren.

Bypass-Methode: Laden Sie zunächst die 1.htaccess-Datei hoch. 2. Laden Sie das Bild erneut hoch.

2.1.3 Leerzeichenumgehung

Bypass-Methode: Fügen Sie nach dem Dateisuffixnamen im Datenpaket ein Leerzeichen hinzu, um eine Umgehung zu erreichen.

2.1.4. Bypass

Bypass-Methode: Fügen Sie ähnlich wie bei der Space-Bypass-Methode ein . nach dem Dateisuffixnamen im Datenpaket hinzu, um eine Umgehung zu erreichen.

2.1.5::$Datenumgehung

Dies ist ein für Windows einzigartiges Protokoll. Wenn in Windows der Dateiname + „::$DATA“ verwendet wird, werden die Daten nach ::$DATA behandelt Bei der Verarbeitung eines Dateistreams wird der Suffixname nicht erkannt und der Dateiname vor ::$DATA wird beibehalten. Der Zweck besteht nicht darin, den Suffixnamen zu überprüfen.

2.1.6 Schleifenfilterung

Bypass: Der Code ersetzt PHP in der Zeichenfolge durch nichts.

Zum Beispiel: a.pphphp wird zu ->a.

2.1.7 Whitelist: Löschen Sie das Formatsuffix, das hochgeladen werden kann (sicherer)

%00-Trunkierung, 0x00-Trunkierung (basierend auf dem Prinzip der Adresse, Daten hinter der Datei abschneiden) 00 Kürzungsumgehung kann nur die Front-End-Überprüfung umgehen.

Der Hauptgrund für die Kürzung ist die Existenz des Zeichens %00, wenn PHP

Bypass-Methode (Pfad%00-Kürzung):

Ändern Sie test in test.php%00aaa, 1.php in 1.jpg, damit die Überprüfungsfunktion übergeben werden kann.

    Der %00 in test.php%00aaa ist URL-codiert. Wählen Sie %00 und wählen Sie den Befehl [Convertselection], wählen Sie den Befehl [URL] und dann den Befehl [URL-decode] zur Codierung.

Eine kurze Diskussion über Methoden zum Hochladen von Dateien zum Erhalten von Berechtigungen

3. Dateitypüberprüfung

3.1 Datei-Header-Erkennung: Datei-Header-Inhaltsinformationen (z. B. gif89a)

Verschiedene Dateien haben spezifische Datei-Header-Formate, Entwicklung Der Autor Erkennt den Dateityp durch Überprüfen des Dateiheaders der hochgeladenen Datei. Diese Erkennungsmethode kann jedoch auch umgangen werden. Solange der entsprechende Dateiheader zum Header der Trojaner-Datei hinzugefügt wird, kann die Erkennung umgangen werden, ohne den normalen Betrieb zu beeinträchtigen der Trojaner-Datei.

Gemeinsame Dateiheader sind wie folgt:

JPEG 0xFFD8FF

PNG0 x89504E470D0A1A0A

GIF. 4 7 49 4638 39 61 ( GIF89a )

Bypass-Methode:

  • Ändern Sie die Header-Informationen, um eine Täuschung zu erreichen, z. B. das Hinzufügen des Datei-Headers der Bilddatei zur Header-Datei des Trojaners um die Erkennung zu umgehen.

GIF89a

?>

#🎜🎜 #
    Machen Sie ein Bildpferd
Fügen Sie einen Satz Trojan direkt in das Bild ein und laden Sie ihn hoch. ——Verwenden Sie das Prinzip der Dateieinbindung.

Verwenden Sie den Befehl cmd, um ein normales Bild 1.jpg und eine a.txt-Datei mit einem Trojaner-Satz zu kombinieren, um eine neue test.php-Trojanerdatei zu erstellen.

cmd-Befehl: 1.jpg/b+a.txt test.php kopieren.

3.2 Content-Type-Erkennung

Content-Type wird verwendet, um den Typ von Netzwerkdateien und die Kodierung von Webseiten zu definieren, und wird verwendet, um dem Dateiempfänger mitzuteilen, in was Formular und welche Codierung es liest. Holen Sie sich diese Datei. Unterschiedliche Dateien entsprechen unterschiedlichen Inhaltstypen. Der Inhaltstyp von JPG-Dateien ist beispielsweise image/jpeg und der Inhaltstyp von PHP-Dateien ist application/octet-stream. Content-Type befindet sich im Anforderungsheader des Datenpakets. Entwickler verwenden den Content-Type-Typ, um zu bestimmen, ob die Datei hochgeladen werden darf.

Bypass: Der Typ des Inhaltstyps kann durch Erfassen des Pakets manipuliert werden, sodass der Inhaltstyp des Datenpakets durch Erfassen des Pakets geändert werden kann, um die Beurteilung des Inhaltstyps zu umgehen.

MIME: Sie können den Dateisuffixnamen erraten, indem Sie den Typ beurteilen, und das Paketerfassungstool verwenden, um den Inhaltstyp zu manipulieren, z. B. durch Ändern in Bild/PJPEG, Bild/JPEG, Bild /gif, image/png Einer von ihnen kann die Filterung umgehen.

4. Inhalt und andere

4.1 Logische Sicherheit: bedingter Wettbewerb (entspricht Systembesetzung)

Definition: Rennbedingungen beziehen sich auf mehrere Threads Beim gleichzeitigen Zugriff auf denselben gemeinsam genutzten Code, dieselben Variablen, Dateien usw. ohne Sperr- oder Synchronisierungsvorgänge hängen die laufenden Ergebnisse von der Reihenfolge ab, in der verschiedene Threads auf Daten zugreifen. Laden Sie die Datei zuerst auf den Server hoch, und der Server entscheidet, ob das Bild gemäß den Regeln gespeichert oder gelöscht werden soll. Die Sicherheitslücke besteht darin, dass die Datei vor dem Speichern auf dem Server nicht auf Rechtmäßigkeit überprüft wird Aufgrund der Race-Condition-Sicherheitslücke wird die Datei übergeben. Laden Sie einen Trojaner mit der Funktion zum Schreiben von Dateien hoch und greifen Sie auf den hochgeladenen Trojaner zu, bevor Sie ihn löschen, um einen neuen Trojaner zu schreiben.

Bypass: Nach dem Hochladen der Datei auf den Server greifen wir weiterhin auf den Dateipfad zu, um den Zweck des Hochladens der Webshell durch Senden von Anfragen zu erreichen Durch das kontinuierliche Hochladen von Inhalten wie diesem wird eine neue Trojaner-Datei generiert und dann eine weitere Anfrage gesendet, um kontinuierlich auf diese Datei zuzugreifen. Wenn der Race-Condition-Exploit erfolgreich ist, wird ein neuer Trojaner generiert.

4.2 Verzeichnisbenennung

Bypass: Durch Hinzufügen des Suffixes / kann der Server die Datei als Ordner erkennen, um den Zweck des Hochladens zu erreichen, z. B. -x.php /.#🎜 🎜#

5. Andere Schwachstellen

Skriptfunktionsschwachstelle-cve

CVE-2017-12615

CVE- 2015-5254# 🎜🎜#

CVE-2019-2618

......

Es gibt Online-Tutorials zum Ausnutzen dieser Schwachstellen Meister können sich das Material ansehen.

6. Schwachstelle beim Parsen von Middleware

6.1 Schwachstelle beim Parsen von IIS 6.0+

Beurteilen Sie schnell die Schwachstelle beim Parsen, /.php, um zu sehen, ob sie verstümmelt ist Code, wenn er vorhanden ist, existiert er nicht, wenn er nicht existiert.

6.1.1 Als Ordner ausführen

Normaler Dateiname: image/aa.jpg.

Bypass: image.asp/aa.jpg aa.jpg wird als asp analysiert.

6.1.2 Als Datei ausführen

Normaler Dateiname: image.jpg.

Bypass: image.asp;.jpg oder xxx.asp;xxx.jpg Diese Datei wird als ASP ausgeführt.

asp kann in PHP geändert werden. Wenn Sie PHP ändern, kann es als PHP ausgeführt werden.

7.WAF-Bypass

Um WAF zu umgehen, müssen wir wissen, welche Parameter geändert werden können, wie zum Beispiel:

Inhalt -Disposition: grundsätzlich veränderbar.

    Name: Formularparameterwert, kann nicht geändert werden.
  • Dateiname: Dateiname, kann geändert werden.
  • Content-Type (eigener Dateityp): Datei-MIME, entsprechend ändern.
  • Der Kern der WAF-Umgehung besteht darin, den Test nach dem Parameternamen ständig zu ändern, der geändert werden kann, um zu versuchen, ihn zu umgehen.
  • Gemeinsame Umgehungsmethoden:
7.1 Datenüberlauf (Junk-Datenbefüllung)

Verwenden Sie die WAF-Erkennungsgrenze, um eine große Menge hinzuzufügen von Junk-Daten, sodass diese nicht abgeglichen werden können, ähnlich wie bei einer Überlauf-Schwachstelle. Denken Sie daran, Interferenzdaten zwischen Junk-Daten und Parametern hinzuzufügen, da das Datenpaket sonst einen Fehler meldet.

7.2 Symbolmutation ('";)

Nutzung von Schwachstellen in der Programmentwicklung, um Symbole in den Upload-Parametern im Datenpaket zu ersetzen, hinzuzufügen und zu löschen, um den Zweck des Hochladens zu erreichen . Zum Beispiel

Zum Beispiel x.jpg;.php Das Semikolon stellt das Ende eines Datenelements dar.

7.3 Datenkürzung (%00; Zeilenumbruch)

Fügen Sie nach dem Dateisuffixnamen x.php%00.jpg eine %00-Kürzung (Leerzeichen) hinzu.

Zeilenumbruch (ähnlich n im Programm) ähnelt der Datenblockübertragung, wie zum Beispiel:

  • x
  • p# 🎜🎜#
  • h
  • p
Das Paket identifiziert tatsächlich x.npnhnp.

7.4 Wiederholte Daten

entspricht der rekursiven Schleife in der Funktion. Das Prinzip, Parameter mehrmals in das Datenpaket zu schreiben, ist den Mülldaten sehr ähnlich.

8. Verteidigung

    Bereitstellen von Sicherheitsprodukten wie Pagode und WAF.
  • Führen Sie strenge Mehrfachüberprüfungen für hochgeladene Inhalte durch.
  • Führen Sie eine Integritätsprüfung des Dateiinhalts durch.

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über Methoden zum Hochladen von Dateien zum Erhalten von Berechtigungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage