1. Die Beziehung zwischen Datei-Upload-Schwachstelle und WebShell
Datei-Upload-Schwachstelle bedeutet, dass ein Netzwerkangreifer eine ausführbare Datei auf den Server hochlädt und diese ausführt. Bei den hier hochgeladenen Dateien kann es sich um Trojaner, Viren, bösartige Skripte oder WebShell usw. handeln. Diese Angriffsmethode ist die direkteste und effektivste. Die technische Schwelle zur Ausnutzung einiger Schwachstellen beim Hochladen von Dateien ist sehr niedrig, sodass sie von Angreifern leicht implementiert werden kann.
Die Sicherheitsanfälligkeit beim Hochladen von Dateien selbst ist eine sehr schädliche Sicherheitsanfälligkeit, und WebShell wird die Nutzung dieser Sicherheitsanfälligkeit unendlich erweitern. Nachdem die meisten Upload-Schwachstellen ausgenutzt wurden, hinterlässt der Angreifer eine WebShell, um den späteren Zugriff auf das System zu erleichtern. Nachdem der Angreifer eine WebShell auf dem betroffenen System platziert oder eingefügt hat, kann er die WebShell verwenden, um im Dienst einfacher und verdeckt zu tun, was er will.
Hier ist zu beachten, dass die Ausnutzung von Upload-Schwachstellen häufig WebShell nutzt und die Implementierung von WebShell weit mehr als nur das Hochladen von Dateien umfasst.
1 Einführung in Webshell
WebShell ist eine Befehlsausführungsumgebung, die in Form von Webdateien wie ASP, PHP, JSP oder CGI vorliegt wird als Web-Hintertür bezeichnet. Nachdem ein Angreifer in eine Website eingedrungen ist, mischt er diese ASP- oder PHP-Backdoor-Dateien normalerweise mit normalen Webseitendateien im Webverzeichnis des Website-Servers und greift dann über einen Browser auf diese Backdoors zu und erhält eine Befehlsausführungsumgebung zur Steuerung der Website. Der Zweck des Servers (kann Dateien hochladen, herunterladen oder ändern, die Datenbank betreiben, beliebige Befehle ausführen usw.).
Die WebShell-Hintertür ist stark verborgen und kann beim Zugriff auf WebShell keine Systemprotokolle hinterlassen, sondern nur einige Datenübermittlungsdatensätze in den Webprotokollen der Website Es wurden Spuren von Einbrüchen gefunden. Angreifer können WebShell in normalen Dateien verstecken und die Dateizeit ändern, um die Verheimlichung zu verbessern. Sie können auch einige Funktionen verwenden, um WebShell zu kodieren oder zu verbinden, um einer Erkennung zu entgehen. Darüber hinaus kann die Übermittlung einer leistungsstärkeren Malware über ein Ein-Satz-Trojaner-Pony die Erkennung durch die Anwendung selbst leichter überstehen. eval($ _POST[ a]);etc.
2 Prinzip der Datei-Upload-Sicherheitslücke
Die meisten Websites und Anwendungssysteme verfügen über Upload-Funktionen. Einige Implementierungscodes für Datei-Upload-Funktionen schränken die von Benutzern hochgeladenen Dateisuffixe nicht streng ein Der Dateityp ermöglicht es einem Angreifer, beliebige PHP-Dateien in ein über das Internet zugängliches Verzeichnis hochzuladen und diese Dateien an den PHP-Interpreter zu übergeben, wodurch beliebige PHP-Skripte auf dem Remote-Server ausgeführt werden.
Wenn im System eine Sicherheitslücke beim Hochladen von Dateien besteht, kann der Angreifer Viren, Trojaner, WebShell, andere schädliche Skripte oder Bilder mit Skripten auf den Server hochladen. Diese Dateien erleichtern dem Angreifer die nachfolgenden Angriffe. Abhängig von der spezifischen Schwachstelle kann es sich bei den hier hochgeladenen Skripten um PHP-, ASP- und JSP-Skripte mit normalen Suffixen oder solche Skripttypen mit manipulierten Suffixen handeln.
Wenn die hochgeladene Datei ein Virus oder Trojaner ist, wird sie hauptsächlich dazu verwendet, Benutzer oder Administratoren dazu zu verleiten, sie herunterzuladen und auszuführen oder sie direkt automatisch auszuführen ; 🎜>
Die hochgeladene Datei istWebShell, Angreifer können Befehle ausführen und den Server kontrollieren über diese Web-Hintertüren
Dateien hochladen, dieanders sind bösartige Skripte, Angreifer Skripte können direkt ausgeführt werden, um Angriffe durchzuführenWenn es sich bei der hochgeladenen Datei um ein
bösartiges Bildhandelt, kann das Bild sein Wenn diese Bilder geladen oder angeklickt werden, wird das Skript stillschweigend ausgeführt , wenn es sich bei der hochgeladenen Datei
um ein als normales Suffix getarntes Skript handelt> kann die Schwachstelle Local File Include nutzen, um die Datei auszuführen. Benennen Sie beispielsweise die Datei bad.php in bad.doc um, laden Sie sie auf den Server hoch und fügen Sie sie dann über PHPs include, include_once, require, require_once und andere Funktionen ein und führen Sie sie aus. Es gibt drei Hauptgründe, warum schädliche Dateien hier hochgeladen werden:
Fehlende Überprüfung beim Hochladen von Dateien. Es wird keine Dateiformatprüfung durchgeführt. Einige Anwendungen werden nur auf der Clientseite überprüft, aber in den Augen professioneller Angreifer sind fast alle clientseitigen Überprüfungen gleichbedeutend mit keiner Überprüfung. Angreifer können clientseitige Überprüfungen mithilfe von Breakpoint-Upload-Tools wie NC und Fiddler problemlos umgehen. Obwohl einige Anwendungen eine Blacklist-Prüfung auf der Serverseite durchführen, ignorieren sie möglicherweise die Groß-/Kleinschreibung. Beispielsweise kann die Änderung von .php in .Php die Prüfung auf der Serverseite umgehen, aber das Kürzungszeichen %00 ignorieren Ermöglicht nur das Hochladen von JPG-Bildern, dann kann der Dateiname als xxx.php%00.jpg erstellt werden, wobei %00 das hexadezimale .jpg-Zeichen ist, was die Erkennung des Upload-Dateityps durch die Anwendung täuscht Durch die Kürzung des %00-Zeichens wird die endgültig hochgeladene Datei zu xxx.php.
Unsachgemäße Handhabung der Änderung des Dateinamens nach dem Hochladen. Einige Anwendungen verfügen über eine vollständige Blacklist- und Whitelist-Filterung auf der Serverseite, gehen jedoch beim Ändern der Dateinamen hochgeladener Dateien sehr vorsichtig vor, sodass Benutzer Dateisuffixe ändern können. Wenn die Anwendung nur .doc-Dateien hochladen kann, kann der Angreifer zunächst das Suffix der .php-Datei in .doc ändern und dann nach erfolgreichem Hochladen das Suffix wieder in .php ändern, wenn er den Dateinamen ändert.
Wird eingeführt, wenn Plug-ins von Drittanbietern verwendet werden. Viele Anwendungen verwenden Plug-Ins von Drittanbietern mit Datei-Upload-Funktionen. Die Datei-Upload-Funktionen dieser Plug-Ins können Lücken aufweisen, und Angreifer können diese Lücken für Datei-Upload-Angriffe nutzen. Beispielsweise verfügt die berühmte Blog-Plattform WordPress über eine Fülle von Plug-Ins, und jedes Jahr werden in diesen Plug-Ins zahlreiche Sicherheitslücken beim Hochladen von Dateien entdeckt.
3 Beispiele für Datei-Upload-Angriffe
Wie oben erwähnt, gibt es viele Gründe für Sicherheitslücken beim Datei-Upload. Nehmen wir das zweite als Beispiel und wählen wir die LibrettoCMS-Datei aus. Laden Sie die Schwachstelle hoch (die Nummer der Schwachstellen-Exploit-Datenbank lautet 60560), um den gesamten Schwachstellen-Ausnutzungsprozess im Detail zu erläutern.
Libretto ist ein Content-Management-System, das mithilfe der PHP-Sprache und der MySQL-Sprache entwickelt wurde. Mit LibrettoCMS Version 2.2.2 können nicht verifizierte Benutzer Dateien hochladen und den Suffixnamen hochgeladener Dateien ändern. Obwohl das System Benutzern das Hochladen von Dateien nur im DOC- und PDF-Format vorschreibt, ist beim Ändern des Dateinamens ein Verarbeitungsfehler aufgetreten, der dazu führte, dass der Benutzer das Dateisuffix ändern konnte. Der Angreifer kann das Suffix der schädlichen Datei in „doc“ oder „pdf“ ändern und das Suffix dann in „php“ ändern, nachdem der Upload erfolgreich ausgeführt wurde.
l Laden Sie die WebShell mit dem Dokumentsuffix hoch.
Besuchen Sie die Dateiverwaltungsseite/plugins/pgrfilemanager/PGRFileManager.php des Systems, laden Sie eine normale Dokumentdatei hoch und finden Sie sie kann erfolgreich hochgeladen werden. Um eine WebShell-Backdoor in PHP-Sprache zu schreiben, können Sie auch eine vorhandene WebShell aus dem Internet herunterladen und das Suffix der WebShell-Datei in doc ändern. Ändern Sie hier die myshell.php-Backdoor in myshell.doc.
Besuchen Sie nach der Vorbereitung der WebShell die Dateiverwaltungsseite PGRFileManager.php, um myshell.doc auf den Server hochzuladen. Wie in Abbildung 1 gezeigt, wurde myshell mit dem Suffix doc erfolgreich hochgeladen. Derzeit kann Myshell, der über den Browser auf das Dokumentformat zugreift, nicht normal ausgeführt werden.
Abbildung 1 mybshell.doc erfolgreich hochgeladen
l Ändern Sie das WebShell-Suffix in php
In der Dateiverwaltung Klicken Sie mit der rechten Maustaste auf „mybshell.doc“ auf der Seite und wählen Sie „Umbenennen“, um die Seite zum Ändern des Dateinamens aufzurufen. Ändern Sie „mybshell.doc“ in „mybshell.php“ und klicken Sie auf die Schaltfläche „OK“, um das Änderungsergebnis zu senden (wie in Abbildung 2 dargestellt). Zu diesem Zeitpunkt wurde das Suffix der Myshell-Datei erfolgreich in PHP geändert. Aufgrund der Anwendungscodierungsimplementierung kann die Dateiverwaltungsseite die Datei MyShell.php nicht lesen, wir können die geänderte Datei jedoch im Datei-Upload-Verzeichnis sehen Systemserver (wie in der Abbildung gezeigt) in 3).
Abbildung 2 Ändern Sie mybshell.doc in mybshell.php
Abbildung 3 Das Myshell-Suffix im Server wurde in PHP geändert
l Webshell ausführen
Zu diesem Zeitpunkt hat die WebShell im Server-Upload-Verzeichnis das PHP-Suffix und die Serverumgebung kann normal analysiert werden Auf die Datei kann direkt über den Browser zugegriffen werden: http://192.168.20.174/vlun/Mylibretto/userfiles/myshell.php. Geben Sie das in WebShell festgelegte Passwort ein, um sich bei der WebShell-Seite anzumelden (wie gezeigt). in Abbildung 4). Aus der Abbildung können wir ersehen, dass der Angreifer nur über diese WebShell-Datei Dateiverwaltung und Datenbankverwaltung durchführen, Systembefehle ausführen und beliebigen PHP-Code auf dem Server ausführen kann. Mit dieser WebShell können Angreifer andere WebShell-Dateien in tieferen Verzeichnissen ablegen oder PHP-Backdoor-Code direkt zu selten verwendeten PHP-Dateien hinzufügen, die sich bereits im System befinden, um die Entdeckung durch Systemadministratoren zu verhindern.
Abbildung 4 Erfolgreicher Zugriff auf die WebShell-Hintertür
4 Schutz vor Sicherheitslücken beim Hochladen von Dateien
Zunächst die hochgeladene Datei Auf die Erklärung und Ausführung des Webcontainers kann zugegriffen werden. Daher muss das Verzeichnis, in das die Datei hochgeladen wird, der vom Webcontainer abgedeckte Pfad sein.
Zweitens können Benutzer über das Internet auf diese Datei zugreifen. Wenn die Datei hochgeladen wird, der Benutzer jedoch nicht über das Web darauf zugreifen kann oder den Webcontainer nicht dazu bringen kann, das Skript zu interpretieren, kann dies nicht als Sicherheitslücke bezeichnet werden.
Wenn schließlich der Inhalt der von Benutzern hochgeladenen Dateien durch Sicherheitsüberprüfungen, Formatierung, Bildkomprimierung und andere Funktionen verändert wird, kann dies ebenfalls zu erfolglosen Angriffen führen.
Ein paar gängige Methoden, um Schwachstellen beim Hochladen von Dateien zu verhindern.
1. Das Verzeichnis für den Datei-Upload ist auf nicht ausführbar eingestellt
Solange der Webcontainer die Dateien im Verzeichnis nicht analysieren kann, selbst wenn der Angreifer sie hochlädt Wenn Sie die Skriptdatei ändern, wird der Server selbst nicht beeinträchtigt, daher ist dies von entscheidender Bedeutung.
2. Bestimmen Sie den Dateityp
Bei der Bestimmung des Dateityps können Sie MIME-Typ, Suffixprüfung und andere Methoden in Kombination verwenden. Bei der Dateitypprüfung wird die Whitelist-Methode dringend empfohlen. Die Blacklist-Methode hat sich unzählige Male als unzuverlässig erwiesen. Darüber hinaus können Sie bei der Bildverarbeitung die Komprimierungsfunktion oder die Größenänderungsfunktion verwenden, um den möglicherweise im Bild enthaltenen HTML-Code während der Bildverarbeitung zu zerstören.
3. Verwenden Sie Zufallszahlen, um den Dateinamen und den Dateipfad neu zu schreiben
Wenn Sie beim Hochladen einer Datei Code ausführen möchten, muss der Benutzer darauf zugreifen können die Datei. In einigen Umgebungen können Benutzer zwar hochladen, aber nicht darauf zugreifen. Wenn Zufallszahlen zum Umschreiben von Dateinamen und Pfaden verwendet werden, erhöhen sich die Kosten des Angriffs erheblich. Als nächstes können Dateien wie „shell.php.rar.rar“ und „crossdomain.xml“ aufgrund der Umbenennung nicht angegriffen werden.
4. Legen Sie den Domänennamen des Dateiservers separat fest
Aufgrund der Same-Origin-Richtlinie des Browsers sind eine Reihe clientseitiger Angriffe wirkungslos B. das Hochladen von crossdomain.xml, das Hochladen von Problemen wie XSS-Exploits, die Javascript enthalten, werden behoben.
l Verteidigung während der Systementwicklungsphase
Systementwickler sollten ein starkes Sicherheitsbewusstsein haben, insbesondere wenn sie Systeme mit PHP-Sprache entwickeln. Die Systemsicherheit sollte während der Systementwicklungsphase umfassend berücksichtigt werden. Bei Schwachstellen beim Hochladen von Dateien ist es am besten, die von Benutzern sowohl auf der Client- als auch auf der Serverseite hochgeladenen Dateinamen und Dateipfade genau zu überprüfen. Zwar können clientseitige Prüfungen von geschickten Angreifern mithilfe von Tools umgangen werden, sie können jedoch auch einige grundlegende Tests blockieren. Für die serverseitige Überprüfung ist es am besten, die Whitelist-Filtermethode zu verwenden, um Umgehungen wie Groß- und Kleinschreibung zu verhindern. Gleichzeitig muss auch der Inhaltstyp des HTTP-Headers erkannt werden Die Größe der hochgeladenen Datei muss ebenfalls überprüft werden.
l Verteidigung während der Systembetriebsphase
Nachdem das System online gegangen ist, sollte das Betriebs- und Wartungspersonal ein starkes Sicherheitsgefühl haben und mehrere Tools zur Sicherheitserkennung aktiv nutzen Scannen Sie das System, entdecken Sie potenzielle Schwachstellen und beheben Sie diese zeitnah. Überprüfen Sie regelmäßig Systemprotokolle und Webserverprotokolle, um Spuren eines Einbruchs zu finden. Achten Sie regelmäßig auf die Aktualisierungen der im System verwendeten Plug-Ins von Drittanbietern. Wenn eine neue Version veröffentlicht wird, wird empfohlen, diese rechtzeitig zu aktualisieren sollte sofort repariert werden. Bei Websites, deren gesamte Website mit Open-Source-Code oder unter Verwendung von Online-Frameworks erstellt wurde, sollte besonderes Augenmerk auf die Selbstprüfung von Schwachstellen und Aktualisierungen von Softwareversionen und Patches gelegt werden. Die Upload-Funktion ist nicht erforderlich und kann direkt gelöscht werden. Zusätzlich zur Wartung des Systems selbst sollten die Ausführungsberechtigungen des Servers aus nicht erforderlichen allgemeinen Verzeichnissen entfernt werden und das Upload-Verzeichnis kann als schreibgeschützt konfiguriert werden.
l Verteidigung von Sicherheitsgeräten
Der Kern von Datei-Upload-Angriffen besteht darin, schädliche Dateien oder Skripte auf den Server hochzuladen, die vor allem durch Erkennung vor solchen Schwachstellen schützen das Upload- und Ausnutzungsverhalten von Schwachstellen und den Upload-Prozess schädlicher Dateien. Schädliche Dateien ändern sich ständig und es werden ständig Methoden zum Verstecken eingeführt. Normale Systemadministratoren können sich durch den Einsatz von Sicherheitsgeräten schützen. Die derzeit von der H3C Communications Company veröffentlichten Produkte der SecPath IPS-Serie werden seit langem zusammengestellt. Sie können nicht nur die Ausnutzung einer großen Anzahl von Datei-Upload-Schwachstellen im Netzwerk anhand des Verhaltens erkennen, sondern auch schädliche Dateien anhand des Inhalts identifizieren.
2. Fazit
Für Angreifer waren Datei-Upload-Schwachstellen schon immer eine wichtige Möglichkeit, an die Server-Shell zu gelangen. Für das Systemwartungspersonal besteht keine Notwendigkeit, näher auf den enormen Schaden einzugehen, der durch Datei-Upload-Schwachstellen entsteht. Aktives Lernen und ein tiefes Verständnis der relevanten Kenntnisse über Schwachstellen können ihnen helfen, solchen Angriffen gelassener entgegenzutreten
Empfohlenes Tutorial: PHP-Sicherheit und Schwachstellen
Das obige ist der detaillierte Inhalt vonAngriffe und Methoden zur Verhinderung von Schwachstellen beim Hochladen von Web-Sicherheitsdateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!