Metasploitable2-LinuxでCGIを動かそうとしたらソースコードが表示されるのみで動かなかった。
#!/bin/sh echo "Content-type: text/plain" echo echo "Hi! I'm an ordinary CGI script which is executed by /bin/sh"
『一行のメッセージを出力するだけの CGIスクリプトを設置します。いっけん、なんの入力もクライアント側から受け付けていないため危険のありようもなく見えます。』
BASHの脆弱性でCGIスクリプトにアレさせてみました | ワルブリックス株式会社
CGI を許可するように Apache を設定する
# apache2 -v Server version: Apache/2.2.8 (Ubuntu) Server built: Mar 9 2010 20:45:36
『Apache が共有モジュール機能付きでビルドされている場合、 モジュールがロードされていることを確認してください。』
LoadModule cgi_module modules/mod_cgi.so
(以降『』書きは Apache Tutorial: Dynamic Content with CGI - Apache HTTP Server Version 2.4 より引用)
# vi /etc/apache2/apache2.conf ~(中略)~ # Include module configuration: Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf
上記ディレクトリでモジュールを読み込んでいる。
/etc/apache2/mods-enabled# ls -l lrwxrwxrwx 1 root root 26 May 14 2012 cgi.load -> ../mods-available/cgi.load
mods-enabled
内のファイルはmods-available
へのシンボリックリンクとなっています。(リンクが無い場合は後述を参考にリンクを作ってください)
/etc/apache2/mods-available# ls -l -rw-r--r-- 1 root root 58 Feb 1 2008 cgi.load /etc/apache2/mods-available# cat cgi.load LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
問題なく設定されていた。
CGI の実行を可能にするために Options を明示的に使用する
『サーバのメインの設定ファイル中で Options ディレクティブを明示的に使用することで、特定のディレクトリ配下で CGI の実行を許可するように指定することができます』
Options +ExecCGI
/etc/apache2# vi sites-available/default <Directory /var/www/> Options Indexes FollowSymLinks MultiViews ↓ +ExecCGI を追記 Options Indexes FollowSymLinks MultiViews +ExecCGI AllowOverride None Order allow,deny allow from all </Directory>
『上記ディレクティブは、CGI ファイルの実行を可能にするよう Apache に伝えます。また、どのファイルが CGI ファイルかを サーバに伝える必要があります。次の AddHandler ディレクティブの例では、cgi または pl を拡張子に持つすべてのファイルを CGI プログラムとしてみなすことをサーバに伝えます』
AddHandler cgi-script .cgi .pl
/etc/apache2/mods-available# vi mime.conf ~(中略)~ #AddHandler cgi-script .cgi ↓ コメントを外す AddHandler cgi-script .cgi
設定ファイルの再読み込み
# service apache2 reload
動いた。
補足
mods-enabled: 有効になっているモジュールの設定を格納
mods-available: 有効または有効にできるモジュールの設定を格納
a2enmod
a2dismod
コマンドで有効・無効を切り替えシンボリックリンクが張られる。
/etc/apache2/mods-enabled# ls -l lrwxrwxrwx 1 root root 26 May 14 2012 cgi.load -> ../mods-available/cgi.load /etc/apache2# a2dismod cgi Module cgi disabled; run /etc/init.d/apache2 force-reload to fully disable. /etc/apache2/mods-enabled# ls -l cgi.loadのシンボリックリンクが消える # service apache2 force-reload * Reloading web server config apache2 再度有効にする /etc/apache2# a2enmod cgi Module cgi installed; run /etc/init.d/apache2 force-reload to enable. /etc/apache2# ls -l mods-enabled/ lrwxrwxrwx 1 root root 26 Oct 29 11:14 cgi.load -> ../mods-available/cgi.load シンボリックリンクが追加された # service apache2 force-reload * Reloading web server config apache2