PDF de programación - Introducción a la seguridad Web

Imágen de pdf Introducción a la seguridad Web

Introducción a la seguridad Webgráfica de visualizaciones

Publicado el 12 de Septiembre del 2018
1.099 visualizaciones desde el 12 de Septiembre del 2018
1,4 MB
23 paginas
Creado hace 10a (20/05/2013)
Introducción a la seguridad Web:

La inmensa mayoría de las páginas son vulnerables, a unos u otros fallos.

El gran problema no está en que esas páginas sean vulnerables y con ello podamos pasar un
rato divertido intentando ver por dónde podemos colarnos. Sino que el problema se encuentra
en la escasa formación en materia de seguridad que tienen todas aquellas personas que han
programado dichas aplicaciones web.

Y es que la gran mayoría de gente que programa aplicaciones web sabe lo que es un XSS, pero
lo ven como una simple molestia que puede causar que a algún que otro cliente le aparezca un
alert en su navegador... Lo que no saben es que gracias a esos XSS es posible crear virus y
gusanos programados en javascript, o que con esos simples alert podemos desde troyanizar
una navegador hasta obtener el control total del ordenador de todo aquel inocente que haya
cargado la página vulnerable.

Esto mismo ocurre con fallos SQLi, donde los programadores en muchísimas ocasiones lo único
que hacen es realizar un leve filtrado de las entradas, suponiendo y este es el gran problema
que nadie les hará nada. Supongo que de la gente que lea esto alguno que otro sabrá que son
las inyecciones SQL, lo que me gustaría que os preguntarais es sí realmente sabéis que
conlleva... Y es que una vez encontrada una SQLi es relativamente sencillo hasta para un script
kiddie conseguir ya no solo acceso a la base de datos completa, sino el control del servidor, ya
sea mediante un RFI o mediante algún tipo de exploits utilizando metasploit.

Pero bueno, el fin de este documento, como ya he dicho es enseñar. Mostrar a todo aquel que
esté interesado en este apasionante mundo del hacking y la seguridad... A todos ellos,
demostrarles que las cosas son mucho más fáciles de lo que parecen.

Por ello, en este CTF se aprenderán todas esas tácticas, como utilizarlas para atacar, y más
adelante como poder solucionarlas.



HighSec

Introducción a SQL:

Las siglas SQL se refieren a Structured Query Language, y es un lenguaje estructurado que se
utiliza para administrar y consultar bases de datos. Nosotros nos vamos a centrar
lo máximo posible en las cosas importantes para que todos aquellos que no tengan
conocimiento de SQL puedan aprovechar el CTF y los retos propuestos.

Este lenguaje se basa en hacer consultas a la base de datos, las más normales son:

SELECT ... (Selecciona)
CREATE ... (Crea)
DELETE ... (Borra)
ALTER ... (Altera / Modifica)
INSERT ... (Inserta)

Lo primero que hay que decir de este lenguaje es que toda la información se guarda en
tablas. Donde las filas son los registros completos, como seria usuario, password... Y las
columnas los diferentes atributos de cada registro es decir usuario o password...

Ej:
Una tabla tiene las columnas usuario y password, por lo tanto la estructura seria la
siguiente:

Tabla: usuarios

usuario
Eduardo
Pepito

password
123456
654321



En este caso tendríamos una tabla con dos atributos, es decir columnas
(usuario y password), y dos filas con los dos usuarios (usuario + password).

Ahora que ya tenemos la base sobre como manejan la información de las bases de datos
vamos a centraremos en el primero tipo de consulta (SELECT). Cuando queremos hacer una
consulta a una base de datos lo hacemos con la intención de obtener una serie de
datos según lo que hayamos pedido, un ejemplo podría ser:

SELECT usuario, password FROM usuarios

Esta consulta está diciendo que nos saque todos los registros con las columnas
usuario y password, es decir que en este caso mostraría toda la tabla.



usuario
Eduardo
Pepito

password
123456
654321



Vamos a ver ahora otro ejemplo:

SELECT usuario FROM usuarios


HighSec



En este otro caso el resultado sería que nos mostraría solo la columna usuario de
todos los registros, por lo tanto el resultado sería el siguiente:


usuario

Eduardo

Pepito



Y por ultimo vamos a poner otro pequeño ejemplo:

SELECT usuario, password FROM usuarios WHERE usuario="Eduardo" and
password="123456"

En este caso está buscando en la tabla si existe un usuario que se llama
"Eduardo" y que además tiene una contraseña que es "123456".

Este sería un ejemplo muy típico que se suele utilizar en las aplicaciones web
para permitir que un usuario se logee. Es decir realizaran la consulta y si existe
dicho usuario con dicha clave tendrá acceso, en caso contrario no.


Además del operador AND también existe el operador OR, veamos un ejemplo:

Si nosotros realizáramos la consulta :

SELECT usuario, password FROM usuarios WHERE usuario="Eduardo"
or password="654321"

