Protocollo HTTP e HTTPS

P

NOVITA’ 2019!

Parliamoci chiaro: non puoi pensare di diventare un ETHICAL HACKER senza conoscere almeno un LINGUAGGIO DI PROGRAMMAZIONE!

Accedi adesso al corso “PYTHON PER HACKER – 2019”

Oltre 10 ORE di VIDEO LEZIONI e oltre 100 CODICI PRONTI DA ESEGUIRE!




Il browser è l’elemento che ci permette di interagire con le web application, o meglio, oltre al browser abbiamo bisogno di due protocolli fondamentali: HTTP e HTTPS.

HTTP

L’HTTP (Hypertext Transfer Protocol) è un protocollo STATELESS ovvero non mantiene la connessione, agisce secondo il modello CLIENT/SERVER ovvero il client invia una richiesta e il server risponde alla stessa richiesta.

Volendo inviare una chiamata ad un sito web ci saranno quindi 2 richieste:

  • RICHIESTA HTTP (HTTP Request)
  • RISPOSTA HTTP (HTTP Response)

La versione “sicura” del protocollo HTTP si chiama HTTPS e utilizza una serie di protocolli, algoritmi e librerie di sicurezza con lo scopo di rendere cifrato il traffico web.

Cosa si intende per sito sicuro?

Negli ultimi anni c’è stata una graduale e sempre più crescente migrazione dal protocollo HTTP (definito protocollo NON SICURO) verso il protocollo HTTPS (definito protocollo SICURO).

Google da settembre ha “marchiato”come NON SICURI tutti i siti che utilizzeranno ancora il protocollo HTTP.

Vediamo adesso un esempio di sito che utilizza il protocollo HTTP e che quindi non è considerato sicuro:

Notare il warning che appare cliccando sulla “i” del browser Chrome: “la tua connessione a questo sito non è protetta”.

Viceversa facciamo riferimento ad un sito che utilizza il protocollo sicuro HTTPS:

In questo caso “la connessione è protetta” e le informazioni inviate tramite questo protocollo restano PRIVATE.

Wireshark e l’analisi di un sito HTTP/HTTPS

Accediamo adesso ad un sito web che utilizza il protocollo HTTP e che ci dia la possibilità di inserire alcuni dati personali (le credenziali di accesso, ad esempio) all’interno di quest’ultimo:

Avviamo lo sniffer di pacchetti di rete e analizziamo il traffico web prodotto dalla nostra richiesta al sito web:

Come possiamo osservare tutto il traffico è in chiaro, possiamo vedere tutti i pacchetti generati e il loro contenuto, comprese le informazioni che abbiamo inserito nel momento dell’accesso al sito web:

Questo quindi il motivo per cui i siti HTTP sono considerati NON SICURI: se intercettiamo il traffico web siamo sempre in grado di leggere il contenuto dei pacchetti.

Adesso il test con un protocollo considerato invece sicuro come HTTPS; di seguito quello che possiamo osservare catturando il traffico di tale sito web:

Vediamo solo dei generici pacchetti “Application Data” ma quello che è presente all’interno di essi, a noi è completamente sconosciuto.

Richiesta e risposta HTTP

Accediamo adesso ad un sito web e analizziamo, nel dettaglio, le richieste e le risposte HTTP:

  • Richiesta HTTP inviata dal CLIENT -> GET / HTTP/1.1
  • Risposta HTTP ricevuta dal SERVER-> HTTP/1.1 200 OK

Metodo GET

I metodi HTTP definiscono il tipo di scambio dati che intercorre tra il client ed il server, alcuni di questi sono:

  • GET
  • POST
  • HEAD
  • TRACE
  • PUT
  • DELETE

Il metodo GET è usato per richiedere dati al server. Una richiesta di tipo GET può acquisire dei parametri dal client passati alla web application via URL.

Questo è il metodo GET visualizzato tramite Wireshark:

Nel dettaglio:

Appena effettuata la richiesta, il server ci comunicherà la risposta:

Anche qui il dettaglio:

Oltre che al contenuto richiesto dal client con il metodo GET:

Metodo POST

Il metodo POST è usato per passare dati al web server tramite il “BODY” della richiesta e non tramite URL come il metodo GET, quindi è generalmente considerato più sicuro.

La differenza rispetto al metodo POST è una differente gestione dello scambio dati:

  • Con il metodo GET passiamo i parametri della richiesta tramite URL (metodo poco sicuro)
  • Con il metodo POST passiamo i paramentri tramite il “body” della richiesta (metodo più sicuro)

Vediamo adesso un esempio pratico; accediamo ad un sito web in HTTP e inseriamo dei valori nella text box di ricerca:

Ciò che si osserva immediatamente, catturando con wireshark i pacchetti, è che la richiesta sta utilizzando il metodo POST per passare i dati inseriti in input e non il metodo GET:

Lo scambio dei dati non è quindi visibile nell’URL della richiesta:

Naturalmente possiamo sempre vedere il contenuto dell’informazione perchè utilizziamo il protocollo HTTP e non quello HTTPS.

Connettiamoci adesso ad un altro sito, anche in questo caso, inserendo un testo casuale:

Se eseguiamo la ricerca possiamo osservare che il contenuto inserito è presente nell’URL:

E per ulteriore conferma, osserviamo il tutto tramite Wireshark:

Il fatto di passare i paramentri, come in questo caso, tramite URL è considerato il metodo meno sicuro.

URL Encoding

Per “processo di CODIFICA” si intende la trasformazione di una sequenza di caratteri in un formato ottimizzato per la trasmissione e la sicurezza del dato.

Alcune tipologie di codifica note sono:

  • URL ENCODING
  • DOUBLE ENCODING
  • BASE64 ENCODING

Diamo un occhio all’url encoding.

In questo tipo di codifica i caratteri sono convertiti in formato esadecimale e preceduti dal simbolo %. Tutti i caratteri che non appartengono alla codifica ASCII sono sostituiti dal simbolo % seguito da due cifre esadecimali.

Ciò è necessario perchè esistono dei caratteri “riservati” che non possono essere utilizzati nell’URL e quindi dobbiamo procedere con una codifica, altrimenti il “parser” effettuato successivamente ci darà degli errori.

Accediamo adesso ad un sito, dove possiamo inserire del testo, scegliendo il carattere speciale “/”.

Se eseguiamo la ricerca, quello che otteniamo nell’URL è la seguente stringa:

Il carattere speciale “/” inserito, si è trasformato in “%2F”.

Naturalmente esistono delle tabelle che ci forniscono la corrispondenza tra carattere speciale e relativa codifica esadecimale:

Spero che l’articolo vi sia piaciuto! Alla prossima!

Aggiungi un commento

Articoli recenti

Categorie