Por necesidades acabe desarrollando un código en
bash cuyo objetivo es, siempre y cuando no tengamos una base de datos con los
activos de nuestra empresa, buscar un determinado servicio en las redes que
nosotros queramos.
El código se basa en la presencia de la herramienta
"Nmap" en nuestro sistema, y de la catalogación de los servicios del
mismo.
NOTA: El
código es funcional y, obviamente, mejorable.
#!/bin/bash
#
#----- NOTA
INFORMATIVA -----
#
#Desarrollado por
4null0
#
#Con el siguiente
código se buscan direcciones IP que tengan el puerto indicando (segundo parámetro)
abierto.
#
#NOTA: Las redes
donde buscar vienen definidas en el archivo indicado como parámetro.
#
#El tercer parámetro,
que es opcional, indicaría el servicio a buscar.
#
# Ejemplo del uso
del tercer parámetro:
# ./BusquedaServicio.sh Listado.txt
80 IIS (Buscaría IPs con el puerto 80
abierto y que el servicio se base en IIS de Microsoft)
if [ $# = 0 ] ||
[ $# = 1 ] || [ $# -gt 3 ]; then
echo "Este script sólo
admite dos parámetros, que se corresponde con el archivo con:\n"
echo "1.- Archivo con
IPs"
echo "2.- Puerto"
echo "3.- Nombre del
servicio a encontrar"
exit
else
#---VARIABLE QUE CONTIENEN EL
NOMBRE DEL DIRECTORIO A CREAR
directorio=Puerto-$2
#---SI EXISTE EL DIRECTORIO, PASAMOS
A MOSTRAR LOS DATOS SEGÚN NOS INDIQUEN EL RESTO DE PARÃMETROS, SI NO, CREAMOS
EL DIRECTORIO Y CONTINUAMOS CON
#---NORMALIDAD
if [ -d $directorio ]; then
echo "El
directorio existe ... se pasara a mostrar los datos ya obtenidos según el resto
de parámetros"
echo "
"
if [ -a
$directorio/InformeFinal ]; then
echo
"Borramos el archivo: InformeFinal"
echo
" "
rm
$directorio/InformeFinal
fi
else
mkdir $directorio
#----- ESCANEO DE
PUERTOS PARA CADA UNA DE LAS IPs ENCONTRADAS -----
for IP in $(cat
$1)
do
red=$(echo
$IP | awk -F "/" '{print $1}')
echo
"Escaneando: "$IP
$(nmap
-Pn -n -open --host-timeout 10m -p $2 -sV $IP -oN $directorio/$red.txt 1> /dev/null)
done
fi
#---EXISTE UN TERCER PARÁMETRO,
POR LO QUE BUSCAMOS UN SERVICIO EN CONCRETO
if [ $# = 3 ]; then
grep -e
"$2/tcp" $directorio/*.txt | awk -F " " '{print $2}' | sort -u | grep
"$3" >> $directorio/Servicios
else
grep -e
"$2/tcp" $directorio/*.txt | awk -F " " '{print $2}' | sort -u >>
$directorio/Servicios
fi
#---OBTENEMOS LAS DIRECCIONES
IPs POR CADA SERVICIO ENCONTRADO
while read i
do
echo $i >>
$directorio/InformeFinal
echo
"-----" >> $directorio/InformeFinal
grep -e
"$i$" -e "report for" Puerto-$2/*.txt | grep -e
"$i$" -B 1 | awk -F "txt:" '{print $2}' | sed 's/Nmap scan
report for //;s/open//g' | grep -v "$i$" | sort -u >> $directorio/InformeFinal
echo "
" >> $directorio/InformeFinal
done < $directorio/Servicios
cat $directorio/InformeFinal
#---ELIMINAMOS EL ARCHIVO
TEMPORAL: Servicios
rm $directorio/Servicios
fi
Un saludo Mario