25
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「セキュリティの脆弱性を実際に試してみたい」と思ったことはありませんか?

今回は、セキュリティ脆弱性を実際に体験できるツール『DVWA (Damn Vulnerable Web Application)』を紹介します。このツールは、PHPとMySQLで構築された、意図的に脆弱なWebアプリケーションです。これを使って、実際にセキュリティ脆弱性を学び、どのように攻撃が行われるかを体験できます!
具体的な設定方法や構築については、こちらの公式ドキュメントを参考にしてください!今回は構築手順を省略し、実際の攻撃の手法について説明します!:runner_tone1:

含まれる脆弱性

  • ブルートフォース(Brute Force)
  • コマンド実行(Command Execution)
  • クロスサイトスクリプティング(Cross Site Request Forgery (CSRF))
  • 安全でないCAPTCHA(Insecure CAPTCHA)
  • ファイルインクルージョン(File Inclusion)
  • SQLインジェクション(SQL Injection)
  • 安全でないファイルアップロード(Insecure File Upload)
  • クロスサイトスクリプティング(Cross Site Scripting (XSS))
  • イースターエッグ(Easter eggs)
    ファイルパスディスクロージャ(Full path Disclosure), 認証バイパス(Authentication bypass)やその他の脆弱性が隠されています。

DVWAのセキュリティ機能

DVWAでは、セキュリティレベルを以下の3段階で設定できます。

🔒 High(安全なレベル)

  • 特徴: 完全に安全で、脆弱性はありません。
  • 目的: 安全なコーディング例を学ぶために使用。
  • 使い方: 脆弱なコードと比較して、セキュアな実装方法を理解する。

⚠️ Medium(不完全なセキュリティ)

  • 特徴: 開発者が安全にしようと努力したが、不十分な例。
  • 目的: 一見安全に見える実装がどこで失敗するかを学ぶ。
  • 注意: 攻撃可能な箇所が残されている。

Low(完全に脆弱なレベル)

  • 特徴: 全く安全でない状態。
  • 目的: 典型的な悪いコーディング例を通じて、脆弱性がどのように発生するかを理解する。
  • : SQLインジェクションやXSSが容易に成功する。

実践!反射型クロスサイトスクリプティング (Reflected XSS)

ここでは、実際に反射型XSS(クロスサイトスクリプティング)攻撃を体験!XSSは、攻撃者が悪意のあるスクリプトを仕込み、ユーザーのブラウザで実行させる攻撃手法です!:lifter_tone1:

反射型XSSの手法と流れ

1: 攻撃者が悪意のあるURLを用意する
攻撃者は次のような スクリプト付きのURL を作成します。
このURLにはブラウザで実行されるJavaScriptが含まれています。

https://example.com/vulnerable.php?q=<script>alert('XSS')</script>
  • q パラメータ に悪意のあるスクリプトを仕込みます。
  • 攻撃者はこのリンクを メールやSNS を通じて「見てみて!」とユーザーに送りつけます。

2: ユーザーがリンクをクリックする
被害者(ユーザー)は、攻撃者から送られたURLを信じてクリックしてしまいます。

3: Webサーバがスクリプトを含む応答を返す
脆弱なWebアプリケーションは、入力されたパラメータ q の内容 をそのまま画面に表示します。
このため、次のようなHTMLが生成され、ブラウザに返されます。

<p>検索結果: <script>alert('XSS')</script></p>
  • サーバは 入力値の検証やエスケープ処理 を行わないため、
    悪意のあるスクリプトがそのまま出力されます。

4: ユーザーのブラウザでスクリプトが実行される
ユーザーのブラウザは、返されたHTMLを解析し、含まれているJavaScriptコードを実行します。例えば、alert('XSS') が実行されると、ブラウザにポップアップメッセージが表示されます。

<具体的な動作例>

  • ポップアップ表示: alert('XSS') が実行され、警告メッセージが表示される。
  • Cookieの窃取: JavaScriptを使ってCookie情報が攻撃者のサーバに送信される。
  • ページ改ざん: 悪意のあるスクリプトがページ内容を書き換える。
┌────────────┐        ① 攻撃者がURLを送信
│ 攻撃者      │ ───────────► ユーザー (クリック)  
└────────────┘
                        ▼
             https://example.com?q=スクリプト
                        │
                        ▼
┌────────────┐        ② ユーザーがリンクを開く
│ Webサーバ   │ ◄─────────── 
│ (脆弱なサイト) │   スクリプトを含む応答  
└────────────┘
                        ▼
┌────────────┐        ③ ユーザーのブラウザで実行あ
│ ブラウザ      │───────────► JavaScriptが動作
│ (ユーザー画面)│  
└────────────┘

反射型XSSのポイント

  • 原因: 入力値が適切にエスケープされず、そのまま出力されてしまう。
  • 危険性: 攻撃者が用意したスクリプトが ユーザーのブラウザ で動作し、サイト改ざんやCookie情報の窃取が可能になる。
  • 対策: 入力値の サニタイズ や エスケープ処理 を行い、信頼できない入力をそのまま表示しないこと。

やってみよう:sunny:実際にDVWAで反射型XSSを試す

まず、セキュリティレベルを Medium に設定します。

1.左メニューから 「DVWA Security」 を選択し、セキュリティレベルを Medium に設定します。
「Submit」ボタンを押して適用。
image.png

2.左メニューからXSS(Reflected)を押下。
image.png

3.入力フィールドに次のコードを入力して実行します。

<script>alert('XSS')</script>

入力後、「Submit」をクリックします。
image.png

4.すると、以下のようにアラートが表示されます!あらまぁ!
image.png

まとめ

今回、DVWAを使用して反射型XSSを体験することで、脆弱性がどのように攻撃され、どのように対策を取るべきかを学ぶことができました! セキュリティを強化するためには、入力値を適切に処理し、悪意のあるコードが実行されないようにすることが重要です:writing_hand_tone1:

25
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?