¿Cómo identificar los tipos de columnas durante la inyección de SQL con la construcción "unir todos los seleccionados"?

1

La situación es la siguiente:

He identificado el vector de ataque de inyección de sql y tengo la siguiente información sobre la tabla de destino:

  • Tiene seis columnas. (Identificado utilizando "ordenar por").
  • Puedo ver la salida de 3 de ellos (se muestra la tabla). dos parece una especie de valor de enumeración (¿entero en la base de datos?), y uno es una fecha. Tengo una fuerte sospecha de que la columna n. ° 6 es una columna de fecha.
  • Estoy casi seguro de que la base de datos es Oracle. (ROWNUM funciona y LIMIT da error).
  • No tengo mensajes de error (siempre se devuelve texto genérico, "algo salió mal").
  • Frontend es PHP si eso importa. Pero podría haber una capa intermedia entre esta y la base de datos (por ejemplo, el servicio java), por lo que no estoy seguro de dónde se está construyendo la consulta.

Por ejemplo, La siguiente consulta de búsqueda funciona como se esperaba:

test' AND ROWNUM <= 5 ORDER BY 6--

PERO no puedo hacer que UNION ALL SELECT funcione:

test' UNION ALL SELECT null,null,null,null,null,null--

La línea anterior da error.

He intentado cosas como:

test' UNION ALL SELECT '2015.01.01', '2015.01.01', '2015.01.01', '2015.01.01', '2015.01.01', '2015.01.01'--

para que los valores puedan coincidir con los campos de fecha y cadena, pero - sin éxito :(

No soy un experto en inyección de SQL, y especialmente ORACLE (aunque tengo experiencia con MsSql).

¿Existe alguna forma de identificar los tipos de columna para que la inyección UNION ALL SELECT pueda funcionar?

Si no, ¿existe alguna alternativa a la técnica anterior que permita la devolución del resultado de la consulta arbitraria que puedo ejecutar en el objetivo? Recuperar @@ versión o similar sería una misión cumplida en mi caso.

    
pregunta user74898 05.05.2015 - 16:14
fuente

0 respuestas

Lea otras preguntas en las etiquetas