inyección de sql, count () as

1

Estoy tratando de mejorar mis habilidades y la comprensión de la inyección de SQL y la defensa de ella.

la consulta toma dos formas dependiendo de lo que estoy tratando de pasar:

1)

    SQL Error: The used SELECT statements have a different number of columns at /home/xxxxxxxx/www/system/models/additional_user_news.class.php line 215
Array
(
    [code] => 1222
    [message] => The used SELECT statements have a different number of columns
    [query] => SELECT * FROM cms_news WHERE node_id=45 AND topic_id = 18 AND active='1'  AND title LIKE '%' union select 1 # %' ORDER BY sort DESC, dateCreated DESC LIMIT 0,10
    [context] => /home/xxxxxxxx/www/system/models/additional_user_news.class.php line 215
)

En el caso de que esté intentando pasar 'union select 1 #

2)

SQL Error: The used SELECT statements have a different number of columns at /home/xxxxxxxx/www/system/models/additional_user_news.class.php line 197
Array
(
    [code] => 1222
    [message] => The used SELECT statements have a different number of columns
    [query] => SELECT COUNT(id) as cnews FROM cms_news WHERE node_id = 45  AND topic_id=18 AND active='1' AND dateCreated<=1475703392
                  AND title LIKE '%' union select 1,2 #%'  
                  LIMIT 0,1
    [context] => /home/xxxxxxxx/www/system/models/additional_user_news.class.php line 197

)

si estoy intentando pasar algo como esto: 'union select 1,2 #

Simplemente no entiendo por qué me da 2 consultas diferentes para diferentes etiquetas de búsqueda. ¿Y cómo es posible de esta manera encontrar el número correcto de columnas?

    
pregunta Anton Rak 05.10.2016 - 23:46
fuente

2 respuestas

0

Está inyectando en dos consultas diferentes, que tienen diferentes recuentos de columnas.

La primera consulta en la línea 197 selecciona una columna, por lo que ' union select 1 # funciona sin romper la consulta. Sin embargo, la segunda consulta en la línea 215 selecciona un número diferente de columnas y, por lo tanto, se rompe.

Aún puedes realizar una inyección de SQL:

  • Error basado: la inyección basada en error en la primera consulta funcionará, ya que se muestran errores.
  • Ciego: si no se mostraran los errores, aún podría realizar una inyección ciega basada en el tiempo en la primera consulta (dependiendo del código exacto, también puede funcionar en función del contenido).
respondido por el tim 06.10.2016 - 12:12
fuente
0

Si ve la primera línea en sus ejemplos, verá que los números de línea son diferentes. El código es primero contar cuántas noticias se están creando después de una fecha determinada, y luego obtener los datos reales. Así que parece que el sitio está protegido contra este ataque en particular mediante el uso de consultas ineficientes, ya que las dos consultas están devolviendo un número diferente de columnas

    
respondido por el rypskar 06.10.2016 - 08:26
fuente

Lea otras preguntas en las etiquetas