前回SSIが動作させる環境ができましたので、続いてSSIインジェクションを検出する方法をやっていきます。
なお、自分で管理しているサーバに対して、実施するようにしてください。
管理されていないサーバに実施した場合は犯罪になる可能性があります。
私が仕事で実施する場合も必ず、お客様に許可をいただいているサイトに対してのみ実施します。
ではSSIインジェクションを行う準備をします。
そんなに難しい話ではなく、HTMLタグが挿入可能なクロスサイトスクリプティング(XSS)が存在するコンテンツを作成します。
すぐにできるようにここを参考に
$ cd /var/www/html #公開ディレクトリに移動 $ sudo nano kensho.php #以下ファイルへの記述内容 <?php $comment = $_GET['comment']; echo $comment; ?> <!DOCTYPE html> <html lang = "ja"> <head> <meta charset = "UFT-8"> <title>フォームからデータを受け取る</title> </head> <body> <h1>フォームデータの送信</h1> <form action = "kensho.php" method = "get"> <input type = "text" name = "comment"/><br/> <input type = "submit" value = "送信"/> </form> </body> </html> #Ctrl+oで保存して終了
さて、さっそくアクセスしてみましょう。毎度のことながら適当なブラウザでアクセスします。
※例:http://192.168.70.131/kensho.php
フォームに「aaaaa」を入れ、送信ボタンを押すと
画面上部に「aaaaa」が表示されます。
さて、まずはXSSが存在するか確認しましょう!フォーム「<script>alert(‘XSS’)</script>」と入力し、先程と同じように送信ボタンを押します。
すると以下のように「XSS」と記載のダイアログが画面上に表示します。
では次にSSIインジェクションが存在するかを確認しましょう!まずは前回と同様に現在時刻を表示させる「<!–#echo var=”DATE_LOCAL” –>」を入力してみましょう!
すると以下のようにサーバ内時間が表示されます。
この状態ですと、XSSとは異なり、攻撃が能動的にできるようになります。
XSSは受動的攻撃なので、罠に引っかかるユーザがいなくてはいけません。しかしSSIインジェクションでは、攻撃者自らがサーバに対し攻撃をして、サーバ内部の情報を取得することができるのです。
なので、一般的にXSSよりSSIインジェクションの方が危険度は高くなります。
もしセキュリティ上危険な設定になっていた際は以下のようなこともできるかもしれません。
ディレクトリにあるファイルが見えている?
/etc/passwdの中身が丸見え!
説明が長くなってしまったので、こちらについては次回に説明を行います。
質問や不明点等あれば、コメントやツイッター等でご連絡頂ければ幸いです。
コメント