Estamos preguntando si existe un usuario que se llame "Eduardo" o si por el
contrario, existe un usuario que tenga como password "654321", esta
sentencia nos sacaría toda la tabla vista anteriormente, ya que existen ambos
casos.



Las tablas de las que hemos estado hablando hasta ahora se encuentran almacenadas en bases
de datos. Es decir:

Servidor -> Bases de datos -> Tablas -> Columnas -> Datos

Esto significa que un servidor puede tener varias bases de datos, y que cada base de datos
tiene una serie de tablas, que están formadas por columnas.

En esta parte vamos a mostrar lo importante que son para las SQLi ciertas tablas que tiene por
defecto el sistema.



HighSec



Concretamente tenemos una base de datos llamada “information_schema”, esta base de
datos almacena toda la información sobre la base de datos, es decir, las tablas que tiene, que
columnas tiene cada tabla, etc..

Vamos a ver ahora como nos servirá esto para realizar una SQL Injection básica.

Otra cosa muy importante para esta parte será la instrucción SQL “union”, la cual permite
sumar el resultado de dos consultas. Es decir que realizara las dos consultas y unirá los
resultados. Una de las cosas más importantes es que al realizar un “union”, ambas consultas
tiene que tener la misma cantidad de columnas. Veamos un ejemplo:

Tabla: usuarios


Tabla: personas

usuario
Eduardo
Pepito

nombre
Juan
Jorge

password
123456
654321

apellido
Pérez
Ramírez



Un ejemplo de esta tipo de consultas sería el siguiente:

SELECT usuarios, password FROM usuarios UNION SELECT nombre, apellido FROM
personas.

Lo cual nos daría como resultado lo siguiente:

nombre
Eduardo
Pepito
Juan
Jorge

apellido
123456
654321
Pérez
Ramírez



Como se ve el resultado sería la unión de ambas consultas.

Una vez visto esto vamos a ver como se utilizar en las inyecciones SQL para sacar información.



HighSec

SQL Injection:

El SQL Injection consiste en un ataque que se realiza en las aplicaciones web contra la base de
datos. Esto se debe a una falta de filtrado en la consulta a la base de datos (En este caso en la
página web).

Ahora que sabemos que en qué consiste este ataque vamos a mostrar una serie de ejemplos:

Imaginemos que tenemos la siguiente tabla:

Usuarios

usuario
Eduardo
Pepito

password
123456
654321



Y nos encontramos ante un login, donde lógicamente no tenemos el usuario y la contraseña y
tendremos que saltárnoslo.

Por dentro, la aplicación realiza la siguiente consulta:

SELECT usuario, password FROM usuarios WHERE usuario='x' and password='y'


Siendo ‘x’ e ‘y’ respectivamente el usuario y contraseña que introducimos nosotros en la
aplicación.

Supongamos que introducimos:

x --> pepe y --> hola


La consulta quedaría de la siguiente manera:

SELECT usuario, password FROM usuarios WHERE usuario='pepe' and password='hola'


Como vemos no existe ningún registro con ese usuario y contraseña por lo que nos denegaría
el acceso.

Veamos ahora que pasaría si introducimos lo siguiente:

x --> 'a y --> 'a


La consulta quedaría de la siguiente manera:

SELECT usuario, password FROM usuarios WHERE usuario='' a' and ='' a'

HighSec



Lo que lograríamos con esto sería un fallo en la base de datos, debido a que hemos cerrado
ambos campos poniendo nosotros una comilla simple que es lo que va a utilizar el programa
para cerrar lo que metiéramos nosotros como nombre y contraseña.

Lo que nos interesa de aquí es que si realizáramos la siguiente consulta:

x --> ' or '1'='1 y --> ' or '1'='1


La consulta quedaría de la siguiente manera:

SELECT usuario, password FROM usuarios WHERE usuario='' or '1'='1' and password='' or
'1'='1'


En esta consulta estamos diciendo lo siguiente:

1. Existe un usuario='' (es decir vacio) o... '1'='1', cosa que siempre será
verdad, por lo que en esta parte seria siempre cierto sin importar el usuario.

2. Existe una password='' o... '1'='1', que al igual que antes será siempre cierto.

3. Siempre cierto AND siempre cierto = Acceso al login


Para entender bien lo que hace es importante ver que entre otras cosas las consultas ' or '1'='1
siempre se dejan sin cerrar la comilla al final debido a que el sistema introducirá una comilla, y
con ello evitamos que de error la consulta.

Pues esto sería una forma de saltarse el login de una página. Lógicamente no todas las páginas
son así ya que muchas de ellas implementan unas medidas de seguridad, pero por desgracias...
En muchos de los sitios sigue siendo así de sencillo.

Una vez que ya hemos visto como trabajan las bases de datos y un pequeño ejemplo de SQL
Injection vamos ahora a ver cómo sacar
  • Links de descarga
http://lwp-l.com/pdf13457

Comentarios de: Introducción a la seguridad Web (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad