¿Qué puede decir acerca de esta entrada de formulario cuando da un error interno con '; -' y no '; -?

5

Estoy haciendo una prueba de caja negra en un sitio web. Tiene un formulario y lo estaba probando con diferentes entradas. Cuando ingreso algunas entradas específicas, devuelve un error interno.

Algunas entradas que dan error interno:

  • ';--'
  • ';---'

Algunas entradas que no dan error:

  • ';--
  • ';-f-'
  • ";--"
  • ;--'

Como puede ver, no es un error normal de inyección de SQL. Si fue una inyección SQL normal, los resultados para ';-- y ';--' y ';-- ' no deberían diferir.

Si tiene alguna información sobre la forma en que se comprueba esta entrada o la falla con la que estoy tratando. Por cierto, puedo probar más entradas si es necesario.

    
pregunta Mᴏʀᴀᴅɴᴇᴊᴀᴅ 09.08.2016 - 11:41
fuente

2 respuestas

3

Intenté explicarlo en líneas similares a la respuesta de SilverlightFox usando algunos espacios en la construcción de consultas SQL.

Pero, con ese enfoque, no puedo explicar por qué ';-f-' y ' AND nonsense=1 no produjo un error interno.

Entonces, supongo que el error interno no se debe realmente a un error de DB Sql.

Es causada por una función de desinfección aplicada en la entrada de usuario. Ejemplo de php usando preg-match a continuación.

function inputSanitiser($userinput)
{
$string1=$userinput;
$semicolonExist=preg_match("/';--/",$string1); //search for location(int) of ';-- in $string 1

$string2 =substr ( $string1 , stripos ( $string1 , "';--")+3); //substring from $string1 after the location  ';-- to end of $string1
$commentCloseExist=preg_match("/'/",$string2); //search for location(int) of ' in $string2


    if($commentCloseExist&&$semicolonExist)
    {
        produceInternalError();
    }
    else
    {
        runDbQuery($string1); //runDbQuery will not through Internal error and will silently fail
    }

}

En pocas palabras, la función inputSanitiser está comprobando algunos patrones como

  

';-- seguido de '

     

y puede estar ' UNION ' en cualquier lugar de la cadena

y algunos otros. Entonces, supongo que ';--somethinghere--' y ';--somethinghere-' también deberían producir un error interno.

    
respondido por el Sravan 17.08.2016 - 19:01
fuente
3

De las muestras dadas, parece ser una inyección SQL normal con una cadena.

En aras del argumento, digamos que la consulta era

select * from users where username='<user data>' ;

Es correcto que los dos primeros causen un error ya que producen SQL no válido:

select * from users where username='';--'' ;
select * from users where username='';---'' ;

Porque con respecto a comentarios de MySQL :

  

el estilo de comentario “-- ” (doble guión) requiere que el segundo guión sea   seguido de al menos un espacio en blanco o un carácter de control (como un   espacio, tabulador, nueva línea, etc.)

Prueba ';-- '

Es probable que no se necesiten comillas simples finales.

El producto restante es incompleto (es decir, sin comillas simples de cierre) o SQL válido, por lo que no se produce ningún error:

select * from users where username='';--' ;
select * from users where username='";--"' ;
select * from users where username=';--'' ;

Ten en cuenta que

select * from users where username='';-f-'' ;

debería error. Confirmaría si el resultado de este caso de prueba es correcto.

    
respondido por el SilverlightFox 09.08.2016 - 12:46
fuente

Lea otras preguntas en las etiquetas