Introducción a bash -paso3- fichero de transición, cat, tee y read

[h]Introducción a bash / paso tres[/h]
https://www.wifi-libre.com/img/members/3/binbash_sh-600x600.png
[h]La técnica del “fichero de transición” y el truco ultimo “read”[/h]

Seguimos nuestro viaje en el mundo del script bash. :cool:
Hoy veremos un truco muy útil : el fichero de transición.
Así que dos comandos muy importantes para su manejo : cat (abrir un fichero) y tee (abrir un terminal secundario)
Y acabaremos “abriendo horizontes” con el comando read que permite declarar variable con lo que entra el usuario en consola

Recordatorio de los dos capítulos anteriores:

  • En nuestro primer curso ( Introducción a bash - paso 1: Bases, echo y “Hola mundo”) hemos visto
    [list=*]
    ]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/]
    [/list]

  • En nuestro segundo curso Introducción bash, paso 2 : variables, expresion regular (grep) y pipe hemos visto:
    [list=]
    ]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 /*]
    [/list]

    Hemos bien adelantado :slight_smile: y habíamos acabado por interesarnos a “como automatizar el ataque pixie dust”… Seguiremos en esta vía hoy haciendo un paso más.

[h]Bendito fichero de transición[/h]

Para dar una especie de definición; podríamos decir que se trata de un borrador. Es un fichero “para cocina interna”, no se muestra en consola y tiene vocación a desaparecer en el corso del script.
Para entender esto tomamos un ejemplo concreto.
En esencia (nos olvidamos de momento de escaneo, puesta en mode monitor…) un ataque pixie dust se resume a dos pasos:
[list=1]
]lanzar reaver_mod para recuperar los hashes/]
]lanzar pixewps para obtener el PIN/]
[/list]
Y para llegar del uno al dos el usuario interviene : tiene que copiar lo que ve en consola para redactar su linea de comando
Nuestra misión hoy es ver una forma de automatizar este paso y lo vamos a hacer con un fichero de transición.

El concepto es el siguiente : Si tenemos la información que queremos en consola; vamos a duplicar la salida (un log) para guardar la en un fichero de texto.
Así podremos luego en nuestro script abrir este fichero y podremos usar todo lo que hemos obtenido en consola.
Reaver nos da la información en vivo entonces la guardamos y así la podemos usar mas tarde.
Hay que puntualizar una cosita : Es un método “primitivo”. Es eficaz y fácil pero no es así que se programan “buenos programas”. Pero para hacer un script en bash esta muy bien. :wink:

[h]Tomaras una tasa de tea tee para hacer tu fichero de transición :P[/h]

TEE : guarda una copia de lo que pasa en consola en el fichero que indicamos. Sintaxis : tee [opciones]... [ficheros]...
tee se usa siempre con un ** pipe**.
En la primera parte ponemos nuestra orden, luego añadimos un** pipe**, y luego usamos tee.
La salida en consola de nuestro primer comando se pasa a tee. Y tee lo enseña al instante mientras lo duplica y lo guarda.
ejemplo : Duplicamos la salida de reaver mod del amigo soxrok2212 para crear un fichero de transición “ataque.txt” (que guardamos en /tmp/, así se borra solo cuando se cierra la consola)

sudo reaver -i wlan2mon -b -c -n -vv -w -T 3 -S | tee /tmp/ataque.txt

Parro el ataque después el primer intento.

[h]“cat” más ligero que un gato para abrir un fichero :stuck_out_tongue: [/h]

CAT permite** abrir** ficheros, combinar copias y crear una nueva copia. Ahora nos interesa para abrir el fichero de transición.
Ejemplo : Entro en mi terminal

cat /tmp/ataque.txt y efectivamente veo mi ataque reaver https://www.wifi-libre.com/img/members/3/bash3_3.jpg
En el curso anterior habíamos visto como pilar la “auth key” combinando grep (seleccionamos una liña concreta) y cut (recortamos “campos”) gracias a un** pipe**.

[h]Creación de variables con cat | grep | cut[/h]

la meta es declarar una variable que contenga la llave de identificación que llamaremos AUTHKEY

AUTHKEY=$(cat /tmp/ataque.txt | grep AuthKey | cut -d ':' -f2-)

Notad la forma para declarar una variable que contenga ordenes, pipe(s) y argumentos: Debemos poner todo entre paréntesis y poner el símbolo del dolar primero.
Y repetimos en la misma consola la misma operación (entramos la variable y damos a para guardar la ) cambiando de expresión regular (copiamos y pegamos las de nuestra salida reaver par evitar todos errores)

PKE=$(cat /tmp/ataque.txt | grep PKE | cut -d ':' -f2-)
EHASH1=$(cat /tmp/ataque.txt | grep E-Hash1 | cut -d ':' -f2-)
  • *Notar que para el nombre de la variable he quitado el guion entre E y HASH1. Es porque no podemos usar caracteres especiales en el nombre de nuestras variables, bash no las aceptara (para evitar cosas como “shellchock”) *
EHASH2=$(cat /tmp/ataque.txt | grep E-Hash2 | cut -d ':' -f2-)

y miramos el resultado en consola

echo " PKE tiene por valor : -$PKE AUTHKEY tiene por valor : - $AUTHKEY EHASH1 tiene por valor : -$EHASH1 EHASH2 tiene por valor : -$EHASH2 "

[h]Pausa corta reflexiva[/h]

Cuando queremos redactar un script, hay partes fijas y parte que varían… tomando el ejemplo de un ataque pixie dust básico,
tenemos [list=1]
]Una liña de ataque reaver donde lo que varia es : la interfaz (mandatario es decir necesario en todos casos)
: el bssid (mandatario es decir necesario en todos casos)
: el canal /opcional pero mejora el ataque)
: el PIN (opcional PERO pensando en el futuro, vamos a necesitar a un momento definir lo para usarlo - despues pixiewps)/
]
]Y un liña pixiewps dónde lo que varia son los argumentos que acabamos de recoger en las variables anteriores./]
[/list]

Al final un script consiste en conseguir definir correctamente las partes que varían con variables.

[h]Conclusión : el truco ultimó “read”[/h]

READ Permite leer lo que se entra en consola (el stdin). Es decir que lo que entra un usuario con el teclado esta almacenado para estar utilizado después.
Me explico con un ejemplo concreto y veréis porque podemos hablar de un ultimo recurso que “lo arregla todo”. :cool:
Como hemos visto, ahora mismo tenemos a algunas variables que nos faltan para automatizar el proceso**.reaver_mod >> pixiewps**.
Para empezar nos falta la interfaz y el bssid en la liña reaver y no podemos hacer nada sin ellas.
Pues; con read podemos… ya que haremos trabajar el usuario para nosotros :wink:
Escribir dos cositas nunca mató a nadie… ahora esta claro que no se puede abusar de ello porque el script se hace rápidamente pesado…
Al grano : La sintaxis básica para recoger lo que entra el usuario en una variable es la siguiente

read -p "" variable

podemos usar el espacio entre los dos " " para poner texto que se enseñara en consola (ahoramos así hacer lo con “echo”) :wink:
ejemplo:

[code]#!/bin/bash

GPL v 3. Copyleft 10 april 2015 author: kcdtv domain :wifi-libre.com purpose : learning bash and having fun

pedagogical material for “Introducción a bash -paso3- fichero de transición, cat, tee y read”

visit www.wifi-libre.com for the course

read -p "Enter the wireless interface

  • it has to be in monitor mode (ex:mon0, wlan0mon)

  • than press [ENTER]
    " INTERFAZ # Con read -p guardamos lo que entra el usuario en la variable INTERFAZ
    echo "
    You selected $INTERFAZ for your pixie dust attack.
    The reaver command line would be :

                       sudo reaver -i $INTERFAZ -b etc...
    

bye, see you in next chapter" # Con echo ponemos en pantalla el valor de nuestra variable INTERFAZ (gracias al simbolo “$”)
exit 0 [/code]

Guardo esto en un fichero de texto que llamo “scriptpaso3.sh” y lo lanzo con** bash + ruta_script** o b**ash + nombre script **si estoy situado en la carpeta que lo contiene

https://www.wifi-libre.com/img/members/3/bash3_5.jpg

Próximamente otro capitulo dónde veremos principalmente como usar y redactar bucles " if - elif - else - fi "
Con esto ya seremos capaces de de empezar nuestro script…

…¡Hasta pronto! :slight_smile: