Cifrar contraseñas. ¿Es totalmente seguro sha1?

En recientes días, haciendo una investigación acerca de el funcionamiento de cierta aplicación móvil me encontré con que usa una API pública, en la cual se puede obtener información de dicha app y el servicio que ofrece esa empresa.

La API en cuestión es muy fácil de consumir, basta con llamarla de la siguiente forma:

http://ip-de-la-pagina/a/metodo/parametro

Es decir si ponía:

http://ip-de-la-pagina/a/servicios/

Me aparecía un JSON con los servicios que ofrece. Hasta aquí todo bien. ¿Y qué tiene que ver esto con seguridad? Te has de estar preguntando. Aquí empieza lo bueno.

Se me ocurrió poner:

http://ip-de-la-pagina/a/usuarios/

Y la página me contestó con un JSON bien bonito donde venían los datos de los usuarios, incluido su nombre de inicio de sesión (username) y un SHA1 de su contraseña.

Hacer bypass a ese “super cifrado” fue tan fácil como entrar a http://hashkiller.co.uk o https://crackstation.net y pegar los respectivos digest *. Sigue leyendo

Anuncios

Generar códigos QR con PHP

Hoy voy a hablar de una librería en PHP que ya llevo tiempo utilizando para generar códigos QR; me refiero a PHP QR Code.

Comencé a utilizar dicha librería cuando me pidieron un proyecto que llevara una firma digital “como las del SAT”. Tras comentarle a la líder del proyecto todo lo que llevaba implementar un verdadero sistema de firmas digitales, sumado a que -de verdad- la mayoría de usuarios tiene un escaso nivel técnico al grado de que no iban a ser capaces de generar sus archivos .key y .req por cuenta propia. La líder del proyecto y yo decidimos aplicar la vieja confiable: “Por lo mientras pónle (al documento que genera el sistema) un código de barras o algo, el chiste es que se vea que ya se va a empezar a implementar lo de las firmas electrónicas”, me dijo (ese “por lo mientras” lleva casi 6 años, pero esa, es otra historia).

Así pues, me di a la tarea de investigar, primero qué clase de código poner y luego cómo ponerlo.

Como dije al principio, la librería elegida fue PHP QR Code, entre otras cosas por su gran facilidad de uso. Solo debemos de incluirla en nuestro archivo PHP, y llamar a un método estático de la clase QRcode y ¡listo! (debe estar habilitada la extensión GD en el servidor)

Ejemplo 1: Generar un QR en formato PNG y mostrarlo en el navegador

require_once 'ruta/a/phpqrcode/qrlib.php';
QRcode::png("Visita mi blog https://underdog1987.wordpress.com");

Si optas por usar este método no deberás haber enviado ningún encabezado antes de llamar a QRcode. Este método puede ser útil para generar códigos con el texto de manera dinámica, por ejemplo, si el código anterior está en un archivo llamado qrgenerator.php podemos modificarlo para que quede:

require_once 'ruta/a/phpqrcode/qrlib.php';
$text=urldecode($_GET['t']);
QRcode::png("".$text);

Y entonces poder llamarlo desde un tag de la siguiente forma:

<img src="qrgenerator.php?t=Este%20es%20el%20texto%20que%20pase%20en%20la%20URL" />

Ejemplo 2: Generar un código QR y guardarlo en una carpeta

Este ejemplo me gusta más, ya que además de guardar una copia de la imagen generada, podemos indicar el tamaño y el índice de corrección de errores.

QRcode::png("texto","ruta/nombreArchivo.png",'INDICE_CORRECCION',TAMAÑO,MARGEN);

En donde:

ruta/nombreArchivo.png

Ruta (absoluta o relativa) donde se va a guardar el código generado. Se debe especificar la extensión .png

TAMAÑO

Tamaño en pixeles que tendrá cada punto del código. A mayor tamaño, más grande será la imagen generada.

MARGEN

Margen del código en unidades TAMAÑO (el margen es el espacio entre el perímetro de la imagen y la zona de los puntos).

INDICE_CORRECCION

Nivel de corrección de errores. Puede ser uno de los siguientes:

  • L – corrige hasta 7% de daño
  • M – corrige hasta 15% de daño
  • Q – corrige hasta 25% de daño
  • H – corrige hasta 30% de daño

Ejemplos

QRcode::png("Visita mi blog https://underdog1987.wordpress.com","imagenPrueba.png",'H',32,12);
imagenprueba

Corrección de errores: H Tamaño: 32 Margen: 12

QRcode::png("Visita mi blog https://underdog1987.wordpress.com","imagenPrueba.png",'L',32,12);
imagenprueba

Corrección de errores: L Tamaño: 32 Margen:12

QRcode::png("Visita mi blog https://underdog1987.wordpress.com","imagenPrueba.png",'H',5,1);
imagenprueba

