web-dev-qa-db-fra.com

Comment puis-je tester que j'ai correctement désactivé les méthodes HTTP inutiles?

Je fais une application Web et j'ai désactivé certaines des méthodes HTTP qui ne sont pas nécessaires pour le site Web (spécifiquement, OPTIONS, HEAD et TRACE).

Je mets ceci dans le httpd.conf de mon XAMPP pour tester si cela fonctionne:

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

Comment saurais-je savoir s'ils sont vraiment désactivés? Comment puis-je tester que ce paramètre fonctionne correctement? Je suis nouveau à l'administration côté serveur.

4
Vainglory07

@Owen cloué-le, mais juste pour montrer un exemple de le faire vous-même:

$ 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

Le Trace/http/1.0 est ce que vous tapez, suivi de deux nouvelles lignes. La première ligne de la réponse ( 405 méthode non autorisée ) vous indique que le serveur Web n'accepte pas la trace.

Savoir comment former une demande des différentes méthodes peut être difficile si vous ne connaissez pas déjà HTTP; Le projet OWASP a quelques exemples sur la manière de tester les méthodes HTTP qui peuvent vous aider.

6
gowenfawr

Vous pouvez utiliser un outil comme netcat ou telnet pour le faire à partir de la ligne de commande.

Si vous préférez éviter la ligne de commande ou les nouvelles commandes que vous ne connaissez pas, alors des outils tels que [~ # ~ # ~ ~ ~ ~] vous permettra de former des commandes HTTP personnalisées dans un navigateur et affichez le résultat.

Il convient également de noter que les commandes peuvent surtout être désactivées avec des commandes dans le httpd.conf et que cela pourrait être préférable. Par exemple TraceEnable Off Désactiver la commande Trace.

4
Owen

Ceci étape dans le Guide de test OWAPP (V4) montre comment faire cela en détail à l'aide de Netcat original :

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

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

Cela repose sur le serveur prenant en charge OPTIONS et rapportant la liste prise en charge - ce n'est pas toujours le cas (comme vous êtes sur le point de le savoir), mais devrait fonctionner correctement avec une Apache malarde. On pourrait mal "durcir" un serveur Web en supprimant la méthode OPTIONS et rien d'autre, et la plupart des scanners ne remarqueront pas le problème.

Vous pouvez également utiliser GNU netcat (ancien et homondiagné maintenant), ou mieux toujours NMAP ncat = qui prend en charge SSL/TLS: ncat --ssl www.victim.com 443.

Il est également possible d'utiliser les nmap méthodes http-http Script, mais cela n'est vraiment utile que pour le test au préalable (puisqu'il refuse de continuer si OPTIONS ne fait pas fournir une liste de méthodes):

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

Puisque vous utilisez Apache httpd (inclus avec XAMPP), comme alternative à mod_rewrite Vous pouvez également utiliser le noyau - LimitExcept directive pour fournir un filtrage similaire des méthodes de demande. Notez que la désactivation TRACE peut rendre le serveur HTTP non conforme à la spécification (bien que vous deviez être correct si vous renvoyez la "méthode 405 non autorisée" comme vous le faites ou "501 non implémenté"). GET et HEAD sont les seules deux méthodes de requête obligatoires pour un serveur "général".

Si vous avez Perl avec LWP, la commande GET est installée, vous pouvez énumérer ces vous-même sans s'appuyer sur OPTIONS du tout:

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

Vous devrez inspecter le code HTTP pour chacun, 405 et 406. Les indicateurs d'une méthode ne sont pas autorisés. La liste de méthodes ci-dessus est incomplète, webdav ajoute de nombreuses autres méthodes et voir aussi le registre de la méthode IANA HTTP (il y a aussi des propriétaires également, il y avait au moins un X-MS- Méthode préfixée dans les anciennes versions de MS-Exchange).

Enfin, il existe un outil en ligne utile qui analyse à distance votre site Web et produit un rapport détaillé ici: http://www.askapache.com/online-tools/request-method-scanner/ . Cela n'utilise aussi que la méthode OPTIONS.

4
mr.spuratic

Bien que cette question ait beaucoup de réponses valides et de bonnes réponses, une autre approche que vous pourriez prendre est éventuellement obtenir le livehttheaders Addon pour Firefox, puis rejouer vos demandes sur le site Web, avec le nouveau verbe HTTP.

Cette technique est souvent appelée altération du verbe HTTP et peut être assez utile lorsqu'elle est pompeuse.

ICI est un rapide python script j'ai écrit, qui boucle sur une liste de verbes http, obtient une réponse et les imprime

2
infosec

Une autre façon de le faire est d'utiliser le client populaire httpie Client, AKA 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

Remarquez comment il répond et comment cela fait écho à l'en-tête personnalisé.

1
driftcatcher