sábado, 24 de agosto de 2019

Criptografía (CLXVII): Solución Reto backdoor "easy-flipp"

En este post la solución a otro de los retos de criptografía de la plataforma backdoor.

Este reto tiene el título "easy-flipp" y mi valoración sobre su dificultad es: .

Su enunciado dice lo siguiente:


dr3dd is n00b in crypto stuff, but he tried to encrypt some data using AES-CBC mode can you change encrypted data and get his private message..!!

nc hack.bckdr.in 10006

Y como pista se da la siguiente (Hint): CBC Bit-Flipping Attack.

Solución: ya he escrito en este blog algunos post sobre el 'bit-flipping attack', por lo que resolver este reto no tiene que ser difícil y, en consecuencia, rebajo su nivel de dificultad a bajo.

Me conecto:
En el enunciado se dice que el método de cifrado utilizado es AES en modo de operación CBC, y aquí veo el mensaje de autenticación cifrado (en hexadecimal) y que el texto en claro correspondiente al mismo es "admin=0".

Pues bien, entiendo que lo único que hay que hacer es cambiar "admin=0" por "admin=1" mediante la modificación del Byte séptimo del vector de inicialización (IV) para que se produzca la modificación deseada en el Byte séptimo del primer bloque de texto plano (pase de 0 a 1).

Es decir, la modificación que tengo que realizar es la siguiente:

C'0[7] = C0[7] XOR P1[7] XOR P'1[7] = C0[7] XOR 0 XOR 1 = C0[7] XOR 1

Donde: C'0[7] = Valor al que hay que modificar el Byte 7 de C0 (IV); 
C0[7] = Byte 7 del bloque 0 del criptograma original (Byte 7 del IV original);
 P1[7] = Byte 7 del bloque 1 del texto plano original;
 P'1[7] = Valor deseado para el Byte 7 del bloque 1 del texto plano.

Por consiguiente, basta con modificar el Byte 7 del vector de inicialización
 (resaltado en color rojo a continuación) con el resultado de la operación XOR de ese mismo Byte con 1.

C0 (IV original) = 0cc1484ddd73a77fd14dc38062560cf0
C'0[7] = C0[7] XOR 1 = a7 XOR 1 = a6
C'0 (IV modificado) = 0cc1484ddd73a67fd14dc38062560cf0

Por lo que, si no estoy equivocado, cuando nos piden 'Give me Encrypted msg in hex' basta con incluir:

0cc1484ddd73a67fd14dc38062560cf034b8bae89f1b9fb5ef1ee676572899dd

para que se nos muestre la flag:
No hay que olvidar que en esta plataforma para superar el reto hay que enviar el hash sha256 de la flag:
Por lo que el valor a enviar es:

dcde1eaf7b732a6b014d47e2cc6eb31946efd1da78494eae4c9e20d52cc2efbe

viernes, 23 de agosto de 2019

Criptografía (CLXVI): Solución Reto id0-rsa "Easy Passwords"

En este post la solución de otro de los retos de la plataforma id0-rsa, dedicada exclusivamente a desafíos de criptografía, y que figura en ella bajo el 'Tag' 'Hashing'.

En este caso lo voy a resolver sólo mediante una herramienta.

El reto en cuestión tiene por título "Easy Passwords" y, en mi opinión, presenta un nivel de dificultad medio (☆☆).

Su enunciado dice lo siguiente: 'Warm up with some easy password cracking', y se proporciona lo siguiente:

$1$abadsalt$0abdVS0D4YnJJ4b7l0RRr1
$1$abadsalt$p394aiqZnKUyrO5Rg9Tf01
$1$abadsalt$cJYsdaTkB9F9L9yH2Qjtd.
$1$abadsalt$lFZDGpRdmOwRbu6HWuqjv0
$1$abadsalt$1AI/LbmumKa5e6dOxiVe11
$1$abadsalt$e2hAp/NXE.Uezx3ZOwA5L0
$1$abadsalt$Cua6x6Rgd8UUHn7Mnzibj.
$1$abadsalt$7XBxlsUB3yXcL62wQpgjK/
$1$abadsalt$DnSSAXOSmaoAAhN4WKaU90
$1$abadsalt$Cua6x6Rgd8UUHn7Mnzibj.
$1$abadsalt$7wLTt8frOzyxahbB9Lzdi.

Solución:

JohnTheRipper:

