SSIインジェクションの検証①SSIの環境を作ろう!

セキュリティ

SSIインジェクションという脆弱性について検証していきます。

7年以上、セキュリティの経験がありますが、実際に見たことがあるのは3回程度です。

一度秋葉原の勉強会でも、発表とデモをやりました。以下は過去のリンクです

第7回ゼロから始めるセキュリティ入門 勉強会

環境構築からやっていきますので、会社や勉強会等で実際にデモをやりたい方は参考にしていただければと思います。

SSI(Server Side Includes)とは

SSIとは少し前の技術であり、今はほとんど使われることはありません。

以下に概要のURLを紹介します。

とほほのSSI入門

手頃な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を動作させる環境が構築できました。

次回に実際に脆弱性として実行したり、解説を行います。

質問や不明点等あれば、コメントやツイッター等でご連絡頂ければ幸いです。

コメント