Así que estoy en un compromiso y tomé algunos hachís, pero romperlos no ha servido de nada. Creo que conozco el tipo de hash (PBKDF2-HMAC-SHA256) pero no estoy seguro de qué tamaño redondo utilizaron. Esto me hizo pensar, ¿esto no hace que sea imposible de descifrar o me estoy perdiendo algo? Porque incluso si supiera que conocía la contraseña y la sal de texto sin formato (obviamente, un escenario muy artificial), aún tendría que probar cada tamaño de redondeo hasta encontrar el que usaron.
¿Es correcto pensar esto o me estoy perdiendo algo?
EDITAR: Esta es una información importante mirando hacia atrás y me disculpo por las confusiones sobre la falta de las rondas. La aplicación devuelve hashes en dos partes diferentes de un objeto JSON. {..., "Contraseña": "(Base64encoded (27 caracteres))", "PasswordSalt": "(Base64encoded (24 caracteres))" , ...}. Es por eso que los hashes no incluyen un identificador de rondas.
Por lo tanto, PBKDF2-HMAC-SHA256 proviene de cómo almacenan las contraseñas en una parte diferente de la aplicación y fue todo lo que pude encontrar a través de OSINT. Mirando las longitudes de la contraseña y jugando con Python passlib parece que las contraseñas se almacenan como pbkdf2_sha1. Puedo asegurarme de que estoy en lo cierto, pero repasando todas las rondas y comprobando si hay alguna contraseña que tenga. Todavía llevará un tiempo, ya que, como ha dicho la comunidad, 100,000 rondas no son desconocidas y, lamentablemente, no están usando el valor predeterminado de 29,000.
EDITAR EDITAR: Simplemente ejecuté mi contraseña conocida contra su hash a través de todas las rondas 1-100,000 y no obtuve ningún impacto. Parece que mi intuición de que Sha1 estaba equivocada. Probando SHA-256 ahora con el mismo enfoque.
EDITAR EDITAR: Bueno, mi esperanza se está agotando rápidamente. He intentado SHA_1,256 y 512 de 1 a 100,000 rondas y ninguna de ellas coincide con mi hash. Las longitudes y valores de hash parecen coincidir perfectamente con la descripción, pero los experimentos parecen ser diferentes.
Sé que esto no es realmente un foro de programación, pero aquí está el código que estaba usando para verificar mi hash contra todos los generados.
import concurrent.futures
global quit
from passlib.hash import pbkdf2_sha512
quit = False
def hasher(round, quit):
if(not quit):
hash = pbkdf2_sha512.using(salt=(passlib.utils.binary.ab64_decode('xpN14Zl95QQNOKffgsERSw==')), rounds=round).hash('Password').split('$')[-1]
if(hash[0:5] == '278Vu'):
print(round) #found it
quit = True
if(round % 5000 == 0):
print(round) #status update
exec = concurrent.futures.ThreadPoolExecutor(max_workers=4)
print("Execing")
for i in range(1,100001):
exec.submit(hasher,i, quit)
EDITAR EDITAR EDITAR: Parece que la herramienta de identificador hash aquí enlace los ha etiquetado como contraseñas de Peoplesoft. No estoy seguro de si esto es un falso positivo porque la aplicación no parece utilizar peoplesoft en ningún lugar. También parece que los hashes de Peoplesoft no son salados y el mío devuelve una sal. Hay una publicación sobre el tema aquí, enlace pero es vaga. ¿Alguna ayuda en este sentido?