Uso de los tiempos de espera para detectar automáticamente las vulnerabilidades de inyección de sql ciego

0

Estoy trabajando en una herramienta de prueba de penetración, y tengo una inyección de SQL basada en errores bastante cubierta, pero me preguntaba: ¿es posible usar tiempos de espera, junto con comandos de SQL integrados para detectar un problema? En la aplicación DVWA, intenté la consulta

' OR 1=1; WAITFOR DELAY '00:00:05';#

en el cuadro de inyección de SQL, y me dio un error de sintaxis genérica. Entonces intenté

'; sleep(5000); #

y que también falló con un error similar. Estos fueron los únicos dos métodos de suspensión que encontré, por lo tanto, ¿cómo en el mundo se ejecuta este ataque, y sería un método confiable para decir, esperar 20 segundos y tener un tiempo de espera de 15?

    
pregunta Dylan Katz 27.11.2013 - 06:43
fuente

1 respuesta

2

Para saber que un exploit de SQL funcionó, debe asegurarse de que parte del código que proporcionó se esté ejecutando en el lado del servidor.

Una instancia de inyección SQL podría ser una consulta creada como

SELECT * FROM users WHERE username='{user}' AND password='{pass}';

Al reemplazar, digamos, user=squeamish&pass=ossifrage con user=admin&pass=' OR ''=' , lo haces para que la consulta ejecutada sea

... WHERE username='admin' AND password='' OR ''='';

que tiene buenas posibilidades de obtener acceso de administrador. Esta es una consulta una

Si reemplazas, como lo hiciste, con ' OR 1=1; WAITFOR DELAY '00:00:05';# , (en realidad creo que # debería haber sido -, pero tal vez ambas secuencias de caracteres sean iniciadores de comentarios válidos. Lo olvido), obtienes

... WHERE username='' OR 1=1; WAITFOR DELAY '00:00:05';# other code ignored

y estas son dos consultas . Sintaxis mucho más potente, sí, ya que ahora puede ejecutar cualquier consulta como la segunda. Pero varios motores no ejecutan, o pueden configurarse para no hacerlo, nada más allá de la primera consulta. Entonces no obtendrás ningún retraso y, por lo tanto, erróneamente concluirás que el exploit no funcionó.

Su segundo intento también hace uso del método de "dos consultas".

Para obtener un retraso significativo, necesita una función que tardará mucho tiempo en ejecutarse. Dependiendo del motor, puedes hacerlo bien con:

' OR SLEEP(5)='

Esto dará lugar a una consulta de

... WHERE username='admin' AND password='' OR SLEEP(5)='' ...

que, para ser evaluado, requiere que el motor devuelva el resultado de un estado de suspensión (). Lo más probable es que la consulta falle, pero antes de hacerlo, esperará cinco segundos. Así es como automáticamente puede saber que una cadena de consulta elaborada daría mejores resultados.

Por ejemplo, en MySQL obtienes

mysql> select 5=SLEEP(5);
+------------+
| 5=SLEEP(5) |
+------------+
|          0 |
+------------+
1 row in set (5.00 sec) <----
    
respondido por el LSerni 27.11.2013 - 23:01
fuente

Lea otras preguntas en las etiquetas