Quiero aclarar que estoy empezando en esto, no os riais de mi, porfavor.
Buenas tengo un pequeño problema y es que he creado un código para una actividad de clase pero hay un problema. Si editan el fichero pueden ver la contraseña y ahora la pregunta. ¿Cómo puedo hacer para que si abren el código no puedan ver la contraseña?, ya que defino la variable para que lea un archivo de texto y no funciona. ¿Alguien podría ayudarme para que cuando le den a editar no puedan ver la contraseña?. Aquí el código.
#!/bin/bash
# (CC)ZzCry - 2020
#Sanity checks
#Comprueba si el usuario no ha introducido nada al ejecutar el .sh en plan bash saluda.sh =dario! Y define la contraseña además define el imput para poner la contraseña
exitstatus=$?
Nom=$1
contra="$( cat a.txt )"
if [ $# -eq 0 ]
then
echo "Porfavor, introduce un nombre"
exit
fi
#Cuerpo principal
caja=$(whiptail --passwordbox "Bienvenido $Nom, Introduce la contraseña" 10 30 3>&1 1>&2 2>&3)
if [ "contra" = "caja" ]
then
whiptail --ok-button Continuar --msgbox "Felicidades, la contraseña es correcta!" 10 30
else
whiptail --ok-button Salir --msgbox "Contraseña incorrecta!" 10 30
exit
fi
#PREGUNTA PARA INICIAR EL DESAFIO
if (whiptail --title "Desafio" --yes-button "Sí, vamos allá!" --no-button "No, por ahora no" --yesno "Bienvenido $Nom, estás preparado para iniciar el DESAFIO?" 8 78)
then
#DIALOGO EN EL QUE TE MUESTRA LA CONTRASEÑA
echo "Bien, $Nom!. Sientete afortunado de formar parte de este desafio. ¿Estás listo?
La contraseña es:""
Desencriptala en MD5 para obtenerla y abrir la carpeta" > contenido
whiptail --textbox contenido 12 80
else
#Dialogo si cancelas
whiptail --ok-button Salir --msgbox "Has abandonado el reto" 10 30
exit
fi
exit
@ZzCry (https://underc0de.org/foro/index.php?action=profile;u=96346)
Haciendo un análisis rápido...
exitstatus=$?
Está haciendo referencia al valor "$?", osea el estado de salida del último comando ejecutado, si coloca esto en la mitad del código (por ejemplo), no es que vaya a cambiar.
contra="$( cat a.txt )"
Usted es el que tiene el fichero, debio pasarlo para probarlo un poco más realista a como usted lo está haciendo en su PC.
if [ "contra" = "caja" ]
Debe colocar el signo del dólar "$" para que funcione, osea así:
if [ "$contra" = "$caja" ]
Al ver esa linea e interpretar un poco más su mensaje, tengo el presentimiento de lo que desea hacer es una verificación MD5.
Si es así, puede crear una suma de verificación con el comando "md5sum". Ejemplo:
echo -n "What is DtxdF?" | md5sum
510bb6ba3e73bb83d42124192d9399b4 -
Aunque eso funcione, es mejor usar "sha256", cosa que puede hacerlo remplazando "md5sum" por "sha256sum"
~ DtxdF
Lo que quiero hacer es que la variable "contra" lea el archivo contraseña.txt y esa será la contraseña para la variable caja, y si coincide con lo que pone en el archivo de texto, pasar al siguiente paso pero si no coincide con lo que está dentro del archivo de texto que se salga, ya que si defino la variable contra="123"
si alguien le da a editar el archivo podrá ver cual es la contraseña y la gracia es que la encuentren. Unicamente quería saber como se hace eso. El problema es que no me funciona, no sé que habré echo mal para que no funcione, no consigo verlo. Aquí te dejo los archivos para que puedas echarle un vistazo;
Aqui tienes el archivo de texto;
https://www.4shared.com/office/iStQQBrXea/contraseatxt.html (https://www.4shared.com/office/iStQQBrXea/contraseatxt.html)
Y aquí el .sh:
https://www.4shared.com/file/j4qL8kWLea/scripts.html (https://www.4shared.com/file/j4qL8kWLea/scripts.html)
Buenas!
Podés hacer algo como esto:
#!/bin/bash
# Modicado por Kirari
# Script educat que saluda a algú!
# (CC) ZzCry - 2020
#Sanity checks
#Comprueba si el usuario no ha introducido nada al ejecutar el .sh en plan bash saluda.sh Y define la contraseña además define el imput para poner la contraseña
exitstatus=$?
Nom=$1
contra="$(head -n 1 contraseña.txt)"
if [ $# -eq 0 ]
then
echo "Porfavor, introduce un nombre"
exit
fi
#Cuerpo principal
caja=$(whiptail --passwordbox "Bienvenido $Nom, Introduce la contraseña" 10 30 3>&1 1>&2 2>&3)
if [ "$contra" = "$caja" ]
then
whiptail --ok-button Continuar --msgbox "Felicidades, la contraseña es correcta!" 10 30
else
whiptail --ok-button Salir --msgbox "Contraseña incorrecta!" 10 30
exit
fi
#PREGUNTA PARA INICIAR EL DESAFIO
if (whiptail --title "DESAFIO" --yes-button "Sí, vamos allá!" --no-button "No, por ahora no" --yesno "Bienvenido $Nom, estás preparado para iniciar el DESAFIO?" 8 78)
then
#DIALOGO EN EL QUE TE MUESTRA LA CONTRASEÑA
echo "Bien, $Nom!. Sientete afortunado de formar parte de este desafio. ¿Estás listo?
La contraseña es:""
Desencriptala en MD5 para obtenerla y abrir la carpeta" > contenido
whiptail --textbox contenido 12 80
else
#Dialogo si cancelas
whiptail --ok-button Salir --msgbox "Has abandonado el reto" 10 30
exit
fi
exit
Lo que hace el head -n 1, es leer la primera linea del archivo y mostrarla, pero la salida la almacena en la variable
Espero te sirva, saludos!!
Kirari-
@ZzCry (https://underc0de.org/foro/index.php?action=profile;u=96346)No leí los archivos que dejo en ese "servicio", simplemente deje los archivos en texto plano, cómo comparió el código en principio.
Siguiendo con mi conjetura...
Si tiene problemas con la variable "contra" siga la mayoria de pasos que le dije, quizas el problema del porqué no compara de forma correcta es por el carácter de nueva linea (
\n ), para hacer que eso no pase, tiene que leer nuevamente el archivo y quitarlo sustituyendo lo siguiente:
contra="$( cat a.txt )"
Por:
contra=$(echo -n $(cat test.txt))
Ahora sí puede comparar tranquilamente:
if [ "$contra" == "123" ];then
echo "Success!"
else
echo "Denied!"
fi
Citar...si alguien le da a editar el archivo podrá ver cual es la contraseña y la gracia es que la encuentren...
Respecto a lo que dice, simplemente puede crear los archivos pero definir permisos que sólo lo pueda leer y escribir el usuario "root" o cualquiera con privilegios, cosa que se puede hacer con el comando "chmod" ó cómo le dije en anteriores comentarios puede convertir la contraseña en una suma de verificación, aunque igualmente tiene que asignarles permisos, por lo menos quitarles los de escritura y si desea puede dejar los de lectura, pero si el reto se vuelve amplio, cualquier persona "agarra" el hash y lo coloca en un servicio que hace fuerza bruta cómo
crackstation.net.
Todo depende de la creatividad, igualmente si sigue teniendo dudas, puede avisarnos.
~ DtxdF
Bien, gracias a los dos por haberme ayudado, gracias a vosotros he podido solucionar el problema que tenía. Un fuerte abrazo ;)
Un placer ;)