Come posso verificare di aver disabilitato correttamente i metodi HTTP non necessari?

4

Sto facendo un'applicazione basata sul web e ho disabilitato alcuni dei metodi HTTP che non sono necessari per il sito web (in particolare, OPTIONS , HEAD e TRACE ).

Metto questo nella httpd.conf del mio xampp per verificare se funziona:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(GET|POST|PUT)
RewriteRule .* - [R=405,L]

Come faccio a sapere se sono realmente disattivati? Come posso verificare che questa impostazione funzioni correttamente? Sono nuovo nell'amministrazione lato server.

    
posta Vainglory07 19.11.2013 - 08:10
fonte

5 risposte

6

@Owen l'ha inchiodato, ma solo per mostrare un esempio di come farlo tu stesso:

$ telnet localhost 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
TRACE / HTTP/1.0

HTTP/1.1 405 Method Not Allowed
Date: Tue, 19 Nov 2013 12:11:40 GMT
Server: Apache/2.2.22 (Linux/SUSE)
Vary: accept-language,accept-charset
Accept-Ranges: bytes
Connection: close
Content-Type: text/html; charset=iso-8859-1
Content-Language: en
Expires: Tue, 19 Nov 2013 12:11:40 GMT

Il TRACE / HTTP / 1.0 è ciò che scrivi, seguito da due newline. La prima riga della risposta ( Metodo 405 non consentito ) indica che il server Web non accetta TRACE.

Sapere come formare una richiesta dei diversi metodi può essere difficile se non si conosce già HTTP; il progetto OWASP ha alcuni esempi su come testare i metodi HTTP che possono aiutarti .

    
risposta data 19.11.2013 - 13:17
fonte
4

Puoi utilizzare uno strumento come netcat o telnet per farlo dalla riga di comando.

Se preferisci evitare la riga di comando, o nuovi comandi che non hai familiarità con strumenti come POSTMAN ti consentirà di creare comandi HTTP personalizzati in un browser e visualizzare il risultato.

Vale anche la pena notare che i comandi possono essere disabilitati per lo più con i comandi in httpd.conf e che ciò potrebbe essere preferibile. Ad esempio TraceEnable Off disabiliterà il comando TRACE.

    
risposta data 19.11.2013 - 11:21
fonte
3

Questo passaggio nel Guida al test dell'OWASP (v4) mostra come farlo in dettaglio usando netcat originale :

$ nc www.victim.com 80 
OPTIONS / HTTP/1.1
Host: www.victim.com

HTTP/1.1 200 OK
[...]
Allow: GET,HEAD,POST,OPTIONS,TRACE

Questo dipende dal server che supporta OPTIONS , e riporta l'elenco supportato - questo non è sempre il caso (come stai per scoprirlo), ma dovrebbe funzionare bene con un Apache non indurito. Uno potrebbe "indurire" un server web in modo errato rimuovendo il metodo OPTIONS e nient'altro, e la maggior parte degli scanner non noterà il problema.

Potresti anche usare GNU netcat (vecchio e non più mantenuto ora), o meglio ancora nmap ncat che supporta SSL / TLS: ncat --ssl www.victim.com 443 .

È anche possibile utilizzare lo script nmap link , ma questo è davvero utile solo per i test in anticipo (poiché rifiuta di procedere se OPTIONS non fornisce un elenco di metodi):

nmap -vvv --script=http-methods.nse \
     --script-args http-methods.retest=1 -p 80,443 www.victim.com

Dato che stai usando Apache httpd (incluso con XAMPP), in alternativa a mod_rewrite puoi anche usare il core LimitExcept direttiva per fornire un filtro simile dei metodi di richiesta. Notare che disabilitare TRACE potrebbe rendere il server HTTP non conforme alla specifica (sebbene si debba essere OK se si restituisce "Metodo 405 non consentito" come si sta facendo, o "501 Non implementato"). GET e HEAD sono gli unici due metodi di richiesta obbligatoria per un server "general-purpose".

Se hai perl con lwp e il comando GET è installato puoi enumerare questi te stesso senza fare affidamento su OPTIONS :

for mm in GET HEAD PUT POST DELETE OPTIONS PATCH TRACK TRACE PATCH; do
  printf "\n\n$mm\n======\n"
  GET -USf -m $mm http://www.victim.com/does/not/exist/OTQ4NzEzMzgxNTg3NzE3NTg1MzA2MzkK
done

Dovrai ispezionare il codice HTTP per ciascuno, 405 e 406 sono indicatori di un metodo che non è permesso. La precedente lista di metodi è incompleta, WebDAV aggiunge molti altri metodi e vedi anche il registro dei metodi HTTP IANA (ce ne sono anche di proprietari, c'era almeno un metodo con prefisso X-MS- nelle vecchie versioni di MS-Exchange).

Infine, c'è uno strumento online utile che esplora da remoto il tuo sito web e produce un rapporto dettagliato qui: link . Anche questo utilizza solo il metodo OPTIONS .

    
risposta data 19.11.2013 - 13:21
fonte
2

Sebbene questa domanda abbia molte valide e valide risposte, un altro approccio che potresti prendere è possibilmente ottenere l'addon LiveHTTPHeaders per firefox e poi riprodurre le tue richieste sul sito web, con il nuovo verbo HTTP.

Questa tecnica viene spesso definita manomissione del verbo HTTP e può essere molto utile durante il pentesting.

Qui è un rapido script python che ho scritto, che scorre su un elenco di verbi HTTP, ottiene una risposta e li stampa fuori

    
risposta data 06.12.2013 - 03:01
fonte
1

Un altro modo per farlo è utilizzare il popolare client HTTPie, alias http .

$ http TRACE https://127.0.0.1 fooHeader:barValue
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 257
Content-Type: message/http
Date: Mon, 20 Nov 2017 19:51:56 GMT
Server: Apache/2.4.27 (Amazon) mod_wsgi/3.5 Python/2.7.12

TRACE / HTTP/1.1
host: 127.0.0.1
Accept: */*
Accept-Encoding: gzip, deflate
fooHeader: barValue
User-Agent: HTTPie/1.0.0-dev
Connection: keep-alive

Notate come risponde e come restituisce anche l'intestazione personalizzata.

    
risposta data 20.11.2017 - 20:57
fonte

Leggi altre domande sui tag