web-dev-qa-db-ja.com

Web App Pentesting:Webサイトのディレクトリとファイルを列挙するときに、HTTP 200が有効なページか失敗したページかを確認するにはどうすればよいですか?

すべての機能がログインの背後にあるWebアプリがテストされているとします。

実行されるテストの1つは、ログインせずに使用できるページがあるかどうかを確認することです。

アクセスしたいページの実際のURLを試して、ログインページにリダイレクトされるか、またはログインせずにコンテンツが表示されるか(悪い)を確認します。

このプロセスを自動化するために、(おそらく)すべての有効なURLのリストを取得し、各ページを試行して応答コードが何であったかを記録するスクリプトを実行します。

応答が200の場合、ログインなしでアクセスできますが、応答が301、403などの場合、そのURLで問題ありません。

問題は、このWebアプリがログインページにリダイレクトした場合でも200コードを返すことです。

リダイレクトを検出する別の方法はありますか?

4
pzirkind

WebアプリケーションとHTTPステータスコード

許可されていないページ(302が200のログインページにリダイレクトする)と許可されたページ(発見された許可されたページ)の両方で200を返している場合、次のことができます。

  1. 成功したログインで何が起こるかを探すことができます。偽のアカウントを作成してログインします。実際のページに含まれないものと含まれないものを確認します。それがあなたのユニークな文字列を見つける方法です。
    • 覚えておいてください:WAFか何かがある場合、それが有効なリクエストか無効なリクエストかに関係なく、すべての受信リクエストを3xx/4xxにリダイレクトし始める可能性があります。
  2. HTMLコードのHTTP応答またはログインページに表示されない文字列を解析します、ORログインページにのみ表示される文字列。
    • たとえば、文字列「Unauthorized」または「Please Login In」が表示される可能性があります。これらの文字列を含む応答を除外する必要があります。

どちらも、Python、またはbashを含む、使用したいスクリプト/プログラミング言語を使用して実行できます。ただし、bashははるかに遅くなります。


例を挙げていただけますか?

承知しました。下記参照。


1。Pythonを使用

これを編集する必要があります。これは簡単なサンプルコードです。

import pycurl
import urllib
import sys
from StringIO import StringIO 

c = pycurl.Curl()
html = StringIO()
c.setopt(pycurl.WRITEFUNCTION, html.write)
c.setopt(c.VERBOSE, 0)

def send_req(url):
    field = urllib.urlencode(payload)
    c.setopt(c.URL, url)
    c.setopt(c.VERBOSE, 0)
    c.perform()
    if "successful non-login-page string to search for" in html.getvalue():
        html = StringIO() # Reset
        return True
    return False

with open("dir-or-file-list.txt") as f:
    for line in f:
        if send_req("http://haxlogin.page/" + line + ") == True:
            print "[!] Found a valid page: %s" % line

これがPythonで機能するかどうかを確認する時間はありません。これは、Pythonで機能させるための一般的な例にすぎないため、編集する必要があります。


2。Burp Suite Proの使用

Burp Intruderを使用すると、攻撃ダイアログfilterを使用できます。 2xxが一意のコード/文字列として「Unauthorized」を返すことを想像してください。次のようにして、 "Unauthorized"を検索から除外します。

フィルター:

  1. 検索語「無許可」、除外検索でフィルター
  2. ステータスコードでフィルタ:2xx [成功]

。OWASP Dirbusterの使用

Options -> Advanced Options -> Scan Options -> Fail Case String -> Enter a string that appears only on the login page


302リダイレクト

留意してください:多くのアプリケーションは、何かが正常にポストされた後に302リダイレクトを実行します。

これは必ずしも302リダイレクトが悪い、または何も見つからなかったことを意味するわけではありません。使用する curl -Lリダイレクトをたどり、それがどこにあるかを確認します。

また、リダイレクトされたページのコンテンツをチェックして、見逃さないようにすることもできます。

7
Mark Buffalo

サーバーが200でリダイレクトしている場合は、おそらく meta refresh を実行しています。 HTTP 200応答の本文を確認し、次のようなものを探す必要があります。

<head>      
    <meta http-equiv="refresh" content="0;URL='https://www.example.com/login'" />    
</head>   
3
gowenfawr

アプリケーションが実際にリダイレクトしているときに200を返している場合は、応答の内容を解析する必要があります。 URLを解析するか、それでも必要な情報がわからない場合は、ログインフィールドのコンテンツを解析できます。

1
Dan Landberg