Lo que se proporciona en este reto son valores de hash generados utilizando el algoritmo crypt(3)-MD5, y para intentar "revertirlos" utilizo 'John the Ripper'el popular software de 'crackeo' de contraseñas, 'Rockyou' como diccionario para implementar un ataque de fuerza bruta.

Creo un fichero de texto (Easy_Passwords.txt) con los valores de hash proporcionados, ejecuto el siguiente comando: john --wordlist=rockyou.txt Easy_Passwords.txt, y el resultado es:
Es decir, veo que se han conseguido 'crackear' algunos de los valores de hash contenidos en el archivo Easy_Passwords.txt.

Ejecuto el siguiente comando: john --show Easy_Passwords.txt, y obtengo lo siguiente:
Es decir, en concreto ya tengo 10 de las cadenas que se corresponden a 11 de los valores hash

Abro el archivo (john.pot) que se ha generado tras el primer paso realizado, y veo lo siguiente:

$1$abadsalt$cJYsdaTkB9F9L9yH2Qjtd.:letter
$1$abadsalt$p394aiqZnKUyrO5Rg9Tf01:second
$1$abadsalt$e2hAp/NXE.Uezx3ZOwA5L0:word
$1$abadsalt$0abdVS0D4YnJJ4b7l0RRr1:the
$1$abadsalt$7XBxlsUB3yXcL62wQpgjK/:this
$1$abadsalt$7wLTt8frOzyxahbB9Lzdi.:order
$1$abadsalt$1AI/LbmumKa5e6dOxiVe11:each
$1$abadsalt$DnSSAXOSmaoAAhN4WKaU90:list
$1$abadsalt$Cua6x6Rgd8UUHn7Mnzibj.:in

Comparando lo valores de hash proporcionados en el reto e incluidos en el archivo de texto que he creado (Easy_Passwords.txt) con el contenido del fichero anterior, veo que hay dos valores de hash repetidos (los resaltados a continuación en color azul), que se corresponden con 'in', y que el valor de hash que falta es el resaltado a continuación en color rojo.

$1$abadsalt$p394aiqZnKUyrO5Rg9Tf01
$1$abadsalt$cJYsdaTkB9F9L9yH2Qjtd.
$1$abadsalt$lFZDGpRdmOwRbu6HWuqjv0
$1$abadsalt$1AI/LbmumKa5e6dOxiVe11
$1$abadsalt$e2hAp/NXE.Uezx3ZOwA5L0
$1$abadsalt$Cua6x6Rgd8UUHn7Mnzibj.
$1$abadsalt$7XBxlsUB3yXcL62wQpgjK/
$1$abadsalt$DnSSAXOSmaoAAhN4WKaU90
$1$abadsalt$Cua6x6Rgd8UUHn7Mnzibj.
$1$abadsalt$7wLTt8frOzyxahbB9Lzdi.

Para intentar 'crackear' el valor de hash que falta, a la vista de que todos los demás se corresponden con palabras comunes en inglés, vuelvo a repetir los 2 pasos anteriores, pero esta vez utilizo un diccionario de dicho idioma (john --wordlist=english.txt Easy_Passwords.txt):
Y veo que la palabra que faltaba era 'of'.

Ejecuto: john --show Easy_Passwords.txt, y obtengo lo siguiente:
Por tanto, la solución a este reto es: "heefaonhinr".

Criptografía (CLXV): Solución Reto id0-rsa "Fast Hashing Passwords"

En este post la solución de otro de los retos de la plataforma id0-rsa, dedicada exclusivamente a desafíos de criptografía, y que figura en ella bajo el 'Tag' 'Hashing'.

En este caso lo voy a resolver sólo mediante un script de python.

El reto en cuestión tiene por título "Fast Hashing Passwords" y, en mi opinión, presenta un nivel de dificultad bajo (☆☆☆).

Su enunciado dice lo siguiente: 'Cryptographic hash functions shouldn't be used to hash passwords directly. It's important to hash passwords before storing them, but using a cryptographic hash function directly isn't sufficient even if salt is included. Salt is intended to make it so that an attacker can't use a table of precomputed hashes of common passwords, but if your hash scheme itself is very fast to compute (as raw cryptographic hash functions are), an attacker won't need a precomputed table, as doing the computation live will be reasonable', se pide lo siguiente'To demonstrate how fast cryptographic hash functions are on passwords, hash every password in the rockyou list of common passwords (14,344,391 passwords total), with sha256. Submit the password with the lowest hash value concatenated to the end of the password with the highest hash value'.

