sábado, agosto 31, 2024
martes, junio 29, 2021
Nuestro nuevo "viejo" libro de Hacking de Aplicaciones Web: SQL Injection 4ª Edición ya disponible
Si fuera preciso explicar qué es un programa a alguien que no conociera nada en absoluto sobre el tema, quizá habría que comenzar indicándole que es "algo muy complejo". Algo que, aunque no lo parezca, hace muchas cosas y se relaciona con muchas otras componentes para realizar su trabajo. Algo que obedece ciegamente y al pie de la letra las instrucciones de su autor. Y algo a lo que no le preocupan las consecuencias de sus actos.
Complejidad. Ésa es la clave.Tanto en el producto como en el proceso de elaboración. Miles de líneas de código. Algoritmos complicados. Entornos de ejecución cambiantes. Presiones para entregar el producto en una determinada fecha. Escasez de medios humanos, materiales y técnicos... Pero esto es sólo el principio: después viene la puesta en producción y su posible exposición al mundo exterior. Un mundo que también es complejo.Visto lo visto, no es de extrañar que los programas contengan fallos, errores, que, bajo determinadas circunstancias los hagan funcionar de forma extraña. Que los conviertan en algo para lo que no estaban diseñados. Aquí es donde entran en juego los posibles atacantes. Pentesters, auditores,... y ciberdelincuentes. Para la organización, mejor que sea uno de los primeros que uno de los últimos. Pero para la aplicación, que no entra en valorar intenciones, no hay diferencia entre ellos. Simplemente, son usuarios.
Publicado por
Chema Alonso
a las
8:33 a. m.
0
comentarios
Etiquetas: 0xWord, Blind SQL Injection, BSQLi, Hacking, libro, Libros, MS SQL Server, MySQL, NoSQL, pentesting, PostgreSQL, SQL Injection, SQL Server, SQLi, SQLite
sábado, marzo 11, 2017
Preguntas del examen de Seguridad en Aplicaciones Web de la UEM 2017
En la conferencia de arriba lo tenéis descrito. Se trata de conseguir ver la información que se quiere extraer de la base de datos usando los mensajes de error ODBC. Esta técnica fue descrita por David Litchfield en el año 2001 en el paper: Web Application Disassembly with ODBC Error Messages. Yo la utilicé combinada con los ataques de Serialized SQL Injection tiempo atrás.
Figura 5: Cómo funciona DirtyTooth Hack
Publicado por
Chema Alonso
a las
8:54 a. m.
3
comentarios
Etiquetas: ASP, Blind SQL Injection, Hacking, MySQL, pentesting, PHP, SQL Injection, SQL Server, Universidad
lunes, noviembre 14, 2016
Configurar WebApps con MS SQL Server in Paranoid Mode usando Latch
![]() |
| Figura 1: Configurar WebApps con MS SQL Server in Paranoid Mode usando Latch |
Con esta forma de funcionar es posible evitar ataques de diversos tipos, que van desde inyecciones no deseadas en esquemas de Network Packet Manipulation, pasando por acciones hechas con cuentas robadas, hasta principalmente, los ataques de SQL Injection que se pudieran producir por un 0day en cualquiera de los plugins de WordPress. Para eso creamos un pequeña PoC llamada WPM (WordPress in Paranoid Mode), el cual podéis descargar desde el laboratorio de ElevenPaths.
Figura 2: My WordPress in Paranoid Mode
Pero si conocéis a Chema Alonso, ya sabéis que no iba a dejar las cosas a medio probar, así que liamos a varios compañeros más para probar si esta idea de poner un segundo factor de autorización a nivel de trigger lo podíamos exportar a otros entornos, así que primero con Rubén Alonso y luego con nuestro compañero Jhonattan Fiestas hicimos una variante que consistía en probar que el Paranoid Mode se podía llevar a cualquier WebApp que funcione sobre MS SQL Server.
Arrancando la PoC: Configuración inicial del Paranoid Mode
Para ver las posibilidades que teníamos de migrar el trabajo que hicimos en WordPress in Paranoid Mode y poder llevar el modo paranoico de cualquier WebApp a un servidor Microsoft SQL Server nuestro compañero Jhonattan Fiestas creó una pequeña aplicación como prueba de concepto. La aplicación no es nada especial, y es lanzada en local usando las credenciales de Microsoft Windows locales. El estado inicial, a modo de instantánea, de la base de datos a la que en un alarde de imaginación hemos denominado ‘MiBaseDeDatos’ es la que se puede ver en la imagen.
![]() |
| Figura 3: Configuración inicial de MiBaseDeDatos |
En ella se puede ver como la base de datos está totalmente limpia, no hay tablas creadas, ni ensamblados cargados. Lo primero que vamos a tocar es el fichero ‘LatchForSQLServer.exe.config’ que tenemos creado para esta aplicación de prueba. Actualizaremos el fichero utilizando una cadena de conexión con autenticación Windows, tal y como se puede visualizar en el ejemplo.
![]() |
| Figura 4: Configuración de la cadena de conexión al motor de bases de datos |
Ahora, desde el binario LatchForSQLServer.exe se puede iniciar la aplicación y ver el menú que se ha creado para la PoC de SQL Server in Paranoid Mode. En el menú, podemos ver diferentes acciones, como son la posibilidad de crear las tablas necesarias en la base de datos de ejemplo, la posibilidad de realizar el pareado con Latch, la creación de los triggers con toda la inteligencia y código necesario para poder consultar los estados de Latch y la posibilidad de realizar el despareado con Latch.
| Figura 5: Menú de Latch for SQL Server |
En primer lugar, crearemos tablas sobre la base de datos, por lo que debemos ejecutar la opción 1. Una vez realizada la operativa, se habrán creado un par de tablas: LatchSettings y LatchUse. Son en estas tablas dónde se tiene que completar la configuración de Latch. Para el ejemplo, se utiliza la configuración mostrada en imagen en la parte inferior.
| Figura 6: Tablas LatchSettings y LatchUse |
Como se puede ver, en LatchSettings creamos en formato tabla un registro con la información que se necesita para consultar el estado de las operaciones creadas. Es decir, es la configuración de la aplicación de Latch.
![]() |
| Figura 7: Configuración de LatchSettings |
Primero es necesario, crear una con una cuenta gratuita de desarrollador en Latch se crea una aplicación y se configura en un registro de esta tabla toda la información para consultar el estado en cada ocasión.
![]() |
| Figura 8: Aplicación creada en Latch |
Para ello se ha definido una aplicación en Latch que tiene tres modos de funcionamiento. Modo Insert, Modo Delete y Modo Update. Desde la aplicación de Latch se podrá definir si se permite o se bloquea ese modo.
![]() |
| Figura 9: Modos controlados por este Paranoid Mode |
En la tabla LatchUse, lo que se va a definir es el nombre de las tablas que estarán afectadas por cada uno de los modos controlados por las operaciones de Latch. Las tablas que aparezcan en cInsert se verán afectadas por la operación del Latch de Insert, en cUpdate la lista de qué tablas se verán afectadas por el estado de la operación de Latch en Update y en la columna cDelete las tablas que se verán afectadas por la operación Delete de Latch.
Poc: Pareado de cuentas
En primer lugar, ejecutamos la operación correspondiente en el menú de LatchForSQLServer, en este caso la Opción 2, y se nos solicitará un Token Temporal de Pareado que debemos obtener desde nuestra aplicación móvil de Latch. Una vez introducido el token y validado podremos
| Figura 10: Pareado de Base de Datos en SQL Server con Latch |
Aplicando triggers a las tablas
Antes de aplicar los triggers se han creado tres tablas con la misma estructura, denominadas mitabla, mitabla2 y mitabla3 - en otro alarde de imaginación -. Estas tablas son creadas para simular las tablas que pudiera tener cualquier WebApp, por ejemplo, en un sistema CMS, que haga uso de Microsoft SQL Server.
| Figura 11: Tablas en LatchUse para cada modo |
En la tabla LatchUse debe reflejarse la configuración de los triggers que se quieren aplicar y dónde se quieren aplicar. Tenemos una columna denominada cInsert, la cual contendrá todas las tablas sobre las que se quiere aplicar un trigger para las operaciones Insert. De manera similar tenemos los casos de cUpdate y cDelete como ya se ha explicado antes. En la imagen, se puede ver que vamos a aplicar lo siguiente:
• Trigger sobre la operación Insert sobre la tabla mitabla y mitabla3.La aplicación leerá los datos de la tabla y entonces descartará los registros vacíos, nulos y duplicados. Cuando se ejecute en el menú de la aplicación la Opción 3, es decir, ‘Apply triggers’ los disparadores sobre las tablas de la WebApp se crearán.
• Trigger sobre la operación Update sobre la tabla mitabla2.
• Trigger sobre la operación Delete sobre la tabla mitabla2 y mitabla3.
![]() |
| Figura 12: Creación de triggers y ensamblados necesarios para consultar el estado de Latch |
En primer lugar, se instalan las dependencias y, posteriormente, los triggers en las tablas que lo requieren. Ahora solo hace falta realizar dichas acciones sobre las tablas para comprobar el funcionamiento, y ver que si tenemos el Latch cerrado, no se pueden realizar operaciones sobre las tablas que están protegidas.
![]() |
| Figura 13: Operación de Insert bloqueada por Latch |
Esta solo es una prueba de concpeto de cómo es posible introducir un Segundo Factor de Autorización a nivel de tablas usando triggers en SQL Server que permitirían configurar un Modo Paranoico en cualquier WebApp sobre este motor de base de datos.
En el vídeo se puede ver el funcionamiento de esta PoC, y si tienes interés en hacer algo similar, no dudes en contactar con nosotros en nuestra Comunidad de ElevenPaths, sección Latch.
Saludos!
Autores: Pablo González, Jhonattan Fiestas & Chema Alonso
Publicado por
Chema Alonso
a las
7:55 a. m.
0
comentarios
Etiquetas: ElevenPaths, hardening, Latch, MS SQL Server, SQL Injection, SQL Server, Wordpress
martes, marzo 29, 2016
SIDU: Un Database Web GUI para escanear servidores
![]() |
| Figura 2: Lista de bases de datos a las que se puede conectar para lanzar comandos SQL |
Remote XSPA (Cross-Site Port Attacks)
1.- Escanear puertos del propio servidor de bases de datos: Bastaría con manipular el valor del puerto con respecto a localhost.
2.- Escanear puertos de cualquier servidor de Internet: Esto se podría realizar si el firewall de la infraestructura de red donde está montado el servidor web que hospeda a SIDU no controlar las conexiones de salida.
3.- Escanear la DMZ: Esto se podría hacer si se averigua la dirección IP local del servidor en el que está hospedado SIDU.
![]() |
| Figura 3: El puerto está cerrado |
![]() |
| Figura 4: El puerto está abierto |
![]() |
| Figura 5: El puerto está abierto y es un MySQL |
![]() |
| Figura 6: Conexión a una base de datos SQLlite que no existe |
![]() |
| Figura 7: En el menú interno hay acceso a un PHP Info |
![]() |
| Figura 8: Acceso a la dirección IP local del servidor que hospeda SIDU |
![]() |
| Figura 9: Escaneo por puertos de MySQL del segmento de red |
Figura 10: Connection String Attacks @ DefCON 18
Publicado por
Chema Alonso
a las
8:43 a. m.
0
comentarios
Etiquetas: bugs, Hacking, MS SQL Server, MySQL, Oracle, pentesting, SQL Server, SQLite, XSPA
lunes, marzo 14, 2016
El caso del fingerprinting al SQL Server TDS7 de Microsoft
![]() |
| Figura 2: Microsoft SQL Server 2012 descubierto por Faast |
![]() |
| Figura 3: Shodan no reconoce ningún motor de SQL Server en esa dirección IP |
![]() |
| Figura 4: Estableciendo una conexión a un motor SQL Server (sin credenciales válidas) desde Excel 2016 |
![]() |
| Figura 5: Mensaje capturado por WireShark en el establecimiento de la conexión a SQL Server desde Excel |
![]() |
| Figura 6: Versiones de TDS asociadas a versiones de MS SQL Server |
![]() |
| Figura 7: Nmap detecta el puerto 1433 pero no la versión del servicio |
![]() |
| Figura 8: Prueba de ESF contra la dirección del servidor SQL Server |
¿Será un SQL Server 7 o un SQL Server 2012?
Llegados a este punto, había que documentarse a ver por qué Faast estaba reconociendo el SQL Server como 2012, así que fuimos a ver cómo hace nmap el filtro de detección de versión de SQL Server en detalle. La respuesta es curiosa. Microsoft SQL Server no hace disclosure de la minor version de TDS, así que hasta la versión Microsoft SQL Server 2014 se utiliza TDS 7 en el paquete de Prelogin. Lo que hace nmap y Faast es comprobar la firma del paquete. Para ello hay una pequeña base de datos que reconoce los paquetes de prelogin de todos los TDS7 y sabe si es un TDS 7.1, TDS 7.2, etcétera.
![]() |
| Figura 9: Volviendo a hacer la prueba con nmap tal y como la hace Faast obtenemos un SQL Server 2012 |
Publicado por
Chema Alonso
a las
9:56 a. m.
5
comentarios
Etiquetas: Eleven Paths, Excel, Faast, Fingerprinting, MS SQL Server, nmap, pentesting, SQL Server
sábado, febrero 27, 2016
Examen del Máster de Seguridad de la UEM 2016
![]() |
| Figura 1: Examen del módulo de Seguridad en las Aplicaciones del Máster de Seguridad de la UEM. Curso 2015 -2016 |
A ver si saco algo de tiempo para responderlas yo - y las del último examen que también las dejé sin responder - para que tengáis la información completa. Al final os dejo la lista de exámenes de años anteriores.
1.- Tu organización dispone de una aplicación web de cara a internet consistente en ofertar productos y servicios con pasarela de pago propia desarrollada para una plataforma Java utilizando tecnologías Linux. Los datos de registro de los clientes, así como los pedidos solicitados se almacenan en una base de datos MySQL de la empresa, gestionando todo el proceso a través de la lógica de negocio. ¿Qué mecanismos de protección consideras que deberían implantarse en cuanto a la arquitectura de servidores y servicios se refiere? Cita reglas generales de fortificación y algunas medias concretas que creas convenientes para implantar.
2.- Una aplicación web de una empresa proporciona un proceso de autenticación que sospechamos un tanto curioso. Al analizar el código fuente de la página, vemos que la aplicación utiliza para el proceso de autenticación un Applet de Java con extensión JAR. Tras probar varios intentos de inicio de sesión, detectamos que no se produce Post-Back al servidor. ¿Qué fallo de seguridad podría tener esta aplicación y cómo debería investigarse?
3.- En qué consiste un ataque de tipo SQL Injection inband a una aplicación web. Pon algún ejemplo para sacar la lista de usuarios Tabla_USERS[Campo_Login, Campo_Password] de una web en un entorno vulnerable.
4.- Describe en qué consisten los ataques de Time-Based Blind SQL Injection y con qué tipo de funciones o métodos pueden realizarse en los motores de base de datos SQL Server, MySQL, Oracle y Access.
5.- Describe con tus palabras en qué consisten los ataques de LFI y cómo los podrías descubrir en una aplicación web durante un proceso de auditoría.
6.- Una aplicación web en PHP con MySQL es vulnerable a SQL Injection. Se quiere extraer la versión de Mysql realizando un ataque de Blind SQL injection. Describe el proceso que habría que realizar.
7.- En una aplicación web, la aplicación autentica a los usuarios con un árbol LDAP, para ello, cada usuario tiene un atributo uid y un atributo password. El programador ha filtrado el * y utiliza la función crypt antes de usar la contraseña en una consulta AND LDAP como ésta.
V_username: valor de usuario introducido en la página web por el cliente.
V_passwd: valor de contraseña introducido en la página web por el cliente.
C_passwd =crypt(v_passwd)
Consulta que da acceso o no a la aplicación:
(&(uid=+v_username+)(password=+c_passwd+))
¿Con qué inyección LDAP conseguirías entrar si la se está utilizando un árbol LDAP basado en OpenLDAP?
8.- Como administrador del sistema de tu organización, una mañana monitorizas que el antivirus corporativo reporta un malware en un directorio local del servidor donde tu empresa tiene alojado el sitio web. El archivo en cuarentena es un fichero denominado C99.php. ¿Qué tipo de ataque estás sufriendo y qué fallo o fallos de seguridad se ha/n podido aprovechar?
9.- Describe un posible método para robar una cookie marcada como HTTP-Only con un ataque de XSS y describe en qué entornos funcionaría.
10.- Describe como se puede hacer un proceso de hijacking de sesión a un usuario de una red social en la que las cookies no vayan por HTTP-s si en la web no se ha descubierto ninguna vulnerabilidad de código (ni SQLi, ni XSS).
Tiempo: 1 horaPor si te animas a seguir, aquí tienes los exámenes de años anteriores, que también los he ido publicando en el blog.
- Examen Máster de Seguridad de la UEM 2009-2010
- Examen Máster de Seguridad de la UEM 2010-2011
- Examen Máster de Seguridad de la UEM 2011-2012
- Examen Máster de Seguridad de la UEM 2012-2013
- Examen Máster de Seguridad de la UEM 2013-2014
- Examen Máster de Seguridad de la UEM 2013-2014 (Herramientas auditoría)
- Examen Máster de Seguridad de la UEM 2014-2015
Publicado por
Chema Alonso
a las
8:34 a. m.
3
comentarios
Etiquetas: auditoría, Blind LDAP Injection, Blind SQL Injection, fortificación, Hijacking, LDAP Injeciton, MS SQL Server, MySQL, pentesting, SQL Injection, SQL Server, Universidad, XSS
domingo, febrero 07, 2016
Un tip para SQL Injection Smuggling: @@Version en MySQL
![]() |
| Figura 2: Mostrando @@version de Microsoft SQL Server en un error ODBC |
![]() |
| Figura 3: Ataque Inband SQL Injection en una WebApp con MySQL. Se muestran los campos 2 y 3 la Select |
Lo que no había usado yo nunca, quizá porque nunca lo había necesitado lo suficiente, es utilizar la función @@version en motores de bases de datos MySQL. De hecho pensaba que no funcionaba en ellos, ya que en la documentación de MySQL siempre te encuentras con la referencia a version().
Lo cierto es que en el pasado me he topado con algún filtro en el que se quitaban los paréntesis, con lo que hacer el SQL Smuggling (o como meter exploits de SQL Injection de contrabando saltándose los filtros de seguridad) se hace más complicado. En la charla de Codemotion 2013 hablé un poco sobre esto, por si quieres verlo.
Figura 6: Codemotion 2013 - SQL Injection: Feliz 15 Aniversario
Publicado por
Chema Alonso
a las
9:59 a. m.
2
comentarios
Etiquetas: auditoría, Blind SQL Injection, Hacking, MS SQL Server, MySQL, pentesting, SQL, SQL Injection, SQL Server
Entrada destacada
Hacking IA: Jailbreak, Prompt Injection, Hallucinations & Unalignment. Nuestro nuevo libro en 0xWord
Pocas veces me ha hecho tanta ilusión que saliera un nuevo libro en 0xWord como con este libro de " Hacking IA: Jailbreak, Prompt Inje...
Entradas populares
-
Un informe de Tech Transparency Project, después del lío con el Jailbreak del Bikini en Twitter/X , y de la masificación de DeepFakes en el...
-
Circula por la red un truco que llegó a mí de casualidad , donde se explica cómo conseguir ver más de una vez - e incluso capturar - las fot...
-
Las técnicas de OSINT son aquellas que te permiten buscar información en fuentes abiertas. O lo que es lo mismo, sacar datos de plataformas...
-
Hace mucho tiempo, cuando se creo el " Modo Incógnito " de los navegadores, que algunos llamaron también " Modo Privado ...
-
Llegados a este punto del artículo, tras lo que se ha tratado en la primera y segunda parte de este artículo , Blind Quantum Computing pu...
-
La computación cuántica está avanzando hacia un modelo de consumo en el que la mayoría de los usuarios accederán a los recursos cuánticos a ...
-
Continuando con el contenido de la primera parte de este artículo que puedes leer aquí: " Blind Quantum Computing (1) " vamos a ve...
-
La noticia del 21 de Julio - que ya me pilló con el post de ayer publicado - fue la del incidente de seguridad reportado por OpenAI y Huggi...
-
Ayer publiqué un post que tiene ver con las opciones de privacidad de Facebook asociadas a los correos electrónicos , y mañana sacaré la se...
-
Otro día feliz, porque tenemos un nuevo libro en 0xWord , que sabéis que conseguir esto y mantener una editorial como la nuestra viva es sie...





DragonJAR
8.8 Chile
Ekoparty
e-Hack MX
AREA 51
Comunidad Dojo Panamá
ARPAHE SOLUTIONS 

















































