Autor
|
Tema: probar contraseñas en texto cifrado simétricamente (Leído 7,700 veces)
|
xabware
Desconectado
Mensajes: 4
|
Hola, buenas noches, soy nuevo en el foro. Estoy haciendo una práctica de una asignatura de seguridad informática y tengo que tratar de descifrar un texto que está cifrado con una clave simétrica y en base64 para ser imprimible. Para ello tengo una lista de contraseñas, se que entre ellas está la correcta, pero no se que algoritmo se ha usado. Se que el texto descifrado, debe tener el formato flag{datos} (en datos una serie de letras y números). Para ello estoy utilizando el siguiente script de bash: #!/bin/bash IFSAUX= $IFS contrasenas=() while IFS= read -r line do contrasenas+=("$line") done < "contrasenas.txt" #Contrasenas.txt tiene una lista de 1000 contraseñas IFS= $IFSAUX IFS=' ' read -r -a algoritmos <<< $(openssl help 2>&1 | grep -A 1000 "Cipher" | tail -n +2 | tr -d '\n') for contrasena in ${contrasenas do for algoritmo in ${algoritmos do #este directorio tiene el texto a descifrar cat openssl_reto/reto_SSI19 | openssl enc -base64 -d | openssl enc -d -$algoritmo -pass pass:$contrasena | openssl enc -base64 >> salida2.txt #if [ $? -eq 0 ]; then # echo $contrasena $algoritmo #cat openssl_reto/reto_SSI19 | openssl enc -base64 -d | openssl enc -d -$algoritmo -pass pass:$contrasena | openssl enc -base64 #read -n1 # fi done done soy bastante nuevo haciendo scripts de bash así que creo que está bashtante mal (perdón). La cosa es que en el fichero que me genera con los textos descifrados ninguno tiene el formato de flag. Tenéis alguna idea de que puedo probar o de qué puede estar pasando? sí queréis puedo pasar el texto a descifrar y las contraseñas pero por ahora creo que eso solo haría que mi post fuese demasiado largo. Gracias de antemano si has dedicado tu tiempo a leerme y aún más gracias si pretendes contestarme. Espero que yo también pueda ser de utilidad en este foro algún día. Un abrazo
|
|
|
En línea
|
|
|
|
kub0x
Enlightenment Seeker
Colaborador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
Hola,
veo que desencodeas el base64 del texto cifrado, y acto seguido pruebas a descifrar utilizando el algoritmo con una contraseña (esto debido a los dos bucles). Ahora, una vez descifras, ¿por qué encodeas el descifrado en base64? En b64 el descifrado no tendrá los datos ni el flag, supongo.
Si no estoy en lo correcto, y aun quitando el b64 del descifrado no lo logras, el propio OpenSSL te puede imprimir que algoritmos simétricos soporta, de esta forma, añadiéndolos a la lista, encontrarás la respuesta.
Ten en cuenta que el nº de intentos/try será nº_de_algoritmos * nº_de_passwords en el peor de los casos.
Saludos.
|
|
« Última modificación: 3 Octubre 2020, 23:18 pm por kub0x »
|
En línea
|
|
|
|
xabware
Desconectado
Mensajes: 4
|
Hola,
veo que desencodeas el base64 del texto cifrado, y acto seguido pruebas a descifrar utilizando el algoritmo con una contraseña (esto debido a los dos bucles). Ahora, una vez descifras, ¿por qué encodeas el descifrado en base64? En b64 el descifrado no tendrá los datos ni el flag, supongo.
Si no estoy en lo correcto, y aun quitando el b64 del descifrado no lo logras, el propio OpenSSL te puede imprimir que algoritmos simétricos soporta, de esta forma, añadiéndolos a la lista, encontrarás la respuesta.
Ten en cuenta que el nº de intentos/try será nº_de_algoritmos * nº_de_passwords en el peor de los casos.
Saludos.
Sí, he tenido en cuenta esos factores. De hecho si te fijas en mi código extraigo los algoritmos simétricos que soporta OpenSSL de su propia página de help, concretamente son estos: aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb aria-128-cbc aria-128-cfb aria-128-cfb1 aria-128-cfb8 aria-128-ctr aria-128-ecb aria-128-ofb aria-192-cbc aria-192-cfb aria-192-cfb1 aria-192-cfb8 aria-192-ctr aria-192-ecb aria-192-ofb aria-256-cbc aria-256-cfb aria-256-cfb1 aria-256-cfb8 aria-256-ctr aria-256-ecb aria-256-ofb base64 bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx rc2 rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 rc4-40 seed seed-cbc seed-cfb seed-ecb seed-ofb sm4-cbc sm4-cfb sm4-ctr sm4-ecb sm4-ofb En cuanto a lo del base64, lo pongo para que una vez desencodeado se vuelva a convertir en texto imprimible, antes he probado a quitar el segundo base64 por lo que tu dices, y solo obtenía un montón de símbolos sin sentido, aunque supongo que podría probar a guardar todo eso en un fichero y ver si aunque solo sea una de las salidas tiene sentido
|
|
|
En línea
|
|
|
|
kub0x
Enlightenment Seeker
Colaborador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
Un ejemplo siguiendo tus pautas:
Tengo un fichero example con el texto hola. Cifro el fichero con AES-256, password 1234 y encodeo en b64. Guardo el resultado en example.enc
Ahora, aplicando tu pipeline de comandos, el resultado es hola, en base64 es decir -> aG9sYQo=
cat example.enc | openssl enc -d -base64 | openssl enc -d -aes256 -pass pass:1234 | openssl enc -base64
Si quito el último b64 como te decía antes, el resultado es hola, tal y como yo quiero que sea.
cat example.enc | openssl enc -d -base64 | openssl enc -d -aes256 -pass pass:1234
Tu profe (probablemente) quiere que busques la secuencia flag-datos en el texto plano sin encodear, no en el texto plano encodeado en b64.
Lo lógico es guardar en un fichero los distintos plaintexts, obviamente, númerados y con su password con separadores o como quieras, para así, una vez obtenido el válido, saber que algoritmo-password es.
Eso o guardar el nº de intentos y descomponerlo en nº algoritmo y nº de password.
Si sabes lo que buscas, es decir, el flag o algo del plaintext, con una búsqueda valdría, en bash es sencillo.
Espero servir de ayuda. Saludos.
|
|
|
En línea
|
|
|
|
animanegra
Desconectado
Mensajes: 287
|
Hola, buenas noches, soy nuevo en el foro. Estoy haciendo una práctica de una asignatura de seguridad informática y tengo que tratar de descifrar un texto que está cifrado con una clave simétrica y en base64 para ser imprimible. Para ello tengo una lista de contraseñas, se que entre ellas está la correcta, pero no se que algoritmo se ha usado. Se que el texto descifrado, debe tener el formato flag{datos} (en datos una serie de letras y números). Para ello estoy utilizando el siguiente script de bash: #!/bin/bash IFSAUX= $IFS contrasenas=() while IFS= read -r line do contrasenas+=("$line") done < "contrasenas.txt" #Contrasenas.txt tiene una lista de 1000 contraseñas IFS= $IFSAUX IFS=' ' read -r -a algoritmos <<< $(openssl help 2>&1 | grep -A 1000 "Cipher" | tail -n +2 | tr -d '\n') for contrasena in ${contrasenas do for algoritmo in ${algoritmos do #este directorio tiene el texto a descifrar cat openssl_reto/reto_SSI19 | openssl enc -base64 -d | openssl enc -d -$algoritmo -pass pass:$contrasena | openssl enc -base64 >> salida2.txt #if [ $? -eq 0 ]; then # echo $contrasena $algoritmo #cat openssl_reto/reto_SSI19 | openssl enc -base64 -d | openssl enc -d -$algoritmo -pass pass:$contrasena | openssl enc -base64 #read -n1 # fi done done soy bastante nuevo haciendo scripts de bash así que creo que está bashtante mal (perdón). La cosa es que en el fichero que me genera con los textos descifrados ninguno tiene el formato de flag. Tenéis alguna idea de que puedo probar o de qué puede estar pasando? sí queréis puedo pasar el texto a descifrar y las contraseñas pero por ahora creo que eso solo haría que mi post fuese demasiado largo. Gracias de antemano si has dedicado tu tiempo a leerme y aún más gracias si pretendes contestarme. Espero que yo también pueda ser de utilidad en este foro algún día. Un abrazo Tu profe tiene pinta de ser alguien altamente sexy e inteligente. Está bien que como comenté os hagáis cuenta en las comunidades relacionadas con la seguridad. Mayormente con lo que te ha dicho Kub0x lo deberías de sacara. Ya que: 1 estabas codificando en base64 la salida ¿Que esperabas exactamente conseguir con eso? 2 Como bien dice, teniendo todo o parte del contenido descifrado, os doy el formato del flag: "flag{numero}" sólo tienes que obtener la salida que te vayan dando los cifrados y verificar cual tiene ese formato concreto. Puede que muchos cifrados den salida correcta a pesar de no descifrar correctamente asi que el exitcode del programa séa 0 no vale. De todas formas lo de "soy bastante nuevo en bash" es un poco como "llorar por llorar" para que te ayuden. Podéis solucionarlo, y de hecho asi os lo comenté, con el lenguaje de programación que prefiráis. Haber elegido otro lenguaje. saludos.
|
|
« Última modificación: 4 Octubre 2020, 17:42 pm por animanegra »
|
En línea
|
42 No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.
|
|
|
ikxss
Desconectado
Mensajes: 2
|
Mucho ojo con preguntar cuestiones de las asignaturas de animanegra. Es un juanker y nos tiene videovigilados. PD: Fui exalumno suyo y es cierto lo de que es sexy e inteligente
|
|
|
En línea
|
|
|
|
DarK_FirefoX
Desconectado
Mensajes: 1.263
Be the change you wanna see in te world
|
Tu profe tiene pinta de ser alguien altamente sexy e inteligente. Está bien que como comenté os hagáis cuenta en las comunidades relacionadas con la seguridad. Mayormente con lo que te ha dicho Kub0x lo deberías de sacara. Ya que: 1 estabas codificando en base64 la salida ¿Que esperabas exactamente conseguir con eso? 2 Como bien dice, teniendo todo o parte del contenido descifrado, os doy el formato del flag: "flag{numero}" sólo tienes que obtener la salida que te vayan dando los cifrados y verificar cual tiene ese formato concreto. Puede que muchos cifrados den salida correcta a pesar de no descifrar correctamente asi que el exitcode del programa séa 0 no vale. De todas formas lo de "soy bastante nuevo en bash" es un poco como "llorar por llorar" para que te ayuden. Podéis solucionarlo, y de hecho asi os lo comenté, con el lenguaje de programación que prefiráis. Haber elegido otro lenguaje. saludos. Se que esto es offtopic, pero si que me ha hecho el día.... Salu2s
|
|
|
En línea
|
|
|
|
animanegra
Desconectado
Mensajes: 287
|
Bueno, conocimiento y diversion no tienen por que que estar reñidos ¿no?
|
|
|
En línea
|
42 No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.
|
|
|
xabware
Desconectado
Mensajes: 4
|
Tu profe tiene pinta de ser alguien altamente sexy e inteligente. Está bien que como comenté os hagáis cuenta en las comunidades relacionadas con la seguridad. Mayormente con lo que te ha dicho Kub0x lo deberías de sacara. Ya que: 1 estabas codificando en base64 la salida ¿Que esperabas exactamente conseguir con eso? 2 Como bien dice, teniendo todo o parte del contenido descifrado, os doy el formato del flag: "flag{numero}" sólo tienes que obtener la salida que te vayan dando los cifrados y verificar cual tiene ese formato concreto. Puede que muchos cifrados den salida correcta a pesar de no descifrar correctamente asi que el exitcode del programa séa 0 no vale. De todas formas lo de "soy bastante nuevo en bash" es un poco como "llorar por llorar" para que te ayuden. Podéis solucionarlo, y de hecho asi os lo comenté, con el lenguaje de programación que prefiráis. Haber elegido otro lenguaje. saludos. Es posible que mi profe sea altamente sexy e inteligente. No te voy a engañar, siendo el primer foro que aparece en internet esperaba que aparecieras por aquí, tomémoslo como una tutoría pero más divertido. Codificaba en base64 la respuesta porque si no los resultados eran algo confusos, pero también probé a no hacerlo por supuesto y aún así no lo conseguía, así que tras mucho probar acabé preguntando por aquí para ver si alguien tenía alguna idea ingeniosa para probar más cosas, nuestro fallo era que no estábamos probando con todos los algoritmos ya lo hemos conseguido. Efectivamente ya nos dimos cuenta de lo de que el exitcode fuera cero, si te fijas más atentamente en el código que puse, esa parte está comentada, en ese momento estábamos guardando las salidas en un fichero para más tarde buscar el formato del flag en ese fichero. Al último punto si que no tengo nada que decir, efectivamente podríamos haberlo hecho en cualquier otro lenguaje y nos pusimos a hacerlo en bash porque somos unos cabezotas, pero mira, esto que hemos aprendido (era nuestro primer programa en bash más allá de un par de change directories). Muchas gracias animanegra, tus discípulos te honrarán siendo menos quejicas en adelante.
|
|
|
En línea
|
|
|
|
xabware
Desconectado
Mensajes: 4
|
Un ejemplo siguiendo tus pautas:
Tengo un fichero example con el texto hola. Cifro el fichero con AES-256, password 1234 y encodeo en b64. Guardo el resultado en example.enc
Ahora, aplicando tu pipeline de comandos, el resultado es hola, en base64 es decir -> aG9sYQo=
cat example.enc | openssl enc -d -base64 | openssl enc -d -aes256 -pass pass:1234 | openssl enc -base64
Si quito el último b64 como te decía antes, el resultado es hola, tal y como yo quiero que sea.
cat example.enc | openssl enc -d -base64 | openssl enc -d -aes256 -pass pass:1234
Tu profe (probablemente) quiere que busques la secuencia flag-datos en el texto plano sin encodear, no en el texto plano encodeado en b64.
Lo lógico es guardar en un fichero los distintos plaintexts, obviamente, númerados y con su password con separadores o como quieras, para así, una vez obtenido el válido, saber que algoritmo-password es.
Eso o guardar el nº de intentos y descomponerlo en nº algoritmo y nº de password.
Si sabes lo que buscas, es decir, el flag o algo del plaintext, con una búsqueda valdría, en bash es sencillo.
Espero servir de ayuda. Saludos.
Muchas gracias por la ayuda kub0x, ya hemos solucionado el problema, todo lo que dices es cierto, ya te dije que era un poco chapuzas, estaba sacando el texto a un fichero (efectivamente estaba haciendo un poco el tonto al volver a encodearlo), y una vez ahí buscaba "flag" con un grep, si lo encontraba entonces ya me preocuparía de que me imprimiera que algoritmo y contraseña era, cosa que no sucedió. Al final resulta que hay que utilizar un algoritmo de OpenSSl que no se muestra con el comando de help convencional porque no se considera seguro (creo), en vez utilizamos este otro comando openssl list -cipher-algorithms, y así obtenemos una lista en la que si que estaba el algoritmo que necesitábamos. PD: si animanegra lo pide puedo borrar esto para que mis compañeros no vean como se hace. Un saludo y muchas gracias por la ayuda
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Programa para probar contraseñas
« 1 2 »
Hacking Wireless
|
bbr
|
14
|
20,376
|
19 Abril 2011, 21:48 pm
por |FluiD|
|
|
|
¿Tengo TPM (el chip para almacenar contraseñas de cifrado)?
Hardware
|
Ori-chan
|
5
|
4,245
|
30 Diciembre 2014, 22:50 pm
por Orubatosu
|
|
|
Cifrado de contraseñas en la base de datos
Criptografía
|
windic
|
2
|
3,660
|
14 Septiembre 2015, 01:46 am
por ^DeMoN^
|
|
|
Cómo probar Lockbox, el nuevo gestor de contraseñas de Firefox
Noticias
|
wolfbcn
|
0
|
1,521
|
2 Noviembre 2017, 00:30 am
por wolfbcn
|
|
|
Probar y comparar algoritmos de cifrado
Criptografía
|
nanky
|
0
|
2,221
|
6 Abril 2019, 04:07 am
por nanky
|
|