Dwa skrypty co robią dużo szumu ale wpada wiele nisko wiszących owoców do koszyczka. Szybko i sprawnie. Do przeszukania wyników z smb lubię wykorzystywać https://github.com/SySS-Research/smbcrawler/tree/main
└─# cat skan_masscan.sh
#!/bin/bash
USER_DOM="w4cky"
PASS_DOM='l0l'
DOMAIN="domena"
PORTS="80,443,8080,8443,445"
RATE=10000
echo "[*] Start masscan-based scanning of 10.0.0.0/8 for ports: $PORTS"
for a in $(seq 15 255); do
PODSIEC="10.$a.0.0/16"
MASSCAN_OUT="masscan-10.$a.0.0.txt"
LIVE_FILE="live-10.$a.0.0.txt"
echo -e "\n[*] Masscan $PODSIEC..."
sudo masscan $PODSIEC -p$PORTS --rate=$RATE -oL "$MASSCAN_OUT" 2>/dev/null
if [ ! -f "$MASSCAN_OUT" ]; then
echo "[!] masscan NIE wygenerował pliku $MASSCAN_OUT – pomijam $PODSIEC"
continue
fi
awk '/^open/ {print $4}' "$MASSCAN_OUT" | sort -u > "$LIVE_FILE"
[ ! -s "$LIVE_FILE" ] && echo "[!] Brak hostów w $PODSIEC – pomijam." && continue
for ip in $(cat "$LIVE_FILE"); do
[[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] || continue
echo -e "\n[+] Skanuję hosta $ip"
PORTY=$(awk -v ip="$ip" '$4 == ip {print $3}' "$MASSCAN_OUT" | sort -n | uniq)
> urls-$ip.txt
for port in $PORTY; do
case $port in
80) echo "http://$ip" >> urls-$ip.txt ;;
8080) echo "http://$ip:8080" >> urls-$ip.txt ;;
443) echo "https://$ip" >> urls-$ip.txt ;;
8443) echo "https://$ip:8443" >> urls-$ip.txt ;;
*) ;; # inne pomiń (np. 445)
esac
done
if [ -s urls-$ip.txt ]; then
echo "[NUCLEI] nuclei -l urls-$ip.txt -silent -o nuclei-$ip.txt"
nuclei -l urls-$ip.txt -silent -o nuclei-$ip.txt
[ -s nuclei-$ip.txt ] || rm -f nuclei-$ip.txt
else
echo "[NUCLEI] Brak portów web – pomijam nuclei dla $ip"
fi
rm -f urls-$ip.txt
echo "[NMAP+SMB] nmap -sS -sV -O -Pn -p- --script smb-* $ip"
nmap -sS -sV -O -Pn -p- \
--script "smb-enum-shares,smb-enum-users,smb-os-discovery" \
--script-args "smbuser=$USER_DOM,smbpass=$PASS_DOM,smbdomain=$DOMAIN" \
$ip -oN nmap-$ip.txt
grep -qE "open|Running:|Domain|anonymous|CENTRALA" nmap-$ip.txt || rm -f nmap-$ip.txt
if command -v enum4linux-ng &>/dev/null; then
echo "[ENUM4LINUX] enum4linux-ng -A $ip -u $USER_DOM -p '****' -d $DOMAIN -o enum-$ip"
enum4linux-ng -A $ip -u $USER_DOM -p "$PASS_DOM" -d $DOMAIN -o enum-$ip
grep -qi 'Access granted\|Group\|User' enum-$ip/* 2>/dev/null || rm -rf enum-$ip
fi
done
└─# cat enum_smb.sh
#!/bin/bash
USER_DOM="w4cky"
PASS_DOM='l0l'
DOMAIN="domena"
echo "[*] Wyszukiwanie IP z portem 445 w masscan-10.*..."
IP_LIST=$(cat masscan-10.* 2>/dev/null | awk '$3 == 445 {print $4}' | sort -u)
if [ -z "$IP_LIST" ]; then
echo "[!] Nie znaleziono IP – kończę."
exit 1
fi
for ip in $IP_LIST; do
echo -e "\n[+] SMB na $ip"
echo "[CMD] smbclient -L //$ip -U '$DOMAIN\\$USER_DOM%$PASS_DOM' -g"
smbclient -L "//$ip" -U '$DOMAIN\\$USER_DOM%$PASS_DOM' -g > "smb-$ip.txt" 2>&1
if grep -q 'NT_STATUS' "smb-$ip.txt"; then
echo "[!] Błąd SMB na $ip: $(grep 'NT_STATUS' "smb-$ip.txt" | head -1)"
rm -f "smb-$ip.txt"
elif grep -q 'Disk' "smb-$ip.txt"; then
echo "[✔] Udziały zapisane do smb-$ip.txt"
else
echo "[~] Brak udziałów – czyszczę"
rm -f "smb-$ip.txt"
fi
done
echo -e "\n[✓] Zakończono."