web-dev-qa-db-ja.com

不要なHTTPメソッドを正しく無効にしたことをテストするにはどうすればよいですか?

私はWebベースのアプリケーションを作成していますが、Webサイトに必要のないHTTPメソッド(具体的には、OPTIONSHEADおよびTRACE)を無効にしています。

これをhttpd.conf of my xamppこれが機能するかどうかをテストするには:

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

それらが本当に非アクティブ化されているかどうかはどうすればわかりますか?この設定が正しく機能していることをどのようにテストできますか?サーバーサイドの管理は初めてです。

4
Vainglory07

@オーエンはそれを釘付けにしましたが、それを自分で行う例を示すためだけです:

$ 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

TRACE/HTTP/1.0と入力すると、2つの改行が続きます。応答の最初の行(405 Method Not Allowed)は、WebサーバーがTRACEを受け入れないことを示しています。

まだHTTPを知らない場合、さまざまなメソッドのリクエストを作成する方法を知るのは難しい場合があります。 OWASPプロジェクトには、 Test HTTP Methods の使用例がいくつかあり、これが役立ちます。

6
gowenfawr

netcattelnetなどのツールを使用して、コマンドラインからこれを行うことができます。

コマンドラインや、慣れていない新しいコマンドを避けたい場合は、 [〜#〜] postman [〜#〜] のようなツールを使用すると、ブラウザーでカスタムHTTPコマンドを作成できます、結果を表示します。

また、コマンドはほとんどhttpd.confのコマンドで無効にできるため、これが望ましい場合があることにも注意してください。例えば ​​TraceEnable OffはTRACEコマンドを無効にします。

4
Owen

これは OWASP Testing Guide(v4)step で、 original netcat を使用してこれを詳細に行う方法を示しています。

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

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

これはOPTIONSをサポートするサーバーに依存し、サポートされているリストを報告します—これは、常にそうであるとは限りません(これから調べようとします)が、未強化のApacheで正常に動作するはずです。 OPTIONSメソッドのみを削除することで、Webサーバーを誤って「強化」する可能性があり、ほとんどのスキャナーは問題に気づきません。

GNU netcat (古くてメンテナンスされていない)を使用することもできますが、nmapの ncat = SSL/TLSをサポートします:ncat --ssl www.victim.com 443

nmaphttp-methodsスクリプトを使用することもできますが、これは本当に事前にテストする場合にのみ役立ちます(続行を拒否するため) OPTIONSがメソッドのリストを提供しない場合):

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

Apache httpd(XAMPPに含まれている)を使用しているため、mod_rewriteの代わりに、コア LimitExcept ディレクティブを使用して、リクエストメソッドの同様のフィルタリングを提供することもできます。 TRACEを無効にすると、HTTPサーバーが仕様に準拠しなくなる可能性があることに注意してください(「405メソッドが許可されていません」または「501未実装」のいずれかを返す場合は問題ありません)。 GETHEADは、「汎用」サーバー用の唯一の 2つの必須の要求メソッド です。

Lwpを備えたPerlがあり、GETコマンドがインストールされている場合は、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

それぞれのHTTPコードを検査する必要があります。405と406は、許可されていないメソッドのインジケーターです。上記のメソッドリストは不完全であり、WebDAVはさらに多くのメソッドを追加します IANA HTTPメソッドレジストリ も参照してください(独自のメソッドもあり、古いバージョンには少なくとも1つのX-MS-プレフィックス付きメソッドがありました) MS-Exchangeの)。

最後に、Webサイトをリモートでスキャンして詳細なレポートを生成する便利なオンラインツールがあります http://www.askapache.com/online-tools/request-method-scanner/ 。これもOPTIONSメソッドのみを使用します。

4
mr.spuratic

この質問には有効で良い答えがたくさんありますが、Firefox用のLiveHTTPHeadersアドオンを取得してから、新しいHTTP動詞を使用してWebサイトへの要求を再生することもできます。

この手法は、HTTP動詞の改ざんと呼ばれることが多く、侵入テストの際に非常に役立ちます。

ここ は簡単なpythonスクリプトです。これはHTTP動詞のリストをループし、応答を取得して出力します

2
infosec

これを行う別の方法は、人気のある HTTPieクライアント、別名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

それがどのように応答し、カスタムヘッダーもエコーバックするかに注意してください。

1
driftcatcher