Duda sustancial SQL Injection

Iniciado por zaderna, 5 Mayo 2009, 14:23 PM

0 Miembros y 1 Visitante están viendo este tema.

zaderna

Buenas tardes;

LLevo estudiando varios dias SQL Injection, me ha surgido una duda que no encuentro por ninguna parte. Comprendo las consultas que hay que introducir en los campos de los formularios para asi poder formar una sentencia SQL con un resultado positivo.

Me monte un servidor apache con mysql y php, para poder estudiar mejor. Hice un formulario de autenticación que hace una consulta al servidor sql, todo bien, me di cuenta que para poder poner:

Usuario:' OR '1'='1
Pass:' OR '1'='1

Tuve que desactivar las magic quotes, ¿Esto significa que en php ya no es posible la injeccion SQL?

Para ver si una web es vulnerable a XSS, suelo poner el algun buscador, formulario el tipico script con un alert. ¿Hay algun metodo parecido para sql injection?

Con motivos de aprendizaje me tope con una web, que en el buscador ponias  ' OR '1'='1 y efectivamente devolvia todo, pero para los formularios de login nunca he obtenido resultados, intente hacer una consulta a alguna tabla que no existiera (me la invente) para que devolviera algun error y asi conocer mas datos sobre la base de datos, pero nunca me funciono.

Bueno espero no haber repetido post (he buscado pero no he encontrado).

Un saludo

Nork

#1
Exacto, a partir de una  versión de PHP (no recuerdo ahora cual) trae las magic quotes activadas por defecto. Prueba con alguna versión PHP más antigua para hacer las prácticas.

Sobre si hay algún método para saber si es vulnerable a SQLI? Pues te digo que en aplicaciones del tipo "noticia.php?id=X" hay un método sencillo para saber si es vulnerable y es con "-1 order by 99" Si la página devuelve un error SQL tendrías que ir bajando el numero 99 y de ahí sacar las tablas, por ejemplo, si pones "-1 order by 7" y en la página te tendría que salir una noticia con título y contenido, visualizarias algo así como:

Título: 1
Contenido: 2

(Si ves ésto y no el error de antes es que esa BD tiene 7 tablas.)

Donde digamos que los números son "canales" de salida con los que tendrás que jugar. Por ejemplo si ya sabes que tiene 7 tablas la BD y quieres saber el nombre de ésta escribes:

"-1+union+select+all+1,database()"

Y visualizarías en donde antes había un 2 (en contenido) el nombre de la BD.

Y así seguirías con las pertinentes sentencias SQL. Pero para poder hacer las prácticas (ya que tu ejemplo en un caso real ya no existiría) consigue una versión PHP un poco más antigua.


S4ludos!
C' Est La Vie

Data Seek3r

Cita de: Nork en  5 Mayo 2009, 22:26 PM
Exacto, a partir de una  versión de PHP (no recuerdo ahora cual) trae las magic quotes desactivadas por defecto.

Te estas contradiciendo totalmente.

Cita de: Nork en  5 Mayo 2009, 22:26 PM
(Si ves ésto y no el error de antes es que esa BD tiene 7 tablas.)

No son 7 tablas, son 7 columnas.

YST

Citar"-1 order by 7"

Eso seguria dando error siempre.
Citar
ejemplo, si pones "-1 order by 7" y en la página te tendría que salir una noticia con título y contenido, visualizarias algo así como:

Título: 1
Contenido: 2

No te mostraria eso para eso tendrias que hacer un union select  ..
Citar
"-1+union+select+all+1,database()"

No tenia 7 "tablas" ( son columnas pero bueno ) entonces por que pones 2 solamente ?


Yo le enseñe a Kayser a usar objetos en ASM

Nork

#4
 :-\ En efecto, no sé en que estaría pensando: son columnas y en el caso que fuesen siete y no dos sería:

"-1+union+select+all+1,database(),3,4,5,6,7"

Debería haber revisado lo que escribo ya que lo escribí rápido y por lo visto mal.
C' Est La Vie

zaderna

Muchas gracias por contestar a todos.

Nork
CitarPero para poder hacer las prácticas (ya que tu ejemplo en un caso real ya no existiría) consigue una versión PHP un poco más antigua.

Mi ejemplo ya no es valido por las magic quotes, (supongo que todavia quedara por ahi algun server con version antigua de php) en asp por defecto ¿tiene algo parecido?.

Me refiero a que por ejemplo el otro dia lei, que SQLI era uno de los ataques mas populares en la actualidad. En mi ejemplo tampoco valdria Blind SQLI ¿no?. ¿Entonces que tecnicas de SQLI se utilizan ahora?

Y claro, supongo, que dependiendo de nuestro objetivo, ya sea asp, php, mysql, sqlserver... habra distintos metodos para llevar a cabo el ataque ¿no?

YST

Que sea ASP,PHP,Visual basic,C,etc.. no influye en inyeccion SQL lo que importa es la base de datos asi es Mysql,MSSQl,etc..


Yo le enseñe a Kayser a usar objetos en ASM

Nork

Cita de: zaderna link=topic=254077.msg1229814#msg1229814
Mi ejemplo ya no es valido por las magic quotes, (supongo que todavia quedara por ahi algun server con version antigua de php) en asp por defecto ¿tiene algo parecido?.

Hasta donde yo sé asp no te soluciona éste problema si no que tendrías que implementar un filtro propio.

CitarEn mi ejemplo tampoco valdria Blind SQLI ¿no?.

Poder... sí, pero sería un poco tontería ya que si consigues pasar un sistema de autenticación por ese método es que ya puedes obtener la cuenta admin sin ningún problema xD

Citar¿Entonces que tecnicas de SQLI se utilizan ahora?

La técnica en si es la misma conceptualmente, lo que cambia sería el proceso que sigues para obtener los resultados. Como dice YST la diferencia de utilizar un proceso o otro es independiente de si es ASP, PHP, JSP... si no que depende del sistema gestor de base de datos ya que son estos los que interpretan las sentencias SQL y cada uno tiene su propia sintaxis (sin salirse de lo que sería el SQL estandar xD)

No sé si le has dado una mirada a éste tutorial, si no dásela.  ;) (como puedes ver el tutorial se centra en los SGDB MySQL)
C' Est La Vie