Szybsze skanowanie nmap za pomocą parallel
Napisał: Patryk Krawaczyński
08/03/2020 w Hacks & Scripts Brak komentarzy. (artykuł nr 725, ilość słów: 302)
Z
ałóżmy, że posiadamy wiele projektów u publicznego dostawcy chmury obliczeniowej. Jeśli pracują na nich różni użytkownicy może dojść do sytuacji, w której zostanie otwartych zbyt wiele portów do danej usługi. Aby posiadać kontrolę nad tym, co nowego pojawia się w projektach można m.in. systematycznie skanować ich adresy IP. Jednak, aby cały proces nie trwał za długo nawet dla dużej ilości projektów można go zrównoleglić. Na pomoc przychodzi nam już znany parallel. Na początek musimy stworzyć listę projektów w formacie CSV:
project1,xxx.xxx.xxx.xxx project1,xxx.xxx.xxx.xxx project2,xxx.xxx.xxx.xxx
Następnie tworzymy skrypt odpalający nmap.sh:
#!bin/bash mkdir logs cat projects-ips.csv | cut -f1 -d, | sort -u | while read project; do mkdir logs/${project}; done cat projects-ips.csv | while IFS="," read -r project ip; do echo nmap -sS -T5 -Pn -p- -oG logs/${project}/${ip}.nmap $ip; done > scan.out parallel --jobs 32 < scan.out
Powyższy kod uruchamia 32 równoległe skanowania nmap
. Liczbę zadań możemy odpowiednio dostosować pod względem możliwości sieciowych i obliczeniowych maszyny źródłowej. Dzięki użyciu raportu w formacie, który jest przyjazny do przeszukiwania możemy wygenerować raport.sh wszystkich otwartych portów, jakie pojawiły się podczas skanowania:
#!/bin/bash for dirname in logs/*; do for filename in ${dirname}/*.nmap; do project=`echo $filename | cut -d/ -f2`; ip=`echo $filename | cut -d/ -f3`; ip=${ip::-5}; cat $filename | cut -d' ' -f2,4- | sed -n -e 's/Ignored.*//p' |\ awk -v ip="$ip" -v project="$project" '{$1=""; for(i=2; i<=NF; i++) { a=a" "$i; }; split(a,s,","); for(e in s) { split(s[e],v,"/"); if (v[2] == "open") { printf project "," ip ",%s,%s\n" , v[1], v[5]}}; a="" }'; done; done;
Po uruchomieniu skryptu powinniśmy otrzymać raport w formacie:
project1,xxx.xxx.xxx.xxx, 53,domain project1,xxx.xxx.xxx.xxx, 80,http project2,yyy.yyy.yyy.yyy, 443,https
Więcej informacji: Faster nmap scanning with the help of GNU parallel