hex Kodieren von sql-injection
http://www.pwntester.com/blog/2014/01/15/hackyou2014-web100-write-up/
Unter diesem link, Sie haben injiziert, die durch den hex-code wie
0x39393939393939393939393920756e696f6e20616c6c202873656c656374202748656c6c6f21212729
Bedeutung:
999999999999 union all (select 'Hello!!')
In mysql,können wir nicht geben Sie eine Abfrage wie
Mysql> 0x0abcd... (davon ausgehen, dass 0x0abc.. meine select * from...).
Ja, Können Sie erklären für mich, warum kann Sie Spritzen, wie in meinem link?
p/s: Sorry für mein schlechtes Englisch.
- Bitte fügen Sie eine Erklärung der hack in diesem blog-post so, dass diese Frage auf eigenen Beinen stehen können. Diese Verknüpfung wird unweigerlich rot.
- Menschen, die Abstimmung zu schließen diese Frage, da es nicht klar ist, sind viel zu wählerisch. Diese Frage ist völlig klar und angemessen.
- Für zu wählerisch, den zu Bearbeiten macht einen riesigen Unterschied, dass Lesen eine remote-Verbindung nicht zumutbar ist (das relevante detail kopiert werden soll in der Frage), und das ist ein problem mit PHP, nicht mit mysql/sql. Kombiniert, diese machen es immer noch unklar.
- dann schlagen Sie ein Bearbeiten, zu verbessern, die Frage ist angemessen. Tut ein drive-by enge Abstimmung ist nicht hilfreich, und ist wie eine Tür knallte in das Gesicht, um jemanden um Hilfe zu bitten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die SQL-injection nicht zufällig in der
INSERT
- Anweisung aber in der zweitenSELECT
Aussage:Hier
$r['id']
ist die zuletzt eingefügte ID, ich. e., die vom Benutzer übermittelten$_POST['id']
Wert.Nun der Grund dafür, warum dieses SQL-injection funktioniert, ist die MySQL-Unterstützung für hexadezimale Literale und die Tatsache, dass die id Spalte der Abstimmung Tabelle ist eine string-Typ, da in diesem Fall gilt Folgendes:
Für PHP
0x…
numerisch ist (ich. e.,is_numeric
) und für MySQL0x…
interpretiert und als string gespeichert, die später eingefügt wird in den oben genanntenSELECT
- Anweisung.Dies wäre nicht möglich, wenn entweder
SELECT
gewesen wäre, eine vorbereitete Anweisung.Dies ist bereits beantwortet in den Kommentaren auf diesem blog-post. Den hex-string ausgeführt werden müssen, werden über PHP, oder einige andere system, das falsch übergibt den Wert an MySQL als string (statt einer Nummer), um für diesen "hack" zu arbeiten.