Inyección de SQL: cómo comenzar cuando el valor del parámetro id no es numérico

0

Estoy aprendiendo inyección SQL actualmente y siento que estoy bastante cómodo haciendo la inyección SQL básica. Lo estoy aprendiendo resolviendo desafíos en línea y hasta ahora solo me he topado con situaciones donde el parámetro 'id' es numérico. por ejemplo: enlace

Ahora me he encontrado con una situación en la que el valor del parámetro id es una mezcla de caracteres y números aleatorios. Intenté generar un error utilizando todas las formas posibles, desde comillas simples a consultas verdaderas y falsas, hasta el éxito. También pensé que podría estar codificado a partir de algo, por lo tanto, traté de decodificarlo también utilizando convertidores en línea. No necesito ayuda para resolver el desafío, necesito conocer las diversas formas en que puedo acercarme a una URL como enlace .

    
pregunta aed94 20.07.2018 - 14:46
fuente

2 respuestas

2

El tipo de argumento no debe desempeñar ningún papel en la inyección de SQL que no sea la forma en que se forma la consulta SQL en primer lugar.

La inyección SQL abusa de una consulta SQL que se crea a partir del parámetro como una cadena. El servidor web trata la URL completa como una cadena y analiza todos los parámetros como una cadena también. Entonces, incluso cuando la identificación es numérica, como 1, un servidor web la trata como una cadena y el código la inserta como una cadena. Esto le permite insertar caracteres especiales, que no serían posibles si solo se permitieran los números.

Sin embargo, puede haber diferencias en la consulta SQL. Al usar una cadena en una consulta SQL, la cadena debe estar entre comillas simples ' . Los números pueden, pero no tienen que ser. Número: SELECT * FROM Test WHERE id = $NUMBER; Cadena: SELECT * FROM Test WHERE id = '$TEXT';

Cuando tienes una cadena encerrada entre comillas, primero debes cerrar las comillas. Entonces, por ejemplo, enviarías A'; DROP TABLES *;-- que te daría: %código%. Puede ver el SELECT * FROM Test WHERE id = 'A'; DROP TABLES *; --' terminando el primer ' para que su comando ' sea tratado como un comando y no como texto. El - se usa para comentarios en SQL y aquí lo usamos para deshacernos del cierre DROP TABLES *; . De lo contrario, causaría una consulta SQL con formato incorrecto.

Tenga en cuenta que los números PUEDEN también usar comillas en una consulta, por lo que puede ser útil usar este método de escape incluso si el sitio solo usa números en el parámetro. Además, dependiendo del motor SQL, se pueden utilizar otros tipos de comillas y comillas simples, como comillas dobles, lo que cambiaría la forma en que debe escapar de ellas.

    
respondido por el Peter Harmann 20.07.2018 - 15:16
fuente
1

No hay diferencia aquí. Realice la inyección SQL como lo habría hecho si el valor del parámetro fuera numérico. Sin embargo, dado que su forma normal de generar un error no funciona, es posible que existan algunas medidas correctivas. Detectar errores manualmente sin tener un ojo entrenado puede ser complicado a veces.

Si aún tienes problemas después de considerar todo lo que dije, quizás debas utilizar algo como sqlmap para ayudarte.

    
respondido por el John Doe 20.07.2018 - 18:34
fuente

Lea otras preguntas en las etiquetas