Solución:

Script de python:

from hashlib import sha256
from tqdm import tqdm

f = open('rockyou.txt', 'rb')

rockyou = f.read().split(b"\n")

sha256_menor = ('',115792089237316195423570985008687907853269984665640564039457584007913129639935,'')
sha256_mayor = ('',0,'')

for password in tqdm(rockyou):
    sha256_password = int(sha256(password).hexdigest(), 16)
    if sha256_password < sha256_menor[1]:
        sha256_menor = (sha256(password).hexdigest(),sha256_password,password)
    if sha256_password > sha256_mayor[1]:
        sha256_mayor = (sha256(password).hexdigest(),sha256_password,password)

print'[+] Hash sha256 menor ...',sha256_menor
print'[+] Hash sha256 mayor ...',sha256_mayor
solution = sha256_mayor[2] + sha256_menor[2]
print'[+] Solution ............',solution

f.close()

Ejecuto este script:
Por tanto, la solución a este reto es: bert7quinn,3yame1bore.

Criptografía (CLXIV): Solución Reto id0-rsa "Intro to Hashing"

Empiezo con éste una serie de posts en los que pondré las soluciones de algunos de los retos de la plataforma id0-rsa, dedicada exclusivamente a desafíos de criptografía, y que figuran en ella bajo el 'Tag' 'Hashing'.

Estos retos los resolveré mediante scripts de python y/o la utilización de alguna herramienta.

El primero de estos retos tiene por título "Intro to Hashing" y, en mi opinión, presenta un nivel de dificultad muy bajo (☆☆☆☆).

Su enunciado dice lo siguiente: 'Hashing is a vital concept in cryptography', tras lo cual se incluye un pequeño tutorial sobre los 'Hashes' y se pide lo siguiente: 'To prove you understood this tutorial, show that you can use these hash functions. Hash the string id0-rsa.pub with sha256, then hash the hex string output with md5, and submit the lowercase hex result'.

Solución:

a) Script de python:

import hashlib

sha256 = hashlib.sha256('id0-rsa.pub').hexdigest()
md5 = hashlib.md5(sha256).hexdigest()

print'[+] Solution ...', md5

Ejecuto este script:
Por tanto, la solución al reto es: b25d449d86aa07981d358d3b71b891de.

a) Herramienta:

En este caso utilizo un software de escritorio.

Como primer paso calculo el hash sha256 de "id0-rsa.pub":
Y como segundo paso calculo el hash md5 de la cadena obtenida en el paso anterior:
Con lo que la solución la reto es: b25d449d86aa07981d358d3b71b891de.

jueves, 22 de agosto de 2019

Criptografía (CLXIII): Solución Reto id0-rsa "Vigenère + Rail Fence"

Solución de otro de los retos de la plataforma id0-rsa, la cual está dedicada exclusivamente a desafíos de criptografía.

Se trata de otro de los retos de criptografía clásica que en ella aparecen y, en este caso y como en alguno anterior, sólo lo voy a resolver utilizando herramientas, ya que se combinan dos métodos de cifrado diferentes, Vigenère y Rail Fence, y ésto unido al gran tamaño del criptograma hace que su resolución de forma manual ("lápiz y papel") sea muy laboriosa.

El reto en cuestión lleva por título "Vigenère + Rail Fence" y, en mi opinión, presenta un nivel de dificultad bajo (☆☆☆).

Su enunciado dice lo siguiente: 'Good luck', y como pista se indica: 'Hint: encrypted with Vigenère then Rail Fence. First word of the plaintext is THIS'.

El criptograma a descifrar es el siguiente (lo primero que hago es quitarle los espacios para que las herramientas a utilizar no entiendan que éstos forman parte del criptograma):
Solución:

Entiendo que para resolver este reto, como primer paso, hay que utilizar la fuerza bruta para el cifrado Rail Fence y, posteriormente, probar el descifrado de cada una de las posibles soluciones obtenidas (resultado para cada número de raíles) mediante el método de Vigenère para ver si se obtiene un texto inteligible.

Una vez aplicada la fuerza bruta en el cifrado Rail Fence utilizo una de las muchas herramientas 'online' existentes sobre el cifrado de Vigenère, y con 21 raíles obtengo:
Por lo que ya tengo el texto en claro:
Con lo que la solución a este reto es: "TENTACLE".