PDF de programación - Hack X Crack - SQL Injection

Imágen de pdf Hack X Crack - SQL Injection

Hack X Crack - SQL Injectiongráfica de visualizaciones

Publicado el 22 de Mayo del 2018
1.501 visualizaciones desde el 22 de Mayo del 2018
1,1 MB
22 paginas
Creado hace 9a (21/07/2010)
Presentación



Antes de nada, me gustaría agradecer públicamente el labor y trabajo que han estado

llevando a cabo últimamente varias personas por la comunidad. En primer lugar a

Kenkeiras por este magnifico tutorial acompañado de la sección práctica en el

apartado de talleres de la comunidad, pero también y no menos importante, la labor

de Kmykc desde lo lejos en todo lo relacionado con los wargames, de Cam10n,

Finaltime, los moderadores de sección y globales que permiten que la atención de

otros se centre en nuevos proyectos y todos aquellos que habéis ayudado en algún

momento, ya sea con trabajo o con donaciones.



Aprovecho para comunicaros, una vez más, y creedme que no me gusta nada tener

que pedir y menos tan repetitivamente, que la comunidad está pasando por un

momento MUY DELICADO ECONOMICAMENTE. Agradeceríamos a aquellos que

puedan, que hicieran una donación por pequeña que sea. Podéis hacerla por paypal a

la cuenta que consta en la web o pedirme los datos bancarios de Hack x Crack para

hacer una transferencia o ingreso.



No os entretengo más, demos lugar a este estupendo tutorial, espero que lo disfrutéis

y aprendáis mucho con el.



Un saludo a todos los Hack x Crackeros,



Neddih I


www.hackxcrack.es

1 0. Antes de empezar...



0.1 ¿Que es una inyección SQL?

La vulnerabilidad a inyecciones SQL es un bug de seguridad que suele darse en sitios web aunque

también puede darse en un programa normal. Se basa en un fallo en la comunicación entre el usuario

final y la base de datos. Esta comunicación se hace a través de un lenguaje llamado SQL (Structured

Query Language, Lenguaje Estructurado de Consultas), de ahí el nombre.



La forma más común de ese error es confiar en la entrada y permitir al usuario modificar la consulta a la

base de datos para que haga algo diferente a su propósito original.



0.2 ¿Que es SQL?

SQL es un lenguaje diseñado para consultar y modificar bases de datos, es simple inglés, lo que permite

aprenderlo rápidamente, por ejemplo, si queremos ver la información de una tabla usuarios, la consulta

sería:

select * from bd_tuto;



Después veremos como funciona básicamente este lenguaje para poder usarlo en nuestro favor.



0.3 ¿Se puede evitar una inyección SQL?

Por supuesto, “simplemente” comprobando que los datos de entrada son seguros (normalmente los que

provee el usuario), conseguiremos una página web/programa/script que no sea vulnerable a una

inyección SQL.



Todo el tutorial puede ponerse en práctica
en la siguiente dirección:
http://talleres.hackxcrack.es/sql/practica/


www.hackxcrack.es

2 1.Introducción a SQL



No tiene sentido explicar SQL a fondo, incluyendo como se crean tablas, bases de datos y demás, así

procuraré centrarme en lo que puede ser útil en este caso y cada uno puede estudiar a fondo SQL por

su cuenta si le engancha este mundillo de las bases de datos.



1.1 Tipos de datos

En este momento solo nos interesan dos tipos de datos, el resto no tienen importancia ya que son poco

comunes, no son estándar, no son visibles desde el exterior o se obtienen a través de estos dos, estos

son:

 Alfanuméricos: son cadenas de letras, números y símbolos, están delimitados por ' y ', por

ejemplo: 'esto es un ejemplo'

 Numéricos: son simples números, así que no necesitan estar delimitados, por ejemplo: 42



1.2 Construcción de consultas

Todas consultas a la base de datos (peticiones y modificaciones de datos) tienen muchos elementos en

común, si consideramos todas en conjunto, las partes que puede tener son:



 <nombre de la consulta><datos a los que se aplica>

 where<condiciones para la operación>

from<nombre de la tabla>



IMPORTANTE:Y toda consulta acaba por punto y coma “;”



1.3 Consulta Select (recuperando datos de la base de datos)

Por ejemplo, volviendo a la consulta de ejemplo, veamos como funciona:



select * from bd_tuto;



 select * , la operación select muestra la base de datos, los <datos a los que se aplica> son las
columnas de la base de datos que se mostrarán, con * se mostrarán todas, si queremos que se

muestren las dos primeras columnas, sería select 1, 2 o llamando a las columnas por su nombre

(aunque en lo que nos ocupa ahora no creo que sean conocidos).

 from bd_tuto , se especifica que la operación se realiza sobre la tabla “bd_tuto”, si fuera sobre la

tabla “otratabla”, sería from otratabla


www.hackxcrack.es

3  No hay un “where”, no hay ninguna condición para que se muestre un usuario en concreto,

pero suponiendo que solo queremos mostrar los usuarios que se llaman “ejemplo”, y que ese

dato está almacenado en una columna usuario, sería where usuario='ejemplo' , como se puede

ver el nombre tiene que ser un dato alfanumérico (contiene letras), así que está delimitado por '

y ', esto es importante recordarlo para después.



1.4 Consulta Insert (introduciendo datos)

Esta consulta es ligeramente distinta a las demás, pongamos como ejemplo esta:



insert into bd_tuto

values ( dato1, dato2, dato3 );



 insert into bd_tuto , el tipo de operación es insert (insertar), y se realiza sobre la tabla bd_tuto.
 values ( dato1, dato2, dato3 ), se especifican los datos a introducir entre paréntesis, hay que

recordar que las variables alfanuméricas van entre ' y ' .

1.5 Consulta Delete (borrando datos)

Como su nombre indica, la consulta delete (borrar) sirve para eliminar datos, por ejemplo:



delete from bd_tuto

where usuario='ejemplo';



 delete from bd_tuto, tipo de operación delete (borrar) sobre la tabla bd_tuto.
 where usuario='ejemplo',se especifica la condición para borrar esa fila (en este caso que el
nombre del usuario sea “ejemplo”, explicare mejor esto después), esta parte no es necesaria,

pero sin ella borra toda la tabla.

1.6 Consulta Update (actualizando datos)



update bd_tuto

set usuario='nuevo nombre'

where usuario='ejemplo';



 update bd_tuto, es una operación de actualización (update) sobre la tabla bd_tuto.


www.hackxcrack.es

4  set usuario='nuevo nombre', se indican que columnas se modificarán (aquí “ejemplo”) y el

nuevo valor (aquí “nuevo nombre”).

 where usuario='ejemplo' , para no variar, la condición para que se aplique la actualización a esa

fila (como siempre opcional), en este caso que el anterior “usuario” sea “ejemplo”.



1.7 Consulta Describe (obteniendo información de una tabla)

La consulta Describe nos permite obtener información sobre una tabla y sus campos:



describe bd_tuto;



 Describe, tipo de consulta, y bd_tuto, tabla a la que se dirige.



1.8 Como funcionan los condicionales (where)

Los condicionales se suelen usar (sobre todo) en el “where” de las consultas para modificar solo lo que

nos interesa de la tabla, su uso es bastante sencillo, si queremos que el valor de una columna sea igual

a uno que decidamos haremos:



Si debe ser igual: nombre_de_columna = variable

Si debe ser distinto: nombre_de_columna != variable

Para que sea mayor: nombre_de_columna> variable

Para que sea mayor o igual: nombre_de_columna>= variable

… creo que ya se entiende, pero por si alguien necesita un poco de refuerzo aquí os dejo un link:

https://encrypted.google.com/search?q=sql+where.



Además podemos encadenar cuantas comparaciones queramos, simplemente haciendo uso del AND:

comparación_1 and comparación_2

Para que sea “verdad” solo si las dos comparaciones son verdad ( AND = Y ), o

comparación 1 or comparación 2

Si es verdad cuando cualquiera de las dos lo es ( OR = O no exclusivo). Por último, se pueden usar los

paréntesis, como se hace en el álgebra común, por ejemplo

comparación_1 and (comparación_2 or comparación_3 )

Sería verdad, si lo es la primera comparación y además, lo fuera la segunda o la tercera.


www.hackxcrack.es

5 2.Técnicas básicas de inyección SQL



2.1 Saliendo de la variable

Supongamos una consulta que comprueba que un par usuario / contraseña es correcto, haciendo



select *

from bd_tuto

where usuario = '$usuario' and (password = '$password');



(Para distinguir mejor, los datos variables tienen un $ al principio).

La idea es que si quien programó la parte que se conecta a la base de datos y hace la consulta no tuvo

especial cuidado podemos “salirnos” de la variable y modificar la consulta, por ejemplo, si introducimos

un usuario cualquiera (“ejemplo”), pero como contraseña introducimos una comilla simple ('), la consulta

quedaría así:



select *

from bd_tuto

where usuario = 'ejemplo' and (password = ''');



Como se puede ver, la consulta es errónea, en la parte de la contraseña hay:



[…]password = '' ' ;



Se comprueba que “password” es igual a '' (esto no nos importa), pero después está el comienzo de un

dato alfanumérico (del que ; forma parte), que nunca acaba, con lo que tampoco acaba la consulta, esto

hace que se produzca un error, y la comunicación con la base de datos no continúe, pero ya sabemos

que la aplicación es vulnerable a este tipo de ataques.

Si añadimos dos ', este error no se produciría, sino que simplemente quedaría un dato alfanumérico por

el medio, normalmente las bases de datos simplemente ignoran ese dato . La situación entonces queda

así:



select *

from bd_tuto

where usuario = 'ejemplo' and (password = '' '');



www.hackxcrack.es

6 Por último, podemos apoyarnos en el operador or (si cualquiera de los dos componentes es

“verdadero”, el resultado lo es) así que poniendo como contraseña:

' or '1'='1 , la consulta resultante sería:



select *

from bd_tuto

where usuario = 'ejemplo' and (password = '' or '1'='1');

Lo que resultaría son todos los usuarios que se llamen “yoquese” y para los que la contraseña sea “”

(vacía) o que “1” sea igual a “1”, así que algún usuario saldrá (a menos que
  • Links de descarga
http://lwp-l.com/pdf11227

Comentarios de: Hack X Crack - SQL Injection (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad