[SOLUCIONADO] Ayuda código BASH

Iniciado por ZzCry, Enero 20, 2020, 05:58:17 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Enero 20, 2020, 05:58:17 AM Ultima modificación: Enero 20, 2020, 06:15:31 PM por DtxdF
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.
Código: bash
#!/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

Enero 20, 2020, 08:44:17 AM #1 Ultima modificación: Enero 20, 2020, 12:04:36 PM por Gabriela
@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Haciendo un análisis rápido...

Código: bash
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.

Código: bash
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.

Código: bash
if [ "contra" = "caja" ]


Debe colocar el signo del dólar "$" para que funcione, osea así:

Código: bash
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:

Código: bash
echo -n "What is DtxdF?" | md5sum
510bb6ba3e73bb83d42124192d9399b4  -


Aunque eso funcione, es mejor usar "sha256", cosa que puede hacerlo remplazando "md5sum" por "sha256sum"

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Enero 20, 2020, 03:09:35 PM #2 Ultima modificación: Enero 20, 2020, 03:12:22 PM por ZzCry
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
Código: bash
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;
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Y aquí el .sh:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




Enero 20, 2020, 04:26:19 PM #3 Ultima modificación: Enero 20, 2020, 04:28:50 PM por Kirari
Buenas!

Podés hacer algo como esto:

Código: bash

#!/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-

@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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:

Código: bash
 contra="$( cat a.txt )"


Por:

Código: bash
contra=$(echo -n $(cat test.txt))


Ahora sí puede comparar tranquilamente:

Código: bash
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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

Todo depende de la creatividad, igualmente si sigue teniendo dudas, puede avisarnos.

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ 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  ;)
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF