Wstęp

Dzień dobry, dziś przedstawię kilka przykładów, jak można wykorzystać Basha w połączeniu z filozofią linuxa do sprawdzenia otwartych portów. Serdecznie zapraszam.

Co to jest port?

Port można określić mianem sklepu w galerii handlowej. Wyobraźmy sobie, że nasza maszyna a dokładnie jej adres IP jest taką galerią handlową. Wewnątrz galerii handlowej mamy mnóstwo sklepów. Każdy sklep oferuje coś innego i tak samo każdy port ma przypisane inne serwisy do siebie. Sklepy w galerii najczęściej są identyfikowane nazwami, porty natomiast mają swoje numery.

Ilość portów

Numer portu jest to liczba z zakresu od 0 do 65535. Niektóre numery portów (od 0 do 1023) są określone jako ogólnie znane (ang. well known ports) oraz zarezerwowane na standardowo przypisane do nich usługi, takie jak np. WWW czy poczta elektroniczna. Numery od 1024 do 49151 są określone przez IANA jako zarejestrowane, (ang. registered ), a od 49152 do 65535 jako dynamiczne/prywatne, (ang. dynamic/private ).

Pierwszy test

My First Board - Frame 1.jpg

Do naszego testu użyjemy dwóch komend: nc oraz echo.

nc, czyli netcat, posłuży nam jako server nasłuchujący na porcie. Zamiast nc możemy użyć modułu pythona python3 -m http.server .

W przykładzie poniżej uruchamiam komendę nc -lk 8000. Co oznacza, że ma nasłuchiwać i utrzymywać nasłuchiwanie na porcie 8000 niezależnie od ilości zapytań:

Untitled

I jak widzimy to działa

Ogólny wzór

Do wykonania tego zapytana oraz innych musimy zastosować następującą składnię:

echo "<Payload>" > /dev/tcp/<addr>/<port>

Naszym celem, może być bardziej ambitne zadanie typu Http GET, ale jest to żmudne zadanie i wymaga znajomości konstrukcji żądania http. Więcej informacji tutaj: https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages

Skan sieci

Możemy także przeskanować, całą naszą lokalną siec. Albo może bardziej ogólnie, jakąś listę hostów pod kątem otwartego portu, np. 80.

My First Board - Frame 2.jpg

W tym celu wykorzystamy sobie pętle for z https://mateuszlewicki.pl/skrypty/2021/Bash11.html

Konstrukcja będzie wyglądać mniej więcej tak:

# pętla for od 1 do 255
for i in {1..255}; do
	echo "tst" > /dev/tcp/192/168.0.$i/80
done

Epilog

Na dziś to tyle.

Mam nadzieję, że dowiedziałeś/łaś się czegoś nowego, albo odświeżyłeś/łaś sobie wiedzę. Tak czy inaczej, serdecznie Ci dziękuję, za przeczytanie tego posta. Jeśli masz potrzebę o cos zapytać, kontakt znajdziesz w zakładce “O Mnie”. A teraz życzę miłego dzionka i smacznej kawusi :) Do widzenia.