Pythonペネトレーションテスト-XSSWeb攻撃

クロスサイトスクリプティング攻撃は、クライアント側のコードインジェクション攻撃も指すインジェクションの一種です。ここでは、悪意のあるコードが正当なWebサイトに挿入されています。同一生成元ポリシー(SOP)の概念は、クロスサイトスクリプティングの概念を理解するのに非常に役立ちます。SOPは、すべてのWebブラウザで最も重要なセキュリティプリンシパルです。Webサイトが別のオリジンのページからコンテンツを取得することを禁止します。たとえば、Webページwww.tutorialspoint.com/index.htmlからコンテンツにアクセスできます。www.tutorialspoint.com/contact.htmlしかし、www.virus.com /index.htmlはからコンテンツにアクセスできませんwww.tutorialspoint.com/contact.html。このように、クロスサイトスクリプティングはSOPセキュリティポリシーを回避する方法であると言えます。

XSS攻撃の種類

このセクションでは、さまざまな種類のXSS攻撃について学びましょう。攻撃は次の主要なカテゴリに分類できます-

  • 永続的または保存されたXSS
  • 非永続的または反映されたXSS

永続的または保存されたXSS

この種のXSS攻撃では、攻撃者はペイロードと呼ばれるスクリプトを挿入します。このスクリプトは、たとえばデータベース内など、ターゲットWebアプリケーションに永続的に保存されます。これが理由で、永続的なXSS攻撃と呼ばれます。これは実際に最も被害の大きいタイプのXSS攻撃です。たとえば、悪意のあるコードが攻撃者によってブログのコメントフィールドまたはフォーラムの投稿に挿入されます。

非永続的または反映されたXSS

これは最も一般的なタイプのXSS攻撃であり、攻撃者のペイロードは要求の一部である必要があり、Webサーバーに送信されて反映され、HTTP応答にHTTP要求からのペイロードが含まれるようになります。攻撃者は各被害者にペイロードを配信する必要があるため、これは非永続的な攻撃です。このような種類のXSS攻撃の最も一般的な例は、攻撃者がXSSペイロードを含むサーバーにリクエストを送信するように被害者を引き付け、最終的にブラウザ内で反映および実行されるスクリプトを実行するフィッシングメールです。 。

SQLiと同様に、XSS Web攻撃は、アプリケーションへの入力データを操作することで実装できます。次の例では、XSS Web攻撃をテストするために、前のセクションで行ったSQLi攻撃ベクトルを変更しています。以下に示すPythonスクリプトは、を使用してXSS攻撃を分析するのに役立ちますmechanize

まず、インポートしましょう mechanize モジュール。

import mechanize

ここで、フォームの送信後に応答を取得するためのURLの名前を入力します。

url = input("Enter the full url")
   attack_no = 1

ファイルから攻撃ベクトルを読み取る必要があります。

With open (‘vectors_XSS.txt’) as x:

次に、各アラックベクトルでリクエストを送信します-

For line in x:
   browser.open(url)
browser.select_form(nr = 0)
   browser[“id”] = line
   res = browser.submit()
content = res.read()

次のコード行は、印刷された攻撃ベクトルをチェックします。

if content.find(line) > 0:
print(“Possible XSS”)

次のコード行は、出力ファイルへの応答を書き込みます。

output = open(‘response/’ + str(attack_no) + ’.txt’, ’w’)
output.write(content)
output.close()
print attack_no
attack_no += 1

XSSは、ユーザー入力が検証なしで応答に出力されるときに発生します。したがって、XSS攻撃の可能性を確認するために、提供した攻撃ベクトルの応答テキストを確認できます。エスケープや検証なしで攻撃ベクトルが応答に存在する場合、XSS攻撃の可能性が高くなります。