Corrección de errores: H Tamaño: 5: Margen: 1

QRcode::png("Visita mi blog https://underdog1987.wordpress.com","imagenPrueba.png",'L',5,1);
imagenprueba

Corrección de errores: L Tamaño: 5 Margen: 1

Observa la diferencia de tamaño de la imagen generada en el tamaño 12 y tamaño 5.

Puedes descargar esta librería desde la página oficial del proyecto en sourceforge.net.

Este post, aunque un poco largo para ser considerado “mini”, forma parte de los Miércoles de Mini-post.

UNIDAD 2 Tarea 2: SQL Injection

Dentro del MOOC Hacking Ético impartido por Mondragon Unibertsitatea nos serán dictadas varias tareas que deberemos de publicar en nuestro blog personal, dichas tareas las iré colocando en la categoría MOOC Hacking Ético. (Para ver todas las categorías de mi blog haz clic sobre el engrane que está dentro del hexágono café en la parte superior de la página).

*

SQL Injection

Inyección SQL (en inglés SQL Injection) es un método de infiltración de código arbitrario que se vale de errores de programación presentes en una aplicación en el nivel de validación de las entradas para realizar operaciones sobre una base de datos.

El origen de la vulnerabilidad radica en el mal tratamiento que la aplicación da a los datos introducidos por el usuario y que después forman parte de una consulta a la base de datos. Por lo tanto, es completa responsabilidad del programador aplicar las técnicas de filtrado necesarias a los datos enviados por el usuario para prevenir este tipo de ataques. Sigue leyendo

Código malintencionado dentro de una imagen GIF

Como sabemos, las imágenes GIF son utilizadas dentro del diseño web para varios propósitos; spacers, pequeñas animaciones y emoticons son los más usados.

Lo que muchos desconocen es que es posible añadir código dentro de la imagen, el cual se ejecutará cuando el visitante intente ver la supuesta imagen en una pestaña nueva del navegador. Este comportamiento supone un hueco en la seguridad de prácticamente todos los navegadores, y un atacante puede usarlo a su favor.

El presente artículo presenta desde un punto de vista educativo cómo reproducir dicho fallo. Esto es lo que necesitamos:

  • Una imagen GIF estática (no animaciones)
  • Un editor de texto que permita editar archivos en modo binario (edit.com de Windows XP por ejemplo).
  • Hosting con PHP

El truco consiste en el mal tratamiento (?) que los navegadores dan al atributo src dentro de la etiqueta <img>, ya que al recibir texto sin sentido intentan renderizarlo como imagen, y en el caso de los GIF (por alguna razón) después de encontrar la marca de fin de archivo ignoran el resto (que en este caso es nuestro código malintencionado) -1-. Esto significa que nuestra imagen con código añadido es inofensiva cuando se muestra dentro de una página Web, no así cuando se muestra sola.

*

Interpretando texto como imagen

En la imagen de arriba se observa una página con tres imágenes. De arriba hacia abajo tenemos: face.gif (imagen original), face2.gif (imagen original  con código añadido) y face2.php (imagen original con código añadido y extensión PHP). Observa como el navegador muestra la última imagen aún cuando la extensión de la misma es PHP, esto es por el comportamiento descrito arriba.

Sigue leyendo

PHP con Underdog1987 Tutorial 3 Variables y Operadores

Binevenidos al tercer tutorial de PHP, poco a poco iremos haciendo cosas más emocionantes.

En el tutorial pasado mencioné como instalar PHP con XAMPP de Apache Friends y me dio tiempo de hacer el típico “Hola Mundo”. Por ello mismo considero que ya estamos en condiciones de hacer algo más emocionante, así que les voy a hablar de los operadores y de las variables.

Sigue leyendo

PHP con Underdog1987 Tutorial 2

En este segundo tutorial voy a hablar acerca de la carpeta htdocs. Creo que es importante conocerla ya que es donde se van a almacenar los archivos que conformarán el sitio.

Nuestro sitio estará organizado en carpetas, y estas son completamente configurables de acuerdo a lo que necesitemos.

Cuando hacemos una petición al servidor, este comienza a buscar el path que le indiquemos desde la raíz del sitio, para el caso de XAMPP es la carpeta htdocs, que está localizada (de forma predeterminada) dentro de la carpeta de instalación de XAMPP. (Por ejemplo c:\xampp).

Sigue leyendo

PHP con Underdog1987 Tutorial 1

Bienvenidos al primer tutorial de la serie #PHPConUnderdog1987, como ya comenté antes, esta serie de tutoriales tendrán como objetivo ayudarte en tu aprendizaje de PHP.

En este primer tutorial abordaré algunos conceptos básicos sobre el lenguaje, básicamente algo de historia, y cómo instalar PHP en Windows.

Sigue leyendo