Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
FTP 2
Come funziona FTP 2
Comandi FTP 3
FTP Attivo (e problemi) 4
FTP Passivo (soluzioni) 5
TELNET 6
EMAIL 9
MIME 11
HTTP 13
Il servizio di rete in questione è il “trasferimento file”, e come tale sarà composto di:
1. un client FTP
2. un server FTP
3. un protocollo applicativo: FTP
Quando un utente vuole collegarsi ad un server FTP, userà il proprio client FTP per
mettersi in contatto col server.
Ma esistono anche software con interfaccia grafica per fare ciò, come filezilla
USER username
PASS password
Attenzione: FTP è considerato insicuro perché tutto ciò che è trasferito tra client e server
viene trasferito in chiaro (senza cifratura di alcun tipo!) ed è facilmente intercettabile.
4. A questo punto, il server apre una nuova connessione TCP verso il client sulla
porta 20, per il trasferimento del file richiesto…
Il problema è che il router non è in ascolto sulla porta 20, e trattandosi di una nuova
connessione, non è possibile fare SOURCE NATTING come per la navigazione web.
L’unica soluzione sarebbe fare DESTINATION NATTING, ovvero aprire una porta del router
che colleghi qualunque pacchetto ricevuto su tale porta al mio client.
5. Ora il server può inviare al client il file richiesto tramite la connessione aperta.
In questo caso non ci sono problemi perché entrambe le connessioni (controllo e dati)
vengono aperte dal client.
Per questa ragione, l’applicativo telnet può essere usato per collegarsi e dialogare con
qualunque altro server che usi un protocollo testuale, come appunto FTP:
USER anonymous
PASS qualunque
ci spostiamo in una cartella:
CWD ietf/ftpext/
PASV
Questi numeri sono indirizzo IP e porta a cui dobbiamo collegarci per ricevere il file:
IP: 4.31.198.44
Porta: dobbiamo moltiplicare la penultima cifra per 256 e sommarla all’ultima cifra:
Ora che conosciamo IP e porta sulla quale il server si è messo in ascolto, richiediamo il file
desiderato con il comando RETR (retrive):
RETR ftpext-charter.txt
Si tratta di un file di testo, quindi vedremo comparire a shell il contenuto del file...
Nella prima shell possiamo leggere i messaggi del server sulla connessione di controllo:
“150 Opening ASCII mode data..”
“226 Transfer complete”
Questo era solo un semplice esempio, con l’applicativo telnet possiamo “dialogare” con
qualunque servizio che usi un protocollo “testuale”!
Il messaggio può anche passare per un server intermedio (relay) prima di raggiungere il
server di destinazione.
Quando Eva apre il MUA (Outlook), questo scaricherà dalla casella tutte le nuove mail.
Questo può avvenire con due protocolli diversi:
● POP3: “copia” le email dal server sul computer (e magari dopo le elimina dal server)
● IMAP: “consulta” la casella mail direttamente dal server, senza eliminare al termine.
ESEMPI PRATICI:
Invio di una mail con telnet. ⇒ Lezione 7.3.2
Spoofing di un messaggio ⇒ Lezione 7.3.3
Vengono aggiunti alcuni campi all’header del messaggio per segnalare la presenza di
contenuti MIME per non “mandare in crisi” i programmi di posta:
Viene definita una boundary string: sequenza di caratteri che delimita inizio e fine di una regione.
Esempio:
MIME-Version: 1.0
Date: Sun, 1 Sep 2019 15:40:08 +0200
Message-ID: <CAOJ+Tdv8FbGEOFLKiY3jPKvxNSSLus02UsYHSss6Bp5i1+h1Ng@mail.gmail.com>
Subject: allegato di prova
From: Moreno <moreno@gmail.com>
To: morro <morro@gmail.com>
Content-Type: multipart/related; boundary="0000000000006e11d605917dfe59"
--0000000000006e11d605917dfe59
Content-Type: multipart/alternative; boundary="0000000000006e11d305917dfe58"
--0000000000006e11d305917dfe58
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
=C3=A8 meglio se dai un'occhiata a questo screenshot:
[image: immagine.png]
--0000000000006e11d305917dfe58
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>=C3=A8 meglio se dai un'occhiata a questo screens=
hot:</div><div><br></div><div><div><img src=3D"cid:ii_k010v0pr0" alt=3D"imm=
agine.png" width=3D"452" height=3D"27"><br></div></div></div>
--0000000000006e11d305917dfe58--
--0000000000006e11d605917dfe59
Content-Type: image/png; name="immagine.png"
Content-Disposition: attachment; filename="immagine.png"
Content-Transfer-Encoding: base64
X-Attachment-Id: ii_k010v0pr0
Content-ID: <ii_k010v0pr0>
AAAACXBIWXMAAA7EAAAOxAGGIZhGIZhzYBzYTEMwzAMw7AW5v8A4Qn+LbTfV8YAAAAASUVORK5CYII=
--0000000000006e11d605917dfe59--
L’ultima parte contiene l’allegato in codifica base64, uno standard per codificare contenuti
binari di qualunque tipo come caratteri stampabili.
URL
Può riferirsi a qualunque genere di risorsa e ha la seguente sintassi:
Ad esempio:
HTML
È un linguaggio di markup per la descrizione delle pagine web. Non segue rigide regole
per il posizionamento degli elementi ma lascia al browser l’interpretazione finale, quindi
la stessa pagina può apparire in modo diverso su browser differenti.
HTTP
Simile ad FTP, ma i comandi di controllo e il trasferimento dati avvengono nella stessa
connessione.
Definizioni:
● User Agent (UA): il software che viene usato per la navigazione (ES: Firefox)
● Origin Server: il web server che fornisce la pagina richiesta.
NB: il protocollo HTTP prevede che una richiesta possa passare per più nodi, come Proxy,
Tunnel e Gateway per ragioni di performance e/o controllo e filtraggio.
Il corpo del messaggio è il contenuto della risorsa richiesta. In questo caso, la pagina web.
Metodi HTTP
I più importanti:
● GET: Richiede la risorsa indicata, come visto precedentemente.
● POST: Richiede una pagina indicata, ma diversamente da “GET” passa ad essa
informazioni aggiuntive nel payload del messaggio.
è usato per:
○ Inviare i dati compilati di un modulo
○ Commentare un post in un forum
○ …
● PUT: Invia il contenuto del payload al server.
○ Usato per creare o aggiornare una risorsa sul server
● DELETE: rimuovere una risorsa
Cookies
HTTP non è in grado di collegare tra loro una serie di richieste provenienti dallo stesso
utente (è un protocollo stateless). Per mantenere uno “stato della connessione” si
utilizzano degli header HTTP aggiuntivi: “Cookie” e “Set-Cookie”.
Cookie: sono “variabili”, o meglio, associazioni “attributo = valore” che il server invia al
browser per mantenere informazioni sullo stato.
cookie: session-id=257-2964118-6343100;
session-token="WWUp1ez8smhIQ+vNENIiDZKC2eUtgMZnfJ7/bfno1tCRrAi2cImtCmZaESx59k5kbhfc6ARgxQUKJ4
6Ztq9tcN7WtCik8cJ039aJrma=="; session-id-time=2084187201l
ESEMPI PRATICI:
Demo cookies, modalità sviluppatore e cookie stealing ⇒ Lezione 7.5.3
Autenticazione HTTP
L’autenticazione dell’utente è tipicamente gestita tramite tecnologie implementate nel sito
stesso, ma per i piccoli progetti in cui non è richiesta una autenticazione particolarmente
sicura, HTTP fornisce un meccanismo di autenticazione “basilare” in cui è richiesto
user:password cercando di accedere ad una “zona” protetta di un sito web identificata da
un “Realm” (regno) - possono esserci più “zone” identificate da “Realm” diversi:
Basic Authentication
Username e password sono codificati in base64 ed inviati al server nell’header
Authorization della richiesta HTTP.
NB: NON sono crittografati! chiunque intercetti questo header HTTP potrà decifrare la
coppia user:password anche con un semplice tool online: https://www.base64encode.org/
MD5( MD5(user:realm:pass):nonce:MD5(metodo:digest_uri) )
Ovvero:
MD5(MD5(guest:test:guest):1d1a9c217fe0c24fb81f6d1cad3031c4:MD5(GET:/HTTP/Digest/))
MD5(871a43cd67a0196cf4f801935973deb1:1d1a9c217fe0c24fb81f6d1cad3031c4:36a1333e1a989
06f378dba493613942e)
Esercizio:
Provate voi stessi: https://jigsaw.w3.org/HTTP/Digest/
Calcolo MD5 online: https://www.md5online.org/
Decrypt MD5 online: https://www.md5online.org/md5-decrypt.html