User Tools

Site Tools


http

This is an old revision of the document!


HTTP

HTTP (Hypertext transfer protocol) je protokol koji služi za prijenos resursa različitih formata (tzv. hypermedia). Web preglednici (engl. browsers) koriste ga za komunikaciju sa web sjedištima (engl. websites). Protokol prati tradicionalni model klijent-poslužitelj. Klijent otvara konekciju da bi se povezao s poslužiteljem, zatim čeka potvrdu poslužitelja da je primio zahtjev i tek tada kreće njihova komunikacija. Klijent i poslužitelj komuniciraju preko zahtjeva. HTTP zahtjev (eng. request) je poruka koju web preglednik (klijent) šalje nekom poslužitelju kako bi dohvatio sadržaj potreban za učitavanje i prikaz određene stranice. Poruke HTTP protokola imaju dobro definiranu i standariziranu formu. HTTP je protokol bez očuvanja stanja (eng. stateless protocol), što znači da poslužitelj ne čuva stanje i ne pamti podatke između dviju konverzacija s istim klijentom.

Važniji dijelovi HTTP zahtjeva su: HTTP verzija, HTTP metoda, zaglavlje (eng. header), tijelo zahtjeva i URL resursa (npr. slike, teksta, web forme i slično) kojem se želi pristupiti.

HTTP metode

Unutar svakog HTTP zahtjeva koristi se neka HTTP metoda kojom je definirano koju akciju treba izvesti nad određenim resursom. Najvažnije i najčešće korištene metode su GET, POST, PUT, DELETE i HEAD.

GET metodom dohvaća se sadržaj željenog resursa (npr. GET /index.html). U pravilu se GET metodom isključivo dohvaćaju traženi podatci, a za slanje se koriste druge metode. Svi traženi podatci nalaze se u tijelu odgovora poslužitelja.

POST metoda služi za izmjenu i slanje podataka poslužitelju. U pravilu tip podataka koji se šalju mora biti unaprijed definiran u zaglavlju da bi ih preglednik znao ispravno interpretirati. Važno je da informacije u tijelu semantički odgovaraju resursu koji treba stvoriti ili promijeniti. Primjerice, ako u bazu želimo pohraniti ime, prezime i ID, tijelo zahtjeva može izgledati ovako: ime=ivica&prezime=ivić&ID=27. Ukratko, važno je samo da su u zahtjevu sadržane sve potrebne informacije da bi se podatak uspješno poslao poslužitelju. U svakodnevnom korištenju to nije problem za korisnika jer se podatci većinom šalju preko već definirane forme koja automatski generira zahtjev u formatu koji poslužitelj razumije i ne dopušta slanje podataka prije nego što sva potrebna polja budu popunjena.

PUT metodom se zahtijeva izmjena ili stvaranje određenog resursa. Za razliku od POST metode, PUT metoda je idempotentna. To znači da je svejedno jesmo li jedan PUT zahtjev poslalo jednom ili više puta zaredom. Nakon prve promjene, naknadni zahtjevi PUT metode više neće vršiti izmjene, dok slanjem više POST zahtjeva zaredom izmjene mogu biti izvršene svaki put, npr. dodavanje istog podatka više puta.

DELETE metodom se zahtijeva brisanje određenog resursa na poslužitelju.

HEAD metoda dohvaća samo zaglavlja (eng. headers) odgovora u kojima su sadržani metapodatci o resursu, npr. veličina resursa i dostupnost resursa na poslužitelju. Ova metoda koristi se kada želimo dohvatiti i provjeriti određene podatke bez da pritom dohvaćamo cijeli resurs. Zaglavlja odgovora su ista kao što bi bila u slučaju da se koristi GET metoda, ali HTTP odgovor ne sadrži tijelo.

PRIMJER - Demonstracija HTTP metoda alatom curl
Na terminalu na Linuxu ili iz Command prompta na Windowsu pokrećemo curl naredbe redom:

--head https://platforma.hacknite.hr/

Ova naredba dohvaća samo zaglavlja HTTP odgovora s navedene stranice.  Rezultat izvršavanja metode HEAD pomoću curla

https://platforma.hacknite.hr/. 

Ova naredba dohvaća cijelu navedenu stranicu. Za izvršavanje GET metode nisu potrebne nikakve opcije jer curl standardno koristi HTTP GET metodu. U rezultatu ispod primjećujemo da se izvršenjem GET metode dohvaća HTML web stranice. Rezultat izvršavanja metode GET pomoću curla

PRIMJER - Zadatak s Hacknite platforme - e-trgovina “Union”
Na linku http://chal.platforma.hacknite.hr:10010/registration.php nalazi se forma za registraciju. Pri unosu nekog korisničnkog imena i lozinke i pritiska na gumb „Registriraj se“ web browser šalje POST zahtjev na server s upisanim korisničkom imenom i lozinkom.

Ova akcija može se izvršiti i pomoću curla. Potrebno je koristi -X opciju uz vrijednost POST, kojom se podrazumijevana metoda GET mijenja u POST. Zastavicom -d se unose vrijednosti koje se šalju na server u POST zahtjevu. Forma na web stranici http://chal.platforma.hacknite.hr:10010/registration.php na kojoj ćemo registraciju izvršiti pomoću curla

Pregledom HTML sadržaja stranice, vidimo da su imena HTML elemenata polja za unos „username“ i „password“. Sada se pomoću te informacije može sastaviti curl naredba. Za razdvajanje parametara koristi se znak &. Napomena: Naredba se piše u jednoj liniji, bez oznake novog reda.

curl -X POST -d "username=MarkoMarkic&password=JakaLozinka123!!" 
http://chal.platforma.hacknite.hr:10010/registration.php

Izvršavanjem ove naredbe od stranice se dobiva HTML odgovor na kojem se vidi potvrda da je registracija uspješno obavljena. Uspijeh! Sada se podatci korišteni u curl naredbi mogu iskoristiti za prijavu na stranici.

HTTP zaglavlja

HTTP zaglavlja (eng. headers) sadržavaju dodatne informacije i metapodatke HTTP zahtjeva i odgovora. Jedno HTTP zaglavlje sastoji se od imena zaglavlja, dvotočke i vrijednosti zaglavlja, npr. Connection: keep-alive. Postoje standardizirana zaglavlja koja su prisutna u gotovo svim HTTP zahtjevima i odgovorima. Mogu se koristiti i proizvoljna zaglavlja specifična za neku web aplikaciju.
Zaglavljima zahtjeva mogu se poslati dodatne informacije uz zahtjev kako bi server prikladno odgovorio, kao što su željeni format odgovora (npr. JSON) ili dodatne informacije o klijentu koji stvara zahtjev (User-agent zaglavlje). U zaglavljima zahtjeva mogu se nalaziti i autentifikacijski kolačići ili tokeni s pomoću kojih poslužitelj provjerava ima li klijent pravo pristupa resursu.
Zaglavlja odgovora sadržavaju dodatne informacije o odgovoru, primjerice je li odgovor dohvaćen iz predmemorije (engl. cache) ili koji software koristi poslužitelj s kojeg je poslan odgovor.

Neki tipovi zaglavlja:

  • Cookie - koristi se uglavnom u zahtjevima, a manje u odgovorima. U njemu se nalaze parovi vrijednosti <ime kolačića> = <vrijednost kolačića>. Kolačiće generiraju web serveri te ih predaju korisnicima u odgovoru unutar Set-Cookie zaglavlja. Zatim ih korisnički preglednik pohranjuje u trajnoj memoriji i uključuje u naknadne zahtjeve prema tom poslužitelju. Većinu kolačića poslužitelj generira zasebno za svakog korisnika te ih koristi kako bi očuvao korisničku sjednicu. Zbog toga napadač može krađom kolačića nekog korisnika oponašati njegov identitet i time izvršavati akcije za koje je samo korisnik-žrtva ovlašten.
  • Content-Type - koristi se za definiranje tipa resursa koji se šalje u odgovoru ili zahtjevu kako bi ga preglednik znao ispravno interpretirati. Primjeri mogućih vrijednosti su „image/png“ za slike u .png formatu, „application/json“ za podatke poslane u JSON formatu, „application/zip“ za komprimirane arhive i slično
  • CSRF (Cross Site Request Forgery) - tajna, jedinstvena i nepredvidivo generirana vrijednost koja se koristi za sprječavanje CSRF napada. Web serveri generiraju jedinstven CSRF token za svakog korisnika koji se naknadno koristi u komunikaciji između korisnika i poslužitelja. Služi za potvrdu da korisnički zahtjev nije zlonamjeran kako se ne bi mogla zloupotrebiti funkcionalnost korisničkog tokena sjednice i izvršiti neželjena akcija na web stranici.
  • User-Agent - koristi se samo pri zahtjevima. U njemu su definirani operacijski sustav i preglednik koji se koriste za podnošenje zahtjeva. Na temelju ovog zaglavlja, poslužitelj može odlučiti poslati drugačiji sadržaj odgovora ovisno o korisnikovom pregledniku i operacijskom sustavu. Ne podržavaju svi preglednici sve funkcionalnosti, stoga je važno da poslužitelj zna otkuda dolazi zahtjev. Primjer jedne vrijednost zaglavlja User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36.

HTTP kolačići

HTTP kolačići (eng. cookies) uglavnom su mali zapisi informacija koje web poslužitelj šalje klijentu. Kolačić se stvara na web poslužitelju, interakcija slanja i prihvaćanja kolačića se odvija pomoću web preglednika, a pohranjuju se na klijentskom računalu.

Jedna od glavnih primjena HTTP kolačića je autentifikacija. Nakon što se korisnik autentificira na web sjedište, poslužitelj pošalje autentifikacijski kolačić pregledniku. Taj autentifikacijski kolačić se u pravilu šalje u svakom narednom HTTP zahtjevu dok se korisnik ne odjavi, što omogućava poslužitelju da provjeri koji korisnik je napravio zahtjev bez da korisnik mora uvijek iznova napraviti zahtjev.

PRIMJER Zadatak s Hacknite platforme - Admin naručivanje

Eko trgovina je uključila mogućnost naručivanja proizvoda preko svoje stranice. Svi posjetitelji mogu 
bez ikakvog problema naručiti bilo koji proizvod kojeg trgovina nudi. Naravno, vjerni korisnici imaju 
mogućnost i naprednog naručivanja. No potrebno je prijaviti se. Na prvi pogled, stranica nema forme za prijavu.

Flag je u formatu CTF2022[brojevi]
http://chal.platforma.hacknite.hr:7001 

Odlaskom na stranicu zadatka i odabirom stranice za naručivanje u izborniku vidi se sljedeća poruka:

Otvaranjem zadatka u Firefox browseru koji koristi Burp suiteov proxy i uključivanjem presretanja zahtjeva možemo presresti HTTPS komunikaciju sa stranice zadatka. Odlaskom na stranicu označenom „Naručivanje” u izborniku, u Burp suiteu se vidi presretnuti zahtjev:

Može se vidjeti kolačić s nazivom „napredno” i vrijednošću „0”. Promjenom vrijednosti tog kolačića na 1 i prosljeđivanjem zahtjeva dobiva se rješenje zadatka.

Izvori

http.1700738658.txt.gz · Last modified: 2025/12/01 11:40 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki