3 Strumenti per analizzare il protocollo HTTP e scoprire il server remoto

L’information gathering è la prima fase di un attacco. Si tratta di un’operazione finalizzata alla raccolta del maggior numero possibile di informazioni sull’obiettivo da poter utilizzare per lo sviluppo di una strategia di attacco.

Se l’attacco è rivolto ad un web server le informazioni fondamentali da scoprire saranno
il tipo di web server e la versione. In base a queste informazioni si potrà sviluppare il piano di attacco.

Per esempio, se il server fosse un Apache molto probabilmente la piattaforma sarebbe Linux e utilizzerebbe PHP come linguaggio per le web application; se invece il server remoto venisse identificato come Internet Information Server della Microsoft la piattaforma sarebbe sicuramente Windows e le web aplication sarebbero scritte in ASP/.NET.

Il metodo più semplice per ottenere queste informazioni è chiederle al server! Ogni volta che consultiamo una pagina web il server, in modo trasparente per l’utente comunica con il browser tramite un “linguaggio” (un protocollo per essere più precisi) chiamato HTTP. Un particolare frammento di questi dati HTTP (pacchetti di dati) denominato “header” (intestazione) contiene tutte queste informazioni.

Come visualizzarle? Esistono diversi metodi. Quello più sofisticato è quello di lanciare uno sniffer sulla propria macchina (come tcpdump o Wireshark), catturare un po’ di dati mentre si naviga comodamente in rete col browser e analizzarli successivamente filtrando i dati con il protocollo HTTP.

Esistono altri metodi più immediati, come estensioni Firefox e siti web che offrono strumenti in grado di effettuare questo tipo di attività. E poi ci sono gli strumenti da linea di comando comenetcat. Vediamo in dettaglio.

TcpQuery

Il primo strumento che presento è TcpQuery. Il funzionamento è molto semplice. Basta inserire l’indirizzo del web server da analizzare nella text-box etichetta “server”; nell’altra text-box è già presente la stringa HTTP: GET / HTTP/1.0. Cliccando su GO si avvia l’interrogazione.
Proviamo con il server www.libero.it. Il risultato è il seguente:

HTTP/1.1 200 OK
Date: Wed, 06 Aug 2008 20:51:16 GMT
Server: Apache
Set-Cookie: Libero=xx.84.211.xx.1218055876475336; path=/;
expires=Wed, 24-Nov-10 20:51:16 GMT; domain=.libero.it
X-Powered-By: PHP/5.1.6
Vary: Accept-Encoding,User-Agent
Connection: close
Content-Type: text/html

di seguito tutto il corpo html sorgente. Utilizzando il comando HEAD / HTTP/1.0
al posto di GET / HTTP/1.0, ovvero sostituendo GET con HEAD si ottiene solo
l’intestazione, che è quello che ci interessa.

Analizziamo la risposta. La prima riga “HTTP/1.1 200 OK” ci comunica che la pagina è
stata trovata (codice HTTP 200); se la pagina non fosse stata trovata avremmo avuto
come risultato un codice 404, Page Not Found.

Di seguito vediamo l’ora del server (Date: Wed, 06 Aug 2008 20:51:16 GMT), il tipo
di server (Server: Apache) e la versione di PHP utilizzata (X-Powered-By: PHP/5.1.6)

Live HTTP Header

La stessa cosa si può fare con un’estensione Firefox: Live HTTP Header. La procedura è molto più semplice. Dopo avere installato l’estensione basta aprire la finestra di Live HTTP Header mentre si naviga normalmente e tutti gli header HTTP verranno “sniffati” (sia del server sia del client) e mostrati a video. Questo strumento è molto utile in particolar modo per il debug di web applications.

Questo è un esempio effettuato sempre con libero.it:

HTTP/1.x 200 OK
Date: Wed, 13 Aug 2008 20:17:38 GMT
Server: Apache
X-Powered-By: PHP/5.1.6
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

Netcat

Netcat è da anni uno degli strumenti più apprezzati dagli hacker e le sue possibilità vanno ben oltre l’interrogazione di un web server. Ormai si trova in praticamente tutte le distribuzioni Linux (Unix in generale). Esiste anche una versione per Windows.

Per gli scopi di questo articolo può essere utilizzato nel modo seguente:

si apre una shell e si digita

nc www.libero.it 80 -vv

quando la connessione viene stabilita vedremo una stringa simile a questa

vs-fe.iol.it [195.210.91.83] 80 (http) open

e quindi digitiamo la stringa del comando HTTP come abbiamo visto prima:

HEAD / HTTP/1.0 e poi due volte invio.

HTTP/1.1 301 Moved Permanently
Date: Thu, 07 Aug 2008 14:28:27 GMT
Server: Apache
Location: http://www.libero.it/
Connection: close
Content-Type: text/html; charset=iso-8859-1

Esiste un altro strumento, disponibile su tutti i computer: telnet. Se si utilizza telnet la procedura è identica a quella per netcat. In alternativa si possono utilizzare client esterni come Putty, ottimo e flessibile client telnet/ssh.

Ci sono molte cose da dire sugli header HTTP. Il fingerprinting e l’anti-fingerprinting dei server; dal mascheramento dei client agli strumenti di fingerprinting del client. E sui semplici metodi che permettono di aggirare sistemi di controllo modificando le intestazioni HTTP. Ne parlerò nei prossimi articoli.

3 Trackbacks / Pingbacks

  1. PillolHacking.Net » Aggirare i Controlli Modificando l’identità del Browser
  2. PillolHacking.Net » Le Sette Vite di Netcat
  3. PillolHacking.Net » Leggere gli header HTTP e le pagine Web con Netcat

I commenti sono bloccati.