Cómo Utilizar Los Scripts de Nmap Script Engine
Cómo Utilizar Los Scripts de Nmap Script Engine
(NSE) EN LINUX?
sudo netdiscover
2. El resultado de netdiscover muestra que VMware Inc es el proveedor de mac
que son nuestras máquinas metasploitable 2. Ahora podemos iniciar un escaneo
de Nmap. El comando Nmap que se muestra aquí es:
dónde:
4. Para usar scripts NSE usamos la bandera -sC, o podemos usar –script para
ejecutar scripts personalizados.
6. Ahora bien, si comparamos los resultados del análisis de la versión del servicio
( -sV ) y los análisis de los scripts predeterminados, hay muchas diferencias.
Tomemos el caso del puerto 21 ( FTP ). En el caso del escaneo de la versión del
servicio, solo obtenemos la versión. En el caso del escaneo de scripts, detectó
que también se permite el inicio de sesión anónimo y el script escrito en lua
intentó iniciar sesión de forma anónima para verificar si es posible. El problema
con los escaneos de scripts es que a veces pueden ser de naturaleza intrusiva.
Esto significa que el script está tratando de interactuar directamente con el
objetivo y también los firewalls e IDS pueden bloquear su solicitud, pero Nmap
es tan poderoso que puede realizar escaneos sin pasar por los filtros. -sC es
equivalente a –script = default .
nmap --script-updatedb
Para comprobar todos los scripts disponibles para un puerto.
10. ftp-anon.nse es el script NSE que se utiliza para detectar el inicio de sesión
anónimo en los servidores FTP. Esta secuencia de comandos es parte de las
secuencias de comandos predeterminadas para el puerto 21. Esa es la razón
por la que obtuvimos el resultado de inicio de sesión anónimo permitido
mientras usábamos el indicador -sC .
Nmap se ejecuta con un solo script para verificar si el inicio de sesión anónimo
está habilitado
11. Los scripts de Nmap son tan poderosos que pueden ayudarlo a crear un shell
en una máquina de destino.
12. Podemos ver que Nmap con solo ejecutar un script fue capaz de identificar
una inyección de comando o RCE (ejecución remota de código) en la máquina
de destino. Nmap intentó ejecutar el comando ID y el resultado se devolvió como
un comando ejecutado por el usuario root. Por lo tanto, Nmap confirmó la
existencia de un error de inyección de comandos. Muchos scripts en Nmap
admiten el paso de argumentos. También podemos obtener un shell inverso solo
con los scripts de Nmap NSE, pero necesitamos saber cómo pasar o cómo usar
los scripts para esta función. Nmap proporciona una opción de ayuda.
Menú de ayuda para el script ftp-vsftpd-backdoor.nse
13. Desde el menú de ayuda sabemos que podemos editar el script ftp-vsftpd-
backdoor.nse y cambiar el comando predeterminado al comando de Linux
deseado para obtener un shell inverso.
script de puerta trasera abierto en vim para reemplazar el comando id
(predeterminado) para obtener un shell inverso
nc -nvlp 1234
16. También puede ejecutar todos los scripts para un puerto en particular con
" theportname- * "
En este caso, estamos escaneando el puerto 21, que es ftp, por lo que en lugar
de los scripts pasamos " ftp- * " como argumento.
Podemos pasar parámetros justo después del nombre del script mientras ejecutamos el
comando bash interpreter. Puede pasar parámetros o argumentos al archivo. Solo el
comando para ejecutar el script normalmente agregando el valor de los parámetros
directamente al script. Cada parámetro es un valor separado por espacios para pasar al
script de shell.
bash scriptname.sh
La captura de pantalla anterior muestra los parámetros pasados al script, cómo lo haremos,
que explicaremos en la siguiente sección. Pero ahora mismo podemos ver que hemos
pasado los parámetros desde fuera del script usando variables de entorno bash. Incluso
puede usar strings y otros tipos de datos, pero tenga cuidado con los espacios en blanco.
El espacio en blanco hará que la variable sea un parámetro independiente. Por lo tanto,
especialmente para las strings, tenga cuidado de rodearlas estrictamente entre comillas.
Ahora, veremos cómo accedemos a esos parámetros dentro del script. Usaremos el
número de parámetros pasados en el orden, es decir, para los primeros parámetros
pasados, analizaremos (accedemos) al parámetro usando $1 como variable. El primer
parámetro se almacena en la variable $1. Además, puede asignar esta variable a cualquier
otra variable definida por el usuario que desee. Para el enésimo parámetro pasado, puede
usar $n para acceder a ese parámetro en particular. Aquí, el nombre de la variable
comienza con 1 porque el nombre de archivo / script es el parámetro 0. Si tiene más de 9
parámetros, asegúrese de usar {} alrededor del número, ya que sin el paréntesis, bash solo
verá $10 como $1 y excluirá el 0, así que use ${10} y así sucesivamente en lugar de
simplemente $10.
#!/bin/bash
El script anterior puede acceder a los parámetros desde la línea de comando / shell
usando los parámetros posicionales, que son 1, 2, 3, etc.
Accediendo a los argumentos desde el script.
Como puede ver, hemos utilizado {} para acceder a los números de variable de parámetro
desde el 10 en adelante. El script se puede usar para bucles y while para iterar sobre los
parámetros, pero lo discutiremos en secciones posteriores.
#!/bin/bash
a=$1
b=$2
p=$(($a*$b))
echo "The product of $a and $b = $p"
#!/bin/bash
if [[ -z $1 ]];
then
echo "No parameter passed."
else
echo "Parameter passed = $1"
fi
Comprobación de parámetros posicionales pasados o no.
Con este script, podemos detectar si se pasó algún parámetro posicional o no se pasó nada.
La bandera -z busca cualquier variable NULL o no inicializada en BASH. La bandera -z
devuelve verdadero si la variable pasada es NULL o no está inicializada. Por tanto,
podemos hacer uso de sentencias If-else básicas para detectar los parámetros pasados.
Como sigue:
#!/bin/bash
if [[ ! -n $1 ]];
then
echo "No parameter passed."
else
echo "Parameter passed = $1"
fi
Esta secuencia de comandos también dará la misma salida, pero estamos usando la
opción -n en lugar de -z.
Podemos usar la variable “@” para acceder a todos los parámetros pasados al script a
través de la línea de comandos. Es una variable especial que contiene la matriz de
variables en BASH. En este caso, lo estamos usando solo, por lo que contiene la matriz
de parámetros posicionales pasados. Podemos usarlo para iterar sobre los parámetros
pasados usando bucles o while también.
#!/bin/bash
for i in $@
do
echo -e "$i\n"
done
Usar bucles y @ variable para acceder a los parámetros como elementos de matriz.
Usamos un bucle for basado en rango para iterar hasta que haya elementos en la matriz
@. Simplemente iteramos sobre la matriz e imprimimos el elemento. Simplemente
podemos asignarlo, modificar los valores y realizar los cambios necesarios en los
parámetros y argumentos para lograr el resultado deseado del script.
También podemos imprimir los argumentos usando el ciclo while y las variables
ambientales de BASH.
#!/bin/bash
i=$(($#-1))
while [ $i -ge 0 ];
do
echo ${BASH_ARGV[$i]}
i=$((i-1))
done
Usando el bucle while para iterar sobre los parámetros pasados.
Estamos usando la variable ' # ' ya que contiene el número de parámetros pasados.
Inicializamos el número de parámetros y quitamos uno ya que vamos a usar una matriz
para iterar sobre él. Entonces, como de costumbre, el índice de la matriz comienza desde
0. Como esta matriz se inicializa desde el último elemento o parámetro pasado,
necesitamos disminuir el contador hasta 0 para imprimir cada parámetro en el orden en
que se pasa. Simplemente usamos la matriz BASH_ARGV para acceder a los parámetros
e imprimir su valor. Además, en cada iteración, disminuimos el valor de i- el iterador o
contador en uno usando las llaves dobles aritméticas. A partir de esto, simplemente
imprimimos cada parámetro pasado al script usando un bucle while como se muestra en
la captura de pantalla de salida.
Podemos usar el programa / comando getopts para analizar los argumentos pasados al
script en la línea de comando / terminal mediante el uso de bucles y sentencias de cambio
de mayúsculas y minúsculas.
#!/bin/bash
Usando getopts, podemos asignar los argumentos / parámetros posicionales desde la línea
de comando a las variables bash directamente. Esto nos permite gestionar los parámetros
de forma agradable y sistemática. En el script anterior, hemos usado dos argumentos para
almacenar las variables bash usando la sintaxis getopts, while bucles y sentencias switch-
case.
Podemos imprimir los argumentos pasados al script mediante una simple y poderosa
variable '@' que almacena todos los parámetros pasados.
#!/bin/bash
También podemos usar la variable '#' para acceder a la cantidad de parámetros pasados
desde la línea de comando. La variable # contiene básicamente el número de parámetros
/ argumentos que se pasan al script.
#!/bin/bash