czwartek, 16 października 2025

Szybki scan podatności w sieci

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."