Título: UNION en BLIND SQL Injection Publicado por: macanito en 3 Agosto 2009, 02:25 am Tenemos una consulta de la forma:
select a,b,c from tabla where user=[$user] and pass=md5([$pass]) Se tiene el parámetro inyectable "user" y conocemos el nombre de un user válido. De forma que la respuesta TRUE de la consulta sería loguearse con ese user y la respuesta FALSE sería no loguearse. Ej. user='[user_conocido' or 'a'='a]' (lo que va entre corchetes es la inyección, que provoca que nos logueemos) Ahora, mi pregunta es: ¿cómo se podría inyectar una sentencia UNION teniendo en cuenta que el sistema filtra cualquier carácter de comentario (también en hexadecimal) y funciones como char(), por lo que se tiene que mantener la sintaxis del "and pass=..."? Es decir, algo como: user='[user_conocido' union or 'a'='a]' Recuerdo que es BLIND SQL Injection Gracias de antemano Título: Re: UNION en BLIND SQL Injection Publicado por: WHK en 3 Agosto 2009, 05:48 am Pruebas con
user='[user_conocido' order by '10]' = da error user='[user_conocido' order by '9]' = da error user='[user_conocido' order by '8]' = no da error ya con eso le haces el union select user='[0' union select 1,2,3,4,5,6,7,'8]' además hay varias funciones que no requieren pasar a hexadecimal, por ejemplo load_file o usa concat con valores dword 0x000000000... Título: Re: UNION en BLIND SQL Injection Publicado por: macanito en 3 Agosto 2009, 19:45 pm Gracias por responder.
Pero al hacer como dices, al concatenarse con la parte del pass la consulta quedaría así: user='[user_conocido' order by 10']' and pass='md5' que siempre me loguea sin depender del número que ponga (no me da nunca error, no sé por qué...) o user='[user_conocido' union select 1,2,...,'8]' and pass='md5' que daría un error de sintaxis (esto no he podido probarlo pero lo supongo. La anterior ya la había probado anteriormente) Habría que terminar con un where o algo así, para mantener la sintaxis... Todo esto sin conocer los nombres de las tablas... |