From: xf0r3m
+ W poprzednim rozdziale dowiedzieliÅmy siÄ czym sÄ sieci komputerowe + i jak wyglÄ da ich konfiguracja w dystrybucjach Linuksa. Sieci sÅuÅ¼Ä + do przesyÅania danych, a te musimy dostsowaÄ za pomocÄ uzupeÅnienia + formularza na stronie internetowej lub w postaci zwykÅego pliku + tekstowego. Za obie te formy odpowiadajÄ różne ustandaryzowane zbiory + programów skÅadajÄ ce siÄ na jeden konkrent protokóÅ. + ProtokoÅów nie należy stawiaÄ obok programów, które możemy kojarzyÄ + z danÄ formÄ sposóbu przesyÅania informacji przez sieÄ. Te programy + najczÄÅciej zajmujÄ siÄ ich obsÅugÄ , zawierajÄ tym samym ich + implementacje oraz dostosowanie aby korzystanie z protokoÅu byÅo + najczeÅciej niezauważalne a koÅcowy użytkownik utrzymaÅ tylko + i wyÅÄ cznie Å¼Ä danÄ stronÄ internetowÄ lub dostÄp do zasobu dyskowego + udostÄpnionego gdzieÅ na serwerze. +
++ Aby pomiÄdzy dwoma stronami mogÅa zajÅÄ komunikacji + potrzebny jest nadawca i odbiorca. Z punktu widzenia sieci + komputerowej, każdy host jest jednoczeÅnie jednym i drugim. Jednak + patrzÄ c na to ze strony obecnie omiawianego tematu, różnica miÄdzy + stronami jest już dużo bardziej podkreÅlona. Mamy sztywny podziaÅ + miÄdzy aplikacji klienckimi danego protokoÅu, które Å¼Ä dajÄ dostÄpu + do konkretnego zasobu a serwera, które te dane udostÄpniajÄ . + Wiele serwerów okreÅla siÄ mianem usÅug sieciowych. + CzÄsto mówiÄ c o jakiÅ serwerze do sÅowa serwer dodaje siÄ + protokóÅ, który obsÅuguje. Jak możemy pamiÄtaÄ np. z rozdziaÅu 7, + nie które serwery domyÅlnie nie sÄ usÅugami sieciowymi (chociaż mogÄ , + wystarczy odpowienio jes skonfigurowaÄ). +
++ UsÅugi sieciowe majÄ za zadanie udostÄpniaÄ dane poprzez wybrane + protokoÅy. Na przykÅad coÅ co nazywamy przeglÄ darkÄ internetowÄ + opiera swoje dziaÅanie na protokole HTTP bÄ dź jego bezpieczeniejszej + wersji w postacji protokoÅu HTTPS. Programy pocztowe wykorzystujÄ + protokoÅy SMTPS oraz POP3S lub IMAPS. Wiele różnych aplikacji + sieciowych może wykorzystywaÄ różne protokoÅy lub samodzielnie + implementowaÄ format danych przesyÅanych przez sieÄ. Nie mniej jednak + wszystkie te protokoÅy rezydujÄ w warstwie aplikacji + czwartej warstwie modelu TCP/IP. +
++ W tym rozdziale nadal pozostaniemy w sieciach. Przeanalizujemy + dziaÅanie protokoÅu HTTP. Omówimy sobie usÅugÄ sieciowÄ na podstawie + SSH. Dowiemy siÄ jak uruchamiane byÅy, nie które specyficzne usÅugi + i jak sÄ uruchamiane teraz. Sprawdzimy sobie narzÄdzia diagnostyczne, + które pozwolÄ nam na sprawdzenie dostÄpnoÅci usÅugi ale również + monitorowanie przesÅanych przez nia i do niej danych. Na koniec + zajmiemy siÄ zdalnym wywoÅaniem procedur (RPC) oraz omówimy sobie + podstawowe zagadnienia zwiÄ zane z bezpieczeÅstwem. + Tematem zaawansowamym bÄdÄ gniazda. +
++ Na wstÄpie omówilÅmy sobie co tak naprawdÄ znajduje siÄ w warstwie + aplikacji. Aby byÅa możliwoÅÄ zapewnienia bezbÅÄdnego dziaÅania + wielu znanych protokoÅów, które no men omen sÄ podstawÄ komunikacji + w internecie, zespoÅy odpowiedzialne za implementacje tych standardów + czÄsto umieszczajÄ w swoich programach klienckich możliwoÅc analizy + przesyÅanych danych. W tym podrozdziale skupimy siÄ gÅównie na jednym + protokole i jednym narzÄdziu umożliwiajÄ cym Åledzenie danych + przesyÅanych za pomocÄ protokoÅu. Jednak w podrozdziale poÅwiÄconym + narzÄdziom dianostycznym dowiemy siÄ, że możemy sprawdziÄ wiÄkszoÅÄ + usÅug, za pomocÄ kilku narzÄdzi. +
++ W wiÄkszoÅci dystrybucji dostÄpne jest narzÄdzie + curl jest ono nagminnie wykorzystywane do pobierania + plików za pomocÄ protokoÅu HTTP w terminalu. Program ten jako, że + wykorzystuje protokóŠHTTP/S posiada również możliwoÅÄ przeÅledzenia + transmisji. Jako przykÅad wykorzystamy serwis pogodowy, który + przesyÅa obecnÄ sytuacjÄ pogodowÄ (lub dwu-dniowÄ prognozÄ) za ASCII. + Dla przykÅadu: +
++xf0r3m@immudex:~$ curl wttr.in/Warszawa?0\&lang=pl +Pogoda w: Warszawa + + \ / SÅonecznie + .-. 21 °C + â ( ) â â 9 km/h + `-â 10 km + / \ 0.0 mm ++
+ Na podstawie wyÅcia tego polecenia, ciÄżko jest na prierwszy rzzut + oka dostrzec, że jest to strona internetowa, ale tak wÅaÅnie jest. + ChcÄ c przeanalizowaÄ jak wyglÄ da komunikacja za pomocÄ protokoÅu + HTTP należy wydaÄ nastÄpujÄ ce polecenie: +
++xf0r3m@immudex:~$ curl --trace-ascii curl.log wttr.in/Warszawa?0\&lang=pl ++
+ Opcja --trace-ascii mówi programowi
+ curl aby zapisywaÅ on komunikaty diagnostyczne. Dodatkowo
+ ta opcja wymaga podania pliku przeznaczonego na dane wyjÅciowe. W
+ moim przypadku jest curl.log. Poniżej znajduje siÄ jego
+ zawartoÅÄ, pominÄ
Åem na poniższym przykÅadzie dane zwracane przez
+ polecenie (sÄ
one normalnie dostÄpne w terminalu po wydaniu
+ polecenia).
+
+== Info: Trying 5.9.243.187:80... +== Info: Connected to wttr.in (5.9.243.187) port 80 (#0) +=> Send header, 89 bytes (0x59) +0000: GET /Warszawa?0&lang=pl HTTP/1.1 +0022: Host: wttr.in +0031: User-Agent: curl/7.74.0 +004a: Accept: */* +0057: +== Info: Mark bundle as not supporting multiuse +<= Recv header, 17 bytes (0x11) +0000: HTTP/1.1 200 OK +<= Recv header, 32 bytes (0x20) +0000: Access-Control-Allow-Origin: * +<= Recv header, 21 bytes (0x15) +0000: Content-Length: 314 +<= Recv header, 41 bytes (0x29) +0000: Content-Type: text/plain; charset=utf-8 +<= Recv header, 37 bytes (0x25) +0000: Date: Wed, 23 Aug 2023 08:23:51 GMT +<= Recv header, 2 bytes (0x2) +0000: +<= Recv data, 314 bytes (0x13a) +0080: . .[38;5;226m ... ( ) ... .[0m .[1m....[0m .[38;5;154m9.[0 +00c0: m km/h.[0m . .[38;5;226m `-... .[0m 10 km.[0m +0100: . .[38;5;226m / \ .[0m 0.0 mm.[0m . +== Info: Connection #0 to host wttr.in left intact ++
+ Pierwsze dwie linie, sÄ
to linie informujÄ
ce nas o uzyskanym adresie
+ IP oraz o tym czy poÅÄ
cznie powiodÅo siÄ. JeÅli tak jest, to wówczas
+ wysyÅany jest nagÅówek, - w nagÅówkach HTTP
+ przeważnie znajdujÄ
siÄ informacje kontrolne dla programów, które
+ bÄdÄ
zajmowaÄ siÄ interpretowaniem treÅci przesÅanej przez serwer.
+ No wÅaÅnie. Można by na logikÄ rzecz ujÄ
Ä, że to przeglÄ
darka powinna
+ pobraÄ Å¼Ä
danÄ
stronÄ WWW. W rzeczywistoÅci to klient przesyÅa
+ jedynie nagÅówek z żÄ
daniem. PrzyglÄ
dajÄ
c siÄ pierwszej linii
+ nagÅówka
+ rozpoczynajcego siÄ liczbÄ
: 0000
+ (Ta liczba to bajt rozpoczÄciÄ
tych danych w Åadunku/bloku danych
+ przesyÅanych w pakietach sieciowych). Zawiera ona sÅowo kluczowe
+ GET NastÄpnie wystÄpuje wartoÅÄ
+ żÄ
dania (czego sobie życzysz), na podstawie tych informacji skrypt
+ jest wstanie zwróciÄ odpowiedni stan pogodowy, w przypadku kiedy
+ poprostu odwiedzamy jakÄ
Å witrynÄ to najczÄÅciej po sÅowie
+ GET wystÄpuje ukoÅnik (/). Serwery wówczas
+ interpretujÄ
to, że żÄ
danie dotyczy gÅównie pliku index.html
+ zapisanego w katalogu przypisanym na serwerze do danej witryny.
+
+ Uwaga! Jeden serwer WWW, może utrzymaÄ kilka jak nie kilkanaÅcie lub + kilkadziesiÄ t różnych stron internetowych. Wszystko zależy od jego + ustawieÅ oraz wydajnoÅci sprzÄtowej, która go utrzymuje. Dlatego też + wiele stron może kierowanych pod jeden adres IP. Taka funkcjonalnoÅÄ + nazywa siÄ hostingiem. +
+
+ W naszym przypadku również żÄ
damy gÅównego pliku tego hostingu, w
+ nagÅówku natomiast przekazujemy dane, które pomogÄ
w uzyskaniu
+ żÄ
danych przez nas danych. Jest to jedna z cech protokoÅu HTTP. Dane
+ (gÅównie do aplikacji, ponieważ statyczne strony rzadko interpretujÄ
+ jakieÅ dane) mogÄ
byÄ przekazywane jako rozwiniÄcie adresów jest to
+ tak zwana metoda GET lub w postaci odrÄbnego pakietu danych
+ poza widocznoÅciÄ
dla zwykÅego użytkownika - metoda POST.
+ Przy użyciu metody POST najczÄÅciej przesyÅane sÄ
dane
+ uzupeÅnionych formularzy na stronach WWW. Po danych przekazywanych
+ aplikacji (w tym przypadku) wstepujÄ
już informacje kontrolne dla
+ samego protokoÅu HTTP w linii 0022 (bÄdÄ używaÅ takich
+ oznaczeÅ) wystÄpuje pole nagÅówka
+ Host: zawiera ono nazwÄ hosta do,
+ którego kierujemy nasze żÄ
danie. NastÄpne pole nagÅówka to
+ User Agent:, to pole zawiera
+ informacje jakiego programu klienckiego WWW używamy. Ta informacja
+ jest zapisywana w plikach dziennika serwera wraz z adresem IP.
+ NarzÄdzia takie jak curl lub podobny mu i bardziej
+ powszechny wget pozwalajÄ
na zmianÄ tej wartoÅci, za pomocÄ
+ jednej opcji możemy podaÄ siÄ za np. program indeksujÄ
cy jednej z
+ wyszukiwarek. Trzecim polem jest rodzaje danych jakie może
+ zinterpretowaÄ, polecenie to sÅuży gÅównie pobieraniu treÅci wiÄc
+ rzadko kiedy je interpretuje. WyjÄ
tkiem może byÄ omawiany przez nas
+ przykÅad. Ostatnim pole jest znak nowego wiersza, który koÅczy
+ nagÅówek żÄ
dania. Teraz nastÄpuje jego przesÅanie i oczekiwnaie na
+ odpowiedź serwera.
+
+ W przypadku odpowiedzi jak możemy zauważyÄ przesyÅanych jest wiele + nagÅówków przedstawiajÄ cych pojedyÅcze pola. Nie bÄde ich tutaj + wszystkich opisywaÅ, jednak na uwagÄ zasÅugujÄ jedna informacja, + która zostaÅa wczeÅniej pominiÄta. Otóż, w polu metody Å¼Ä dania lub + w pierwszym naglówku odpowiedzi znajduje siÄ wykorzystywana w + transmisjii wersja protokoÅu HTTP. Wersja 1.1 jest obecnie + standardem, jednak obecnie w stanie proponowanych standardów sÄ + wersje 2 i 3. Seria nagÅówków odpowiedzi koÅczy siÄ w taki sam + sposób jak w przypadku nagÅówka Å¼Ä dania, znakiem nowego wiersza. + NastÄpnie odebrany zostaje pakiet danych a dane w nim zawarte + trafiajÄ do użytkownika. +
++ Tak moglibyÅ to wywnioskowaÄ na podstawie danych diagnostycznych + zwróconych przez program curl. WyglÄ da to nieco inaczej, ale + różnice wystÄpujÄ tylko w przedstawieniu danych. Otóż otrzymujÄ c + pakiet protokoÅu HTTP, nie ma w nim podziaÅu na sekcje nagÅówka i + danych. Nie ma także dwóch odrÄbnych pakietów. Wszystko spakowane + jest w jednej paczce, a curl na podstawie znaku nowego + wiersza jest jedynie oddzieliÄ te dane. +
++ Innym sposobem na wejÅcie interakcje np. z protokoÅem HTTP jest + wykorzystanie zapomnianego już programu Telnet. + Telnet kiedyÅ sÅużyÅ do tego do czego sÅuży teraz + protokóŠSSH. Do zdalnego poÅÄ czenia siÄ z powÅokÄ . + Telnet sam w sobie również jest protokoÅem. Obecnie telnet rzadko + jest spotykany w swojej pierwotnej formie, chyba że w postaci + lokalnej konsoli w systemach wbudowanych. +
++xf0r3m@immudex:~$ telnet example.org 80 > telnet.log +Trying 93.184.216.34... +Connected to example.org. +Escape character is '^]' +GET / HTTP/1.1 +Host: example.org + +HTTP/1.1 200 OK +Age: 126394 +Cache-Control: max-age=604800 +Content-Type: text/html; charset=UTF-8 +Date: Wed, 23 Aug 2023 11:28:50 GMT +Etag: "3147526947+ident" +Expires: Wed, 30 Aug 2023 11:28:50 GMT +Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT +Server: ECS (dcb/7F7F) +Vary: Accept-Encoding +X-Cache: HIT +Content-Length: 1256 +... ++
+ Po wielokropku wystÄpuje już tylko kod HTML strony. Polecenie
+ telnet wymaga aby port, pod który
+ należy siÄ podÅÄ
czyÄ. Aby otrzymaÄ odpowiedź musimy metodÄ
+ (GET), ewentualne dane/żÄ
dany plik
+ (/), wersje protokoÅu
+ (HTTP/1.1) w drugiej lini nagÅówka
+ należy podaÄ nazwÄ hosta
+ (Host: example.org), ze wzglÄdu na
+ to aby serwer WWW wiedziaÅ z jakiej witry przesÅaÄ odpowiedź.
+
+ ProtokóŠjest może trochÄ maÅo interaktwny przy takim poÅÄ czeniu, ale + np. usÅugi pocztowe sÄ już bardziej skore do rozmowy. +
+2022; COPYLEFT; ALL RIGHTS REVERSED;