Abschnitte der Website
Die Wahl des Herausgebers:
- Betriebssystem-Dienstprogramme Systemprogramme. Sicherungs- und Wiederherstellungsprogramme
- Bezahlte und kostenlose Karaoke-Programme für Computer
- Die Hauptattraktionen von Teruel: Fotos und Beschreibungen
- Kostenlose Programme für Windows kostenlos herunterladen
- Vier Möglichkeiten zum Wiederherstellen von Desktop-Verknüpfungen
- Erstellen Sie mit jQuery eine Schaltfläche „Zurück nach oben“ oder „Nach oben scrollen“.
- Aufbau eines unglaublich einfachen Registrierungssystems in PHP und MySQL
- So entfernen Sie Quadrate in der Konsole in Skyrim
- So verkaufen Sie Steam-Konten unter modernen Bedingungen. Verkaufen Sie Steam-Konten mit cs
- Was tun, wenn der Yandex-Browser keine Webseiten öffnet?
Werbung
Amerika-Index-PHP-Benutzer. Aufbau eines unglaublich einfachen Registrierungssystems in PHP und MySQL |
Heute werfen wir einen Blick auf die Ausnutzung einer kritischen 1-Tages-Sicherheitslücke im beliebten CMS Joomla, die Ende Oktober im Internet explodierte. Wir werden über Schwachstellen mit Zahlen sprechen CVE-2016-8869, CVE-2016-8870 Und CVE-2016-9081. Alle drei stammen aus einem einzigen Codestück, das fünf lange Jahre lang in den Tiefen des Frameworks schmachtete und in den Startlöchern wartete, nur um sich dann zu befreien und Chaos, gehackte Websites und die Tränen unschuldiger Benutzer dieses Joomla mit sich zu bringen. Nur die tapfersten und mutigsten Entwickler, deren Augen vom Licht der Monitore gerötet waren und deren Tastaturen mit Brotkrümeln übersät waren, konnten sich den wütenden bösen Geistern entgegenstellen und ihre Köpfe auf den Altar der Korrekturen legen. WARNUNGAlle Informationen dienen ausschließlich Informationszwecken. Weder die Herausgeber noch der Autor sind für mögliche Schäden verantwortlich, die durch die Materialien dieses Artikels verursacht werden.Wo alles begannAm 6. Oktober 2016 erstellte Demis Palma ein Thema auf Stack Exchange, in dem er fragte: Warum gibt es in Joomla Version 3.6 eigentlich zwei Methoden zur Registrierung von Benutzern mit demselben Namen register()? Der erste befindet sich im UsersControllerRegistration-Controller und der zweite im UsersControllerUser-Controller. Damis wollte wissen, ob die Methode UsersControllerUser::register() irgendwo verwendet wurde oder ob es sich nur um einen evolutionären Anachronismus handelte, der von der alten Logik übrig geblieben war. Seine Sorge war, dass diese Methode, selbst wenn sie von keiner Ansicht verwendet wird, von einer gestalteten Abfrage aufgerufen werden kann. Darauf erhielt ich eine Antwort von einem Entwickler unter dem Spitznamen itoctopus, der bestätigte: Das Problem besteht tatsächlich. Und schickte einen Bericht an die Joomla-Entwickler. Dann entwickelten sich die Ereignisse am schnellsten. Am 18. Oktober akzeptierten die Joomla-Entwickler den Bericht von Damis, der zu diesem Zeitpunkt einen PoC entworfen hatte, der die Benutzerregistrierung ermöglichen würde. Er veröffentlichte auf seiner Website eine Notiz, in der er allgemein über das von ihm festgestellte Problem und seine Gedanken zu diesem Thema sprach. Am selben Tag wird eine neue Version von Joomla 3.6.3 veröffentlicht, die noch anfälligen Code enthält. Danach spinnt Davide Tampellini den Fehler so weit, dass kein einfacher Benutzer, sondern ein Administrator registriert wird. Und bereits am 21. Oktober erreicht das Joomla-Sicherheitsteam einen neuen Fall. Es ist bereits von zunehmenden Privilegien die Rede. Am selben Tag erscheint auf der Joomla-Website die Ankündigung, dass am Dienstag, 25. Oktober, die nächste Version mit der Seriennummer 3.6.3 veröffentlicht wird, die eine kritische Schwachstelle im Systemkernel behebt. 25. Oktober Das Joomla Security Strike Team findet das neueste Problem, das durch den von Damis entdeckten Code verursacht wurde. Dann wird ein Commit vom 21. Oktober mit dem unauffälligen Namen Prepare 3.6.4 Stable Release in den Hauptzweig des offiziellen Joomla-Repositorys gepusht, der den unglücklichen Fehler behebt. Nach der Veröffentlichung schließen sich zahlreiche Interessierte der Entwicklergemeinschaft an – sie beginnen, die Schwachstelle bekannt zu machen und Exploits vorzubereiten. Am 27. Oktober lädt der Forscher Harry Roberts einen vorgefertigten Exploit in das Xiphos Research-Repository hoch, der eine PHP-Datei auf einen Server mit einem anfälligen CMS hochladen kann. EinzelheitenNun, der Hintergrund ist vorbei, kommen wir zum interessantesten Teil – der Analyse der Schwachstelle. Ich habe Joomla 3.6.3 als Testversion installiert, daher sind alle Zeilennummern für diese Version relevant. Und alle Pfade zu den Dateien, die Sie unten sehen, werden relativ zum Stammverzeichnis des installierten CMS angegeben. Dank der Entdeckung von Damis Palma wissen wir, dass es zwei Methoden gibt, die die Benutzerregistrierung im System durchführen. Die erste wird vom CMS verwendet und befindet sich in der Datei /components/com_users/controllers/registration.php:108. Der zweite (den wir aufrufen müssen) befindet sich in /components/com_users/controllers/user.php:293. Schauen wir es uns genauer an. 286: /** 287: * Methode zum Registrieren eines Benutzers. 288: * 289: * @return boolean 290: * 291: * @since 1.6 292: */ 293: öffentliche Funktion register() 294: ( 295: JSession::checkToken("post") oder jexit(JText::_ ("JINVALID_TOKEN")); ... 300: // Formulardaten abrufen. . 315: $return = $model->validate($form, $data); 316: 317: // Auf Fehler prüfen. 319: ( ... 345: / / 346: $return = $model->register($data); Hier habe ich nur interessante Zeilen hinterlassen. Die Vollversion der anfälligen Methode kann im Joomla-Repository eingesehen werden. Lassen Sie uns herausfinden, was bei der normalen Benutzerregistrierung passiert: Welche Daten werden gesendet und wie werden sie verarbeitet? Wenn die Benutzerregistrierung in den Einstellungen aktiviert ist, finden Sie das Formular unter http://joomla.local/index.php/component/users/?view=registration. Eine legitime Benutzerregistrierungsanfrage sieht wie im folgenden Screenshot aus. Die Komponente com_users ist für die Arbeit mit Benutzern verantwortlich. Achten Sie auf den Aufgabenparameter in der Anfrage. Es hat das Format $controller.$method . Schauen wir uns die Dateistruktur an. Namen der Skripte im Ordner Controller entsprechen den Namen der aufgerufenen Controller. Da unsere Anfrage nun $controller = "registration" enthält, wird die Datei aufgerufen Registration.php und seine Methode register(). Achtung, Frage: Wie kann die Registrierungsverarbeitung an eine anfällige Stelle im Code übertragen werden? Sie haben es wahrscheinlich schon erraten. Die Namen der anfälligen und echten Methoden sind identisch (Register), wir müssen also nur den Namen des aufgerufenen Controllers ändern. Wo ist unser verwundbarer Controller? Genau, in der Akte user.php. Es stellt sich heraus $controller = "user" . Wenn wir alles zusammenfügen, erhalten wir task = user.register . Jetzt wird die Registrierungsanfrage mit der von uns benötigten Methode bearbeitet. Als Zweites müssen wir die Daten im richtigen Format senden. Hier ist alles einfach. Legitimate register() erwartet von uns ein Array namens jform , in dem wir Registrierungsdaten übergeben – Name, Login, Passwort, E-Mail (siehe Screenshot mit der Anfrage).
Unser Kunde erhält diese Daten von einem Array namens user.
Daher ändern wir die Namen aller Parameter in der Anfrage von jfrom in user . Unser dritter Schritt besteht darin, ein gültiges CSRF-Token zu finden, da ohne dieses keine Registrierung erfolgt.
Es sieht aus wie ein MD5-Hash und Sie können ihn beispielsweise dem Autorisierungsformular auf der Website /index.php/component/users/?view=login entnehmen. Jetzt können Sie Benutzer mit der gewünschten Methode erstellen. Wenn alles geklappt hat, dann herzlichen Glückwunsch – Sie haben gerade eine Schwachstelle ausgenutzt CVE-2016-8870„Fehlende Berechtigungsprüfung für die Registrierung neuer Benutzer.“ So sieht es in der „funktionierenden“ register()-Methode des UsersControllerRegistration-Controllers aus:
Und so in verwundbar:
Ja, auf keinen Fall. Um das zweite, viel schwerwiegendere Problem zu verstehen, senden wir die von uns erstellte Anfrage und sehen, wie sie in verschiedenen Teilen des Codes ausgeführt wird. Hier ist der Teil, der für die Validierung der vom Benutzer übermittelten Daten in der Worker-Methode verantwortlich ist: Die Fortsetzung steht nur Mitgliedern zur VerfügungOption 1: Treten Sie der „Site“-Community bei, um alle Materialien auf der Site zu lesenDurch die Mitgliedschaft in der Community innerhalb des angegebenen Zeitraums erhalten Sie Zugriff auf ALLE Hacker-Materialien, erhöhen Ihren persönlichen kumulativen Rabatt und können eine professionelle Xakep-Score-Bewertung erwerben! In der letzten Lektion haben wir herausgefunden, aus welchen Blöcken die Reisevorlage bestehen wird, damit wir uns an die Arbeit machen können. Erstellen wir zunächst zwei Ordner: Bilder – Dieser Ordner enthält alle Grafikdateien, die zum Entwerfen der Vorlage verwendet werden. Weil Wir haben noch keine Designentwicklungen, dann legen Sie eine beliebige Grafikdatei in diesem Ordner ab, sonst installiert Joomla die Vorlage nicht und gibt eine Fehlermeldung aus, wenn der Ordner leer ist. ACHTUNG: Der Ordner mit den Vorlagenbildern enthält keine Inhaltsgrafiken! css – dieser Ordner enthält Cascading Stylesheet-Dateien. Platzieren wir zunächst eine leere template.css-Datei darin, die verwendet wird, um den Site-Elementen unterschiedliche Designstile zuzuweisen. Als Nächstes können Sie mit der Erstellung der Hauptdatei index.php beginnen, die die visuelle Anordnung der Site-Elemente bestimmt und dem Joomla CMS mitteilt, in welchem Block verschiedene Komponenten und Module platziert werden sollen. Die Datei ist eine Kombination aus PHP und HTML. Ich verwende beim Schreiben von Code immer nur Macromedia Dreamweaver. Ein ausgezeichnetes Programm, ich kann es Anfängern wärmstens empfehlen, weil... Wenn Sie bei der Arbeit am Code einen Fehler gemacht haben, wird das Programm Ihren Fehler auf jeden Fall hervorheben. Auf der Seite finden Sie ein Tutorial für Macromedia Dreamweaver. Wenn Sie Websites entwickeln möchten, sollten Sie dieses Programm zumindest auf der Anfangsebene beherrschen, um Vorlagencodes fehlerfrei bearbeiten zu können. Die Positionierung von Seitenelementen (Blöcken) erfolgt mithilfe von HTML-Code. Wir verwenden insbesondere DIV-Tags. Aber die Art und Weise, wie unsere Website auf der Joomla-Engine funktionieren wird, d. h. Es wird dynamisch sein, dann müssen Sie auch die PHP-Sprache verwenden. Mit seiner Hilfe bestimmen wir, in welchen Blöcken sich die Positionen für die Ausgabe von Modulen befinden, wie diese Positionen heißen und ob die Blöcke zusammengeklappt werden oder nicht. Wir verbinden Stylesheets aus externen Dateien, die Inhaltssprache, legen fest, wie sich die Site-Größe ändert usw. index.phpDateikopf Der Dateikopf besteht aus mehreren Teilen. Der erste Teil des PHP-Header-Codes soll aus Sicherheitsgründen sicherstellen, dass nicht direkt auf die Datei zugegriffen wird. <
?php DOCTYPE ist ein sehr wichtiger Parameter, auf dessen Grundlage der Browser entscheidet, wie diese Seite gerendert und das CSS interpretiert wird. < ! DOCTYPE html PUBLIC "- / / W3C/ / DTD XHTML 1.0 Strict/ / EN"„http: // www.w3.org/ TR/ xhtml1/ DTD/ xhtml1- strict.dtd"> Der folgende Codeausschnitt ruft die installierte Sprache aus der globalen Konfiguration ab. < html xmlns= "http:// www.w3.org/ 1999/ xhtml" xml:lang= " < ?php echo $Das-> Sprache; ?> " lang= " < ?php echo $Das-> Sprache; ?> " dir = " < ?php echo $Das-> Richtung; ?> " > Als nächstes folgt ein Codeabschnitt, der zusätzliche Header-Informationen enthält, die in der globalen Konfiguration festgelegt werden. Sie können diese Informationen sehen, indem Sie sich den Quellcode einer beliebigen Webseite ansehen. Dabei handelt es sich insbesondere um Meta-Tags, die Sie bereits kennen. <
head>
Die folgenden Kopfzeilen enthalten Links zu den wichtigsten Joomla-CSS-Stilen. <
link
rel=
"stylesheet"
href=
"<
?php echo
$Das-> baseurl ?> /templates/system/css/system.css" type="text /css" /
>
Um Vorlagendesignstile zu verwenden, verlinken wir auf eine Datei mit Cascading Style Sheets template.css, die sich im CSS-Ordner befindet. Es spielt keine Rolle, dass diese Datei vorerst leer ist. Die Hauptsache ist, sie zu verbinden. Mit dem Design befassen wir uns später, wenn wir die Vorlage auf Joomla installieren. Dies erleichtert die Beobachtung des Ergebnisses. < link rel= "stylesheet" href= "< ?php echo $Das-> Basis-URL ?> /templates/< ?php echo $Das-> Vorlage ?> /css/template.css" type="text /css" / > Mit dem folgenden Codeausschnitt können wir die linke oder rechte Spalte ausblenden, wenn sich an der linken und rechten Position keine Module befinden. Sind beide Spalten zugeklappt, nimmt der Inhalt 100 % der Seitenbreite ein. Wenn nur eine Spalte enthalten ist, nimmt der Inhalt 80 % ein. Wenn zwei Spalten aktiviert sind, macht der Inhalt 60 % der Seitenbreite aus. <
?php Der Header wird geschlossen <
/
head>
<
body>
Der „Seite“-Block enthält nur das Design der Site-Seite, die 950 Pixel breit sein wird. < div id= "page" > Der Block „top“ befindet sich ganz oben auf der Seite und enthält zwei Blöcke „logo“ und „user1“. < div id= "top" > Im „Logo“-Bokeh platzieren wir eine Grafikdatei des Logos; dies wird in den Stylesheets angegeben. Aber wir schreiben die automatische Anzeige des Site-Namens in die Datei index.php und platzieren den Namen im H1-Tag, was für die Suchmaschinenoptimierung sehr wichtig ist. <
div id=
"logo"
>
Definieren wir die Position „user1“ im gleichnamigen Block, um das Site-Suchmodul anzuzeigen. <
div id=
"user1"
>
Ausgabe des horizontalen Menümoduls im Block „user2“ an der Position „user2“. Der Block wird zusammenbrechen, wenn sich an dieser Position kein Modul befindet. <
?php if
($Das-> countModules("user2" ) ): ?> Als nächstes kommt der Site-Header-Block. Darin definieren wir die „Header“-Position für die Anzeige von Modulen. Der Block wird zusammenbrechen, wenn sich an dieser Position kein Modul befindet. Ich habe die Fähigkeiten dieses Blocks absichtlich erweitert, um darin nicht nur das Header-Bild, sondern auch Bildrotatoren platzieren zu können. <
?php if
($Das-> countModules(" Header")
)
: ?>
Im Block „user3“ definieren wir die Position „user3“ für die Ausgabe von Modulen. Der Block wird zusammenbrechen, wenn an dieser Position „user3“ kein Modulausgang vorhanden ist. <
?php if
($Das-> countModules("user3" ) : ?> Es öffnet sich ein Block der linken Spalte, der zusammenfällt, wenn sich an der „linken“ Position keine Module befinden. <
?php if
($Das-> countModules("left" ) : ?> Es öffnet sich der wichtigste Inhaltsblock, der je nach Anzahl der enthaltenen Spalten 100 %, 80 % und 60 % der Seitenbreite einnehmen kann. < div id= "content< ?php echo $contentwidth ; ?> " > Anzeigen von Nachrichten in Komponenten < jdoc:include type= "message" / > Inhaltsinhalt ausgeben. <
jdoc:include
type=
"component"
style=
"xhtml"
/
>
Es öffnet sich ein Block der rechten Spalte, der zusammenfällt, wenn sich an der „richtigen“ Position keine Module befinden. <
?php if
($Das-> countModules("right" ) ): ?> Ausgabe des „Footer“-Blocks, der das Modul „HTML-Code“ mit Copyright-Informationen anzeigen soll. Sie können hier auch ein horizontales Menü oder ein Inhaltspräsentationsmodul unten platzieren. Der Block wird ausgeblendet, wenn an dieser „Fußzeilen“-Position mehr als ein Modul angezeigt wird <
?php if
($Das-> countModules("footer") ) : ?> Der Site-Seitenblock „Seite“, der Textkörper und der gesamte Code sind geschlossen. <
/
div>
<
!
-
-
конец блока page-
-
>
Wir haben eine vollständige index.php-Datei erstellt. Jetzt wissen Sie, welche Befehle verwendet werden und in welcher Reihenfolge die Vorlagenblöcke angezeigt werden. ACHTUNG: Damit der Vorlagencode aus dem Joomla-Admin-Panel gelesen werden kann, muss die Datei index.php im AkelPad-Editor geöffnet und in UTF-8-Kodierung gespeichert werden, während das Kontrollkästchen BOM deaktiviert ist. Wenn Sie das Programm Macromedia Dreamweaver zum Arbeiten mit der Datei verwendet haben, müssen Sie im oberen Menü „Bearbeiten“ > „Seiteneigenschaften“ auswählen, die Dokumentkodierung Unicode (utf-8) auswählen und das Kontrollkästchen „Unicode-Signaturen aktivieren (BOM) deaktivieren )“. Ich rate Ihnen jedoch dringend davon ab, den Code über das Joomla-Admin-Panel zu bearbeiten, wenn Sie etwas vermasseln – es gibt kein Zurück, anders als beim Macromedia Dreamweaver-Programm, wo Sie die vorgenommenen Änderungen jederzeit rückgängig machen können. Das Design der Blöcke selbst wird in template.css beschrieben. Aber wir werden Stylesheets konfigurieren, nachdem wir die Vorlage auf Joomla 3 (Joomla 2.5) installiert haben, und dafür müssen wir sie erstellen Zunächst werden wir die Registrierungsseite verbessern, indem wir die Möglichkeit hinzufügen, einen Avatar hochzuladen. Das Quellbild muss im JPG-, GIF- oder PNG-Format vorliegen. Es sollte auch nicht mehr als 2 MB betragen. Keine Sorge, nach der Komprimierung durch das Skript beträgt die Avatar-Größe etwa 3 KB und das JPG-Format. Öffnen Sie die Seite reg.php und fügen Sie es in das Tag ein < bilden> Linie enctype="multipart/form-data", wie im Beispiel:
Anmeldung |
Beliebt:
Neu
- Bezahlte und kostenlose Karaoke-Programme für Computer
- Die Hauptattraktionen von Teruel: Fotos und Beschreibungen
- Kostenlose Programme für Windows kostenlos herunterladen
- Vier Möglichkeiten zum Wiederherstellen von Desktop-Verknüpfungen
- Erstellen Sie mit jQuery eine Schaltfläche „Zurück nach oben“ oder „Nach oben scrollen“.
- Aufbau eines unglaublich einfachen Registrierungssystems in PHP und MySQL
- So entfernen Sie Quadrate in der Konsole in Skyrim
- So verkaufen Sie Steam-Konten unter modernen Bedingungen. Verkaufen Sie Steam-Konten mit cs
- Was tun, wenn der Yandex-Browser keine Webseiten öffnet?
- Kostenloses CS Go auf Steam. Wo kann ich CS Go bekommen?