Ausbilder: Lassen Sie uns darüber sprechen,
wie wir diese Sicherheitsanfälligkeiten jetzt verhindern können.
Das erste ist, dass viele dieser
Sicherheitslücken aufgrund der von ihnen bereitgestellten Funktionalität bestehen.
Zum Beispiel, das Datei-Upload-Problem, das wir hatten,
erlaubt es dem Benutzer, jede Dateierweiterung und jeden Dateityp
hochzuladen. Dies sollte nicht passieren. Es sollte
keine Möglichkeit für Benutzer geben, Dateien hochzuladen,
die sie wollen.
Wenn Sie möchten, dass sie ein Bild hochladen, stellen
Sie sicher, dass sie das Bild hochladen, und
überprüfen Sie die Dateitypen.
Wenn Sie erwarten, dass sie einen Song, eine MP # -Datei, hochladen,
stellen Sie sicher, dass es sich um eine Mediendatei handelt,
keine PHP-Datei oder ausführbaren Code.
Normalerweise sollten Sie Benutzern
niemals erlauben, ausführbare Dateien hochzuladen.
Filter können verwendet werden, um zu überprüfen, ob es
sich bei der hochzuladenden Datei
um eine JPEG-Datei oder eine andere handelt, um die Erweiterung zu überprüfen.
Dies ist jedoch
keine gute Methode. Am besten überprüfen Sie den Dateityp und
stellen sicher, dass es sich bei dem Dateityp um ein Bild oder eine
Mediendatei handelt, anstatt die Erweiterung zu
überprüfen, da dies ebenfalls umgangen werden kann.
Die zweite Art von Sicherheitslücken, die
wir untersucht haben, waren die Sicherheitslücken bei der Codeausführung.
Bei diesen Exploits konnten wir jeden gewünschten Code auf
dem Zielcomputer ausführen.
Auch hier sollte diese Funktionalität
vermieden werden. Sie sollten vermeiden, dass Benutzer Code auf
Ihrem Server ausführen.
Vermeiden Sie alle diese Funktionen,
z. B. das
Durchreichen von var, und alle diese Funktionen, mit
denen ein Benutzer Betriebssystemcode auf dem Server ausführen kann.
Wenn Sie unbedingt so etwas verwenden mussten,
stellen Sie sicher, dass Sie die Eingabe analysieren, bevor Sie sie ausführen.
In dem Beispiel haben wir zum Beispiel gesehen, wo
der Code einen Ping ausführte, und es wird alles gepingt, was wir in
das Textfeld eingegeben haben.
Ich füge hier / $ textbox ein, um zu zeigen, dass
dies die Eingabe ist, die wir in das Textfeld eingeben.
So sieht das Programm eigentlich aus,
wenn es zu kompliziert aussieht. Vergiss es.
Wir sprechen hier nur über das Konzept.
Also werden wir hier darüber reden.
Nehmen wir zum Beispiel an, Sie
haben eine normale IP-Adresse
eingegeben und dann das Semikolon und dann einen Befehl,
den wir ausführen wollten, zum Beispiel ls -la.
Das Problem dabei ist, dass die Webanwendung verwendet
wird, um dies so zu nehmen, es zu kopieren und hier auszuführen.
Wenn Sie diesen Befehl ausführen, wird
zuerst der Ping-Befehl und dann der Befehl ls -la ausgeführt,
den wir wollten.
Was Sie tun müssen, ist zum Beispiel, wenn Sie es tun
mussten, was ich rate, ist, dass Sie diese Funktionen einfach nicht verwenden.
Wenn Sie eine Funktion wie diese verwenden mussten, müssen
Sie überprüfen, ob die Eingabe Ihren Erwartungen entspricht. Sie erwarten
beispielsweise
eine IP-Adresse und nichts anderes, sodass Sie
jetzt mit Regex sicherstellen können, dass ich Ich
werde nicht über Regex sprechen oder was
Regex ist. Regex ist
im Grunde eine Regel, die
sicherstellt, dass die Eingabe im
folgenden Format aussieht.
Es braucht also eine Ziffer, eine
Ziffer, eine Ziffer, eine Ziffer, eine Ziffer, eine Ziffer, eine Ziffer, eine Ziffer,
eine Ziffer, eine Ziffer, eine Ziffer, eine Ziffer,
eine Ziffer, eine Ziffer, eine Ziffer, eine Ziffer.
Sie können auch sicherstellen, dass es
keine Semikolons und keine Leerzeichen
gibt, sodass alles als eine Sache hereinkommt
und dann ausgeführt wird.
Auch dies ist eine Möglichkeit, die Sicherheit zu erhöhen.
Das Beste ist jedoch, diese Funktionen zu umgehen.
Die dritte Art von Sicherheitslücke, die wir
uns angesehen haben, war die Einbeziehung von Dateien, und wir
haben uns zwei Arten angesehen.
Die lokale
Dateieinschließung, mit der wir alle Dateien auf
dem System einschließen und
anschließend Dateien lesen konnten, die eine Sicherheitsanfälligkeit bezüglich der
Offenlegung von Dateien auslösen. Anschließend konnten Sie
alle Dateien auf dem Server lesen.
Anschließend haben wir uns
die Remote-Dateieinschließung angesehen Sehr gefährlich, wodurch wir alle Dateien
von jedem Webserver einbinden konnten, sodass wir PHP-Shells einbinden und
dann eine Verbindung vom Zielcomputer erhalten konnten.
Um dies zu verhindern,
stellen Sie zunächst sicher, dass Sie die Aufnahme von Remotedateien verhindern.
Nur für den Fall, dass
etwas schief geht, können Benutzer keine Dateien von außerhalb Ihres Servers
einbeziehen, und Sie können dies auf
dieselbe Weise tun, wie
wir es mit PHP ini aktiviert haben,
indem Sie allow_url_fopen und allow_url-include deaktivieren.
Und wenn wir hier zu unserer Metasploitable
gehen, zeige ich es Ihnen
ganz schnell. Wenn wir also sudo nano machen, dann ist das der Texteditor / etc
/ PHP / cgi / php. Ini, die gleiche Datei, die
wir verwendet
haben, ist die Datei für die PHP-Einstellungen.
Wenn Sie diese
Datei öffnen und jetzt Control +
W ausführen, müssen Sie nach allow_url suchen.
Und Sie möchten sicherstellen, dass
allow_url_fopen auf Off
und allow_url_include ebenfalls auf Off gesetzt ist.
Strg + X + Y und trete ein und das
wird es für dich speichern.
Die andere Möglichkeit, diese
Exploits zu verhindern, besteht in der Verwendung der
statischen Dateieinschließung. Statt der dynamischen Dateieinschließung, die
wir gesehen haben, können Sie die Dateien, die Sie in
den Code einschließen möchten, hart
codieren und nicht mit GET oder POST abrufen.
In den Beispielen für Sicherheitsanfälligkeiten wird
beispielsweise eine Seite mit dem Namen
"Seite" oder "Index" angezeigt. php.
Und dann dieser Index. php nimmt einen Parameter namens page und
dann eine andere Seite,
zum Beispiel news. php.
Und es enthält diese Nachrichten. PHP im Code.
Wie sieht der Code aus?
Im PHP-Code sehen Sie so etwas wie include.
Also, was dies im
Grunde tun wird, und das sieht so aus, ich
glaube, was dies tun wird,
es enthält alles, was nach dem Seitenparameter kommt.
Der Code nimmt also dynamisch alles auf, was nach dem Seitenparameter eingeht,
und fügt es in die aktuelle Seite ein, sodass es
sich im Index befindet. PHP-Seite.
Okay, das
ist sehr schlecht, denn selbst wenn
es nicht GET ist,
wird manchmal POST verwendet und
in POST wird dies nicht angezeigt, sodass es veröffentlicht
wird, aber Sie können einen
Proxy wie Burp-Proxy verwenden, und
das sieht dann so aus Sie
können es so ändern, dass es alle gewünschten Elemente
enthält. Anschließend wird es auf der Seite angezeigt.
Was wir wirklich tun möchten, ist, dass der Benutzer nicht mit dem manipulieren kann, was
aufgenommen werden soll. Wenn Sie also eine Seite mit dem Namen
news aufnehmen möchten, müssen Sie dies tun. php, füge es einfach in
dieses ein, ohne dem Benutzer
die Möglichkeit zu geben, es
zu ändern.
Ich weiß, Sie werden
Ihren Code so programmieren, dass er einfach so aussieht, aber die
Benutzer, wir wissen, wir haben gesehen, wie Benutzer
damit spielen können und bringen ihn
dazu, alles aufzunehmen, was sie wollen.
Der beste Weg, dies zu tun, besteht
darin, die Seite einzuschließen. PHP,
so dass Ihr Code keine Variablen verwendet.
Es ist hart codiert, es kann Ihren Code verlängern,
aber es ist viel sicherer.