El cracking y la memoria
Hace un par de días encontré un hueco de seguridad muy grande en un foro conocido (no voy a dar direcciones por protección del mismo), y dicha falla permitía acceso directo a su base de datos.
No sé si tenga que ver (puesto que mi intención original nunca fue atacar ese foro, sino que simplemente estaba navegando por él), pero el foro es de un tipo MyBB, y la falla ocurrió de la siguiente manera.
Dicho servidor, ese día, esta un tanto sobrecargado de pedidos, por lo que cada tanto fallaban las respuestas al cliente. Esto es algo normal y esperado en dichas condiciones, pero lo que no se espera, es que el proceso de PHP se muera.
Y si lo hiciera, dado que puede tener mucho procesamiento de fondo, que no haya tenido un buffer sin preprocesamiento en la salida. Digamos, que ese proceso PHP ya ponía en la salida el código PHP y luego lo procesaba. Si moría en el medio, entonces el código salía sin pre-procesar, por lo cual yo, solo navegando con mi humilde zorro, podía ver todo el código PHP que formaba al foro.
El header con comentarios en el archivo PHP ya me indicaba que se trataba de un foro MyBB.
Luego le pregunté a Google: “dónde guarda los archivos de configuración MyBB?”
Google respondió: “/inc/config.php”
Entonces le digo a mi zorro: “Andate a http://www.adasdadadaad.com/inc/config.php”
Y ahí veo:
$config['dbtype'] = 'mysql';
$config['hostname'] = '<nombreservidor>';
$config['username'] = '<usuario>';
$config['password'] = '<password>';
$config['database'] = '<schema>';
$config['table_prefix'] = 'mybb_';
Obviamente, los datos no son los mismos que el original, por protección.
Mi siguiente pregunta fue: “Se aceptarán conexiones remotas a la base?”
Ctrl+Space, abrí el Launchy, “mysql”, seleccioné el MySQL Query Browser, Enter. Ingresé los datos, Enter.
Estaba adentro.
Mi próximo paso fue enviar un mail a los administradores del foro para avisar del tema, pero dado que como todo andaba sobrecargado, tuve que hacerlo después.
Por entretención y entrenamiento (uno nunca sabe), me quedé con los hashes md5 de las tablas de usuarios (ni me los pidan, no los voy a repartir), como para analizar la fuerza de los passwords. Paso previo, me correspondía crackearlos, bajo algún método de criptoanálisis.
Hace algunos días que estoy creando Rainbow Tables para crackear los passwords, y a la vez aprendo sobre esto, el desempeño de mi máquina y cosas similares.
SE ME MUERE LA MAQUINAAA!!!
Como se puede apreciar, esto no es para cualquiera… no por uno, sino por la salud de la máquina. Ni hablar de que poseo actualmente 40 archivos de 2 GBs cada uno lleno de hahes md5, que se graban, se leen, se ordenan, se indexan, se buscan, etc, etc, etc… por ahora no he tenido suerte con nada, pero eso es una buena señal de que estoy fallando en algo…
…y ahí es donde tengo que seguir experimentando para aprender.
BTW: Ya pasaron 4 días y tras haberme comunicado con 3 administradores, ninguno me envía respuesta.
Soy un zorrinito de sombrero blanco.
OCR MatLab 2.0
No, no es para MatLab 2.0, sino que es el OCR que yo había implementado, pero versión 2.
A recomendación de la cátedra que vio este trabajo, re-estructuré la red para trabajar de una forma más competitiva, lo que, sin duda, ha resultado en una gran performance en entrenamiento de la msma y mejores resultados en la identificación de caracteres. La distribución en este caso sólo incluye el archivo script de MatLab 2007 (porque la documentación quedó desactualizada xD), y dos archivos de ejemplo con datos generados en la nueva versión de Thot, la 1.3.
Actualmente el error de esa red neuronal varía entre 5 y 15%… lo cual va buenísimo en aceptable.
Sin embargo, todavía es demasiado dependiente de los datos, que significa que sin un buen conjunto de entrenamiento, pierde su magia. Hoy por hoy, la medición de Thot es lo mejor que tengo, pero tengo pensados varios cambios para el futuro.
La nueva versión de este OCR experimental la pueden bajar de aquí.
Soy un zorrinito en progreso.
Thot 1.3 Released
Cambié la técnica de escalado de las fuentes.
Radicalmente.
Esto tiene una gran ventaja, que es la generación de conjuntos de datos mucho más homogéneos, y por tanto, una facilidad mucho mayor para las redes neuronales de aprender bajo dichos datos. A la vez, me deshice del problema del Font Padding, que es espacio extra que una fuente utiliza para generar una cadena en pantalla. (Gracias Graphics.MeasureString! No fuiste muy útil pero sí performante).
Sin embargo, con ello viene una gran desventaja, que es el tiempo extra de procesamiento (y claro! lo proceso todo a mano), pero por suerte arreglé el bug de la barra de progreso y algunos detalles más de la aplicación y el deploy.
Download de Thot, aquí.
Soy un zorrinito cambiante.
OCR con Redes Neuronales en MatLab
Esta es una investigación, a modo de trabajo práctico que me pidieron para la universidad en la que estoy. La idea básica es construir un OCR en MatLab, utilizando redes neuronales. Acá está hecho de una determinada manera, que en conjunto con Thot, se logró un error de alrededor del 56%. Obviamente, no es nada bueno ni aceptable para una aplicación real, pero al menos funciona. Es el comienzo de algo.
Recién hoy que el trabajo fue presentado puedo mostrarlo públicamente. El código es sólo para MatLab 2007. Lo lamento gente, es eso o nada.
Pueden revisar el código o la documentación (a la vez de las diapositivas para las explicaciones que dí de esto) en http://alphagma.googlepages.com/.
Dicho sea de paso, ya se vienen varias mejoras. Pero no digo nada al respecto para que no me apuren. Hoy por hoy es 56% de error y punto.
Soy un zorrinito neuronal.
Link del día: Introduction to Genetic Algorithms
Link aquí.
No se fijen en la página pedorra. :P
Si bien esto no es demasiado avanzado, es una introducción dentro de todo interesante a los algoritmos genéticos, aquellos algoritmos que evolucionan para lograr un objetivo que se desconoce cómo hacer o para mejorar la forma en que lo hace. El enfoque que acá se da no es tan biológico respecto de la teoría de la evolución (que es el clásicamente abordado cuando se tratan estos temas), sino que tiene un enfoque más matemático y probabilístico… válido también.
Tiene un programita para ver algo así en funcionamiento, pero la verdad no lo probé.
Soy un zorrinito genético.
Link del día: BrowserShots
El site al que puede acceder aquí, es relativamente conocido.
Lo que hace básicamente es visitar un mismo site con distintos navegadores y distintas opciones (ej: Javascript, Java, Flash activado/desactivado, etc), que permite a un desarrollador web ver qué tan bien o qué tan mal están saliendo sus diseños para otros navegadores aparte de los que dispone él.
Si bien está muy buena la idea, este site anda a medias (sí, lo lamento, si quieren que hable mejor de él tendrán que pagar su cuota), porque a veces las sesiones expiran antes de que salgan las imágenes para todos los navegadores que uno eligió, y al final, tiene que volver a hacerlo.
Pero, en fin, sigue siendo novedoso.
Soy un zorrinito fotografiado.
Link del día: CSS Sandbox
Link aquí.
Esto seguro le sirva a alguno.
Cuando trabajan con hojas de estilo, a veces no les da por probar a ver qué queda mejor, pero en el medio terminan rompiendo todo lo que hicieron? Bueno, para eso es esta paginita, en la que pueden cambiar las cosas a gusto a ver “qué tal se ve”. En mi opinión le faltan un par de detalles, pero igual está buena.
Soy un zorrinito sandbox.
Thot 1.2 Released
Ahhhhhhhhhhhh! Esto de las redes neuronales es medio mágico, porque hay cosas que las produce la gracia de la diosa fortuna y otras que son pura intuición y nadie nunca te habría sabido decir si te servía o no (hay un tercer grupo catalogado como “calculable”… pero a nadie le importa, ya hay fórmulas para eso).
Le implementé a Thot un escalado y centrado de las imágenes en el entorno a ser dibujadas… y mi red bajó el error de pruebas desde un 90% a un 70%.
La magia, la magia.
Download de Thot aquí.
Soy un zorrinito mágico.
Thot 1.0 Released
Para bajar, aquí: http://alphagma.googlepages.com/
Este programa es la fuente de datos para un sistema de redes neuronales a diseñar próximamente, para un trabajo académico sobre OCR.
La idea es que sobre la imagen de una letra se generan perceptores, y en el archivo de salida se indicará para cada letra elegida de cada fuente seleccionada la cantidad de veces que dicho perceptrón cruza la letra. Estos números serán procesados por una fuente neuronal que luego será capaz de reconocer las letras una vez entrenada con estos datos.
Desde ya debo agradecer muchísimo a JF por su ayuda con la implementación de fórmulas y la aproximación de las mismas a nivel pixel, junto con su orientación de manejo de imágenes. También a Gato Gris por su idea en cuanto a la forma de encararlo, que mejoró la performance y permitió la posibilidad de identificar múltiples cruces.
Soy un zorrinito programador.
Link del día: Browser Tests
Click aquí.
Sumamente útil para todos los que desarrollan en web por acá, es un conjunto de herramientas, tanto instalables como online que permiten el testeo de aplicaciones web en múltiples navegadores.
Soy un zorrinito web.