[h]Introducción a bash : Paso 4[/h]
[h]Las condiciones “if-esle-fi” y “if-elif-else-fi”[/h]
Hoy vemos las condiciones así que un poar de comandos más .
Las condiciones nos permiten inducir un comportamiento según unos criterios. Unos comandos se ejecutan bajo ciertas condiciones que definimos.
Vamos a ver enseguida concretamente como se redactan y a que pueden servir
Recordatorio de los dos capítulos anteriores:
- En nuestro primer curso ( Introducción a bash - paso 1: Bases, echo y “Hola mundo”) hemos visto;
- Lo que es bash (el interprete de ordenes de las distribuciones GNU-Linux)/*]
- Como redactar un script bash (un simple fichero de texto que se distingue por su primera liña, la famosa “bang-line!” : #!/bin/bash/*]
- Como ejecutar un script bash (nos situamos en el directorio con nuestra consola y invocamos bash + el nombre del script)/*]
- Hemos hecho nuestro pirmer script con el orden “echo” (que sirve para escribir en consola/*]
- En nuestro segundo curso Introducción bash, paso 2 : variables, expresion regular (grep) y pipe hemos visto:
- Lo que es una** variable** (ejemplo del cajón), como declarar la (
nombre_de_la_variable=valor_de_la_variable
) y como usar la ( con el simbolo $ para ver su valor) /*] - Lo que es una **expresión regular **(una cadena cualquiera que definimos) y a que sirve (se usa para buscar coincidencias)/*]
- Como usar básicamente el comando grep que permite definir y “jugar” con expresiones regulares/*]
- El comando “cut” que nos permite recortar texto/*]
- El** pipe** (“|”) que encadena dos comandos mandando el resultado del primero comando (su stdout) al segundo comando /*]
- En nuestro tercero curso Introducción a bash -paso3- fichero de transición, cat, tee y read hemos visto:
- La técnica del fichero de transición que consiste en guardar la salida de nuestras consolas para usarla posteriormente/*]
- El comando “cat” que nos permite abrir un fichero de texto/*]
- El comando “tee” que nos permite duplicar la salida de nuestra consola para guardar la en un fichero de texto /*]
- El comando “read” que nos permite leer lo que entra el usuario en consola/*]
[h]1) Condición univoca “if - then - fi”[/h]
Es el caso el más simple y se entiende solo si traducimos al español.
if (si) - condition (condición ) - then (entonces) - comand (ordene(s)) -fi
SI la condición que definimos se realiza; ENTONCES se ejecuta(n) el(los) ordenes(s). Usamos “fi” al final para cerrar la secuencia de ordenes a ejecutar si se cumple la condición
[quote]if ( si - instrucción de abertura de nuestra condición )
expression ] ( condición )
then ( instrucción que indica que hemos acabado de definir nuestra condición )
Statement(s) to be executed if expression is true ( ordenes a ejecutar si se cumple la condición la condición )
fi (instrucción de cierre) [/quote]
bash va a leer desde if a** fi.** Si no ponemos un** fi al fi**nal de nuestra condición obtendremos un error.
Ejemplo practico. Seguimos imaginando que queremos hacer algo para pixiedust y pixiewps.
Para lanzar reaver se necesitan privilegios de administrador si … o si. Por lo tanto tenemos un caso simple a resolver : asegurar nos en inicio de script que el usuario tiene los privilegios necesarios. Se llama una condición de control.
Vamos entonces a redactar hoy el inicio de nuestro script y para ello vamos a usar el comando whoami
whoami pone en consola el nombre del usuario. Es su única función. https://www.wifi-libre.com/img/members/3/bash4_2.jpg
[h]2) Redactar nuestra condición con operadores[/h]
Los operadores son elementos sintácticos que nos permiten hacer comparaciones. No se si les suena los Operadores booleanos… es algo bastante simple y muy importante (fundamental en electrónica-informática).
Para más detalles : Operadores
Bash tiene varios operadores que podemos usar para redactar nuestras condiciones.
en nuestro ejemplo nos interesa comparar que la cadena “root” es la que sale cuando se ejecuta “whami”. No es una operación aritmética por lo tanto usaremos los operadores para comparación de cadenas
[quote]Operador Uso
= Comprobamos que dos cadenas son similares.
!= Comprobamos que dos cadenas son diferentes
-z Comprobamos que una cadena sea vacila (nula, que no haya ninguno símbolo)
-n Comprobamos que una cadena contenga por lo menos un carctere (que no sea nula) [/quote]
[h]3) Condición de control de privilegios [/h]
Lo que vamos a hacer es
Si
- el resultado de “whoami” NO es root
Entonces
- advertimos al usuario de que el script requiere privilegios de usuarios con una orden echo
- cerramos el script con exit*
*EXIT : permite parrar el proceso inciado al ejecutar un script. Es decir “salir y cerrar” un script. Podemos indicar un “estado” de salida.
Exit 0 salimos en estado de “exitó” el script ha podido desarolar se como se supone.
Exit 1 salimos en estado de “error”. No se ha podido ejecutar el script como debido.
Si - el resultado de “whoami” NO es root
se pondría así
if "$(whoami)" != 'root' ];
- La condición se pone entre dos** **** ]**/*]
- Es muy importante que haya un espacio entre cada elemento. sino tendremos un error /*]
- También notar los " " que encierran la $VARIABLE y los ’ ’ que encieran la cadena. Ha de ser así/*]
- usamos el operador lógico “diferente” ( != - "no igual a " )/*]
entonces tendríamos esto
if "$whoami" != 'root' ] # Abrimos nuestra condición con "if" . Nuestra condición verifica que el resultado de whoami sea diferente de "root"
then # si es asi es que no podremos ejecutar reaver o pasar el mode monitor
echo " This script requires root privileges
Please run it with sudo ( sudo bash script.sh ) " # con "echo" escribimos en consola une mensaje de advertencia
exit 1 # salimos en "estado de error"
fi # Instrucción de cierre que indica el fin de los ordenes a ejecutar si la condición se cumplía
A modo de ejemplo veamos como legar al mismo resultado usando otro operador. Y vamos a usar un pipe con grep para jugar con las expresiones regulares vistas anteriormente.
Porque con grep podemos hacer que la cadena sea nula o no si elegimos la expresión regular root
Con el operador -z verificamos que una cadena es nula. Si no tiene root es que no somos rot
if -z "$( whoami | grep root)" ] # Si no obtenemos nada buscando la palbra "root" con el grep en el resultado de "whoami"
then # entonces no somos root
echo " This script requires root privileges
Please run it with sudo ( sudo bash script.sh ) " # con "echo" escribimos en consola une mensaje de advertencia
exit 1 # salimos en "estado de error"
fi # Instrucción de cierre que indica el fin de los ordenes a ejecutar si la condición se cumplía
[h]4) Condición “binaria” if-then-else-fi [/h]
Es muy simple. Tenemos que entender “else” como “de otra forma” “de lo contrario”
if condición ] # definimos nuestra condicón "si" se verifca...
then # ...si se verifica; "entonces" se ejecutan
ordenes # estas ordenes
else # "de lo contrario" (si la condición no se verifica)
ordenes # se ejecutan estos ordenes
fi # instrucción de cierre
ejemplo de script, esta vez usaremos el operador “=” (igual a )
si somos rot : bien, obtenemos un mensage de exitó y salimos del script en estado de exito
#!/bin/bash
if "$(whoami)" = 'root' ]; # Si (if) el resultado del comando "whoami" es "root"
then # Entonces (then) tenemos los privilegios requeridos
echo "You have the required privleges to execute the script!" # Y escribimos en consola un mensaje de éxito
else # De lo contrario (else) - es decir si el resultado de "whoami" es otro que root
echo " This script requires root privileges
Please run it with sudo ( sudo bash script.sh ) " # No disponemos de los privilegios de administrador : con "echo" escribimos en consola une mensaje de advertencia
exit 1 # salimos por lo tanto en "estado de error" (1) con "exit"
fi # fi es la imprescindible Instrucción de cierre que indica el fin de los ordenes a ejecutar
echo "script under development, see you in the next lesson" # el script sigue su curso
exit 0 # y salimos en estado 0 (no errores)
[h]5) Condiciones “multiples” if-then-else-fi [/h]
podemos multiplicar al infinito las condiciones con las condiciones multiples
if condición 1 ]
then
orden(s) que se ejecutan si la condición una se cumple
elif condición 2 ]
then
orden(s) que se ejecutan si la condición dos se cumple
etc....
fi
Una cosa que necesitamos para hacer un ataque pixie dust es tener privilegios de superusuarios y acabamos de codificarlo.
Otra cosa (elif) que deberíamos comprobar es, por ejemplo que el usuario tenga pixiedust instalado…
Si pixiedust esta instalado tenemos a un fichero ejecutable pixie dust en nuestra sistema…
pixiewps se instala en /usr/local/bin : https://www.wifi-libre.com/img/members/3/bash4_4.jpg
De paso podemos verificar que aircrack-ng y reaver sean instalados.
LS es un comando que permite hacer listados de fichero. funciona un poco como grep si lo usamos con una ruta absoluta…
ejemplo : https://www.wifi-libre.com/img/members/3/bash4_5.jpg
Como veis si el fichero existe la consola devuelve el nombre del fichero en verde ( como grep lo hace con la expresión regular pero en riojo)
Si no existe devuelve un mensage de error
Pongamos esto en practica con una condición múltiple que pondremos en inició de nuestro script
#!/bin/bash
if "$(whoami)" != 'root' ] # Abrimos nuestra condición con "if" . Nuestra condición verifica que el resultado de whoami sea diferente de "root"
then # si es asi es que no podremos ejecutar reaver o pasar el mode monitor
echo " This script requires root privileges
Please run it with sudo ( sudo bash script.sh ) " # con "echo" escribimos en consola une mensaje de advertencia
exit 1 # salimos en "estado de error" (1)
elif "$(ls /usr/local/bin/pixiewps)" != '/usr/local/bin/pixiewps' ] # segunda condición a verifcar : la presencia de pixiewps en usr/local/bin
then
echo " This script requires pixiedust
Please download and install pixiedust " # advertencia y
exit 1 # salida en estado en error
elif "$(ls /usr/local/bin/reaver)" != '/usr/local/bin/reaver' ] || "$(ls /usr/local/bin/pixiewps)" != '/usr/local/bin/pixiewps' ] # tercera condicion si no tenemos reaver o buly no podremos hacer el attaque asi que avortamos la misión
then
echo " This script requires a modified
version of reaver or bully
Please download or install one of this tool "
exit 1 # salida en estado en error
else # usamos else para escribir un mensage de exito (inecesario pero para hacer un bucle con todos los argumentos
echo " It seems that your sytem
is prepared for pixiedust atack :)
Good luck!"
fi # la necesaría instrucción de cierre "fi" que indica el "fi"nal de nuestra condición
echo " Script under construction...
See you in next chapter at www.wifi-libre.com"
exit 0
notareís que he puesto en la condición 3 dos condiciones a cumplir tenr reaver o bien tenr buly. Se hace usando el opeador OR ( || )
tenemos a dos condiciones que tenemos que verifcar. si una o la otra se verfica ejecutaremos el codigo atribuido
Fin del capituló. hasta pronto