Come identificare i metodi HTTP supportati da un server web?

8

Come posso identificare i diversi metodi HTTP supportati da un server web, come OPZIONI, TRACE, ecc.?

Ho provato il comando nc su Linux. Ma non funziona. Non mi mostra i metodi HTTP supportati, altre intestazioni HTTP vengono restituite insieme alla pagina HTML richiesta. C'è un'altra soluzione?

    
posta Anandu M Das 13.10.2014 - 15:16
fonte

4 risposte

8

Per RFC2616 , il metodo OPTIONS dovrebbe restituire i metodi supportati. La parola chiave è dovrebbe poiché questo non è sempre il caso. Come i post precedenti hanno già indicato, ogni metodo deve essere testato separatamente per essere sicuro.

    
risposta data 13.10.2014 - 19:18
fonte
7

Dato che ci sono solo pochi metodi (OPTION, GET, HEAD, POST, PUT, DELETE, TRACE e CONNECT), puoi usare uno script e nc per inviare una richiesta a tutti i metodi consentiti e analizzare i risultati:

for method in OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT ; do 
    echo -e "\n\nTrying $method\n\n" 
    echo -e "$method / HTTP/1.1\nHost: server-hostname\nConnection: close\n\n" | nc server-hostname 80 | head 
    sleep 2
done

Gli errori HTTP 400, 403, 405 e 406 sono generalmente i tipi restituiti quando si tenta di utilizzare un metodo non implementato.

    
risposta data 13.10.2014 - 15:41
fonte
5

L'unico modo per identificare i metodi supportati da un server Web è provare ognuno di essi e valutare la risposta per determinare se indica che il metodo è supportato o meno. Non puoi semplicemente eseguire una query per chiedere quali metodi supporta; non ti darà una lista.

Detto questo, ci sono strumenti migliori di nc. Nmap e metasploit supportano entrambi il metodo HTTP scansione e in pratica automatizza il lavoro per te.

    
risposta data 13.10.2014 - 15:37
fonte
2

Ci sono circostanze in cui un server HTTP restituirà un elenco di metodi supportati per una determinata risorsa nel suo % intestazione di rispostaAllow , secondo RFC 7231 (la nuova RFC per HTTP 1.1 semantica):

  • Primo nella risposta a una % richiesta diOPTIONS , o su un percorso di risorsa specifico oppure sul percorso speciale * (che descrive principalmente le funzionalità del server);
  • In secondo luogo, se si prova un metodo noto, ma non supportato dal server su una determinata risorsa, il server può rispondere con un 405 Metodo non consentito codice di stato; in tal caso, deve fornire l'elenco dei metodi consentiti in Allow intestazione di risposta ;
  • Per qualsiasi altra richiesta HTTP, il server di origine può restituire un elenco di metodi supportati in Allow header di risposta ;

Ma cosa succede se il server non collabora? Per esempio. hai provato una richiesta OPTIONS * , varie% richieste% co_de e il server non restituisce mai un elenco di metodi consentiti in un'intestazione GET ? O se il server risponde, ma si sospetta che stia mentendo?

Allora non lo sai, e dovrai conviverci. Ciò che farai dipenderà dal tuo obiettivo:

  • Se stai semplicemente cercando di utilizzare il sistema di destinazione, dovresti fare la cosa cauta assumendo che solo Allow sia supportato, e ottieni più documentazione su come usare il sistema;
  • Se stai facendo test di penetrazione, puoi testare tutti i verbi conosciuti, provare quelli meno conosciuti (come GET ) o addirittura inventarne qualcuno di tuo; più in generale, parte del test potrebbe gettare rifiuti nel sistema per vedere come reagisce;

Tuttavia, pensa a perché vuoi sapere la lista dei verbi supportati - perché senza dati aggiuntivi, sapere quali verbi sono usati è quasi inutile (ad esempio so che PATCH accetta la https://accounts.google.com/AddSession verb - che cosa fa semplicemente sapere il verbo fare a me se non so in che dati dovrebbero essere, in quale formato, ecc.?)

    
risposta data 14.10.2014 - 11:21
fonte

Leggi altre domande sui tag