SSIインジェクションという脆弱性について検証していきます。
7年以上、セキュリティの経験がありますが、実際に見たことがあるのは3回程度です。
一度秋葉原の勉強会でも、発表とデモをやりました。以下は過去のリンクです
環境構築からやっていきますので、会社や勉強会等で実際にデモをやりたい方は参考にしていただければと思います。
SSI(Server Side Includes)とは
SSIとは少し前の技術であり、今はほとんど使われることはありません。
以下に概要のURLを紹介します。
手頃なWebサーバが必要ですので、前に作成したLAMP環境を使用します。
さて、作成時にPHPの動作まで確認しているので、ApacheでSSIの記述が動作するようにします。
SSIを動作させる
SSI自体は結構古い技術なのでサイトによってはファイルの場所が違ったりして混乱します。
以下が非常に分かりやすかったです。
Apache 2.4 デフォルト設定から SSI を動かすまで
SSIを動かすためにモジュールが必要です。「mod_include.so」を探すところからです。
さて「find」コマンドでといきたいところなんですが、VMの画面を操作するのが煩わしいのでサーバにSSHで接続できるように設定します。
$sudo apt install ssh #SSHインストール $sudo service ssh status
上記で以下のようになっていればOK
これでSSHでつなぐ準備はOKです。あとはホストマシンにターミナルのソフト「Tera Team」を入れVMのWebサーバにアクセスします。
初回アクセス時にはセキュリティ警告が出ますが、気にせず続行を押せばOKです。
VMのIPアドレスを入力
Ubuntuにログインするときのアカウントを入力
ターミナルの画面が表示
色々コピペ等もしやすいのでこちらで作業を進めます。
では引き続き「mod_include.so」を探していきます。
$ sudo find / -name mod_include.so #一番の階層から「mod_include.so」を捜索
以下のとおり、「/usr/lib/apache2/modules/」の下に発見しました。
そして次に「modules」ディレクトリごと「/etc/apache2」配下にコピーします。
$ sudo cp -r /usr/lib/apache2/modules/ /etc/apache2/modules/
以下のとおりにディレクトリを移動して「modules」ディレクトリが「/etc/apache2/」の配下にあるか確認します。
「modules」ディレクトリの配置が終わったら、次は「apache2.conf」にSSIを動作させるための記載を行います。
#apache2.confを編集 $sudo nano /etc/apache2/apache2.conf #SSIを動作させるため「apache2.conf」の一番下に以下を追記 LoadModule include_module modules/mod_include.so
次にそのまま「apache2.conf」にSSIを有効にさせるか記述します。
通常は.shtmlなどの静的ファイルのみ有効にするのが一般的ですが、今回は.php、.htmlで動くようにします。
なお、この設定は脆弱性の検証で使用するための危険な設定です。
公開サーバで設定することは推奨しません。サーバを乗っ取られる危険性があります。
<Directory /var/www/html> Options Includes AllowOverride None Require all granted AddType text/html .php .html AddOutputFilter INCLUDES .php .html </Directory>
以下のような感じです。
これで準備はOKです。「Ctrl+o」で保存して、Apacheの再起動を行います。
$sudo service apache2 restart
次に公開ディレクトリに移動して、SSIが.phpで本当に動作するのか確認します。
#SSIテスト用のファイルを作成、そして編集 $ sudo nano /var/www/html/ssitest.php #SSIで現在の時刻が表示される記述を行い「Ctrl+o」で保存 <!--#echo var="DATE_LOCAL" -->
さてここまでやればOKです。
windowsから、適当なブラウザを使用してアクセスしましょう。
※例:http://192.168.70.131/ssitest.php
すると、以下のようにサーバの現在時刻が表示されます。
これでSSIを動作させる環境が構築できました。
次回に実際に脆弱性として実行したり、解説を行います。
質問や不明点等あれば、コメントやツイッター等でご連絡頂ければ幸いです。
コメント