追記:アクセスログポイズニング攻撃という攻撃手法らしいです。知らなかった...
こんにちは、みらい(@Minimal_Mirai)です。
CTFマシンにてLFI脆弱性を利用してリバースシェルを取得する手法が面白かったのでWriteup的に書いておきます。
当方、セキュリティ初学者のため間違っている点があればTwitterのDMで教えてください。
この記事は悪用等を推奨する記事ではありません。第三者の所有するサーバーへの攻撃はお辞めください。
利用するCTFマシン
VulnHub上のマシン、以下2つを対象に紹介します。
また現在のPHPのデフォルト設定ではおそらくこれらの手法が使えず(主要なログファイル等へのデフォルト権限でのアクセスができないそう)、ただ手法として面白いため紹介するというスタンスです。
前提
・ポートスキャン
->DIR BusterにてWebディレクトリを辞書ファイルで列挙
->怪しげなWebページを検出
->PHPを利用したWebアプリケーションであり、Fuzzingの過程でLFI脆弱性の存在が判明
LFI脆弱性の利用
LFI脆弱性を利用して/var/log/以下のログファイルにアクセスできることが判明し、どうにか利用したい。
アクセスできるファイルは以下の通り
Solstice - VulnHub
Lab1においては80番ポートと8593番ポートが開放されており、
うち8593番ポートで稼働しているPHPアプリケーションにLFI脆弱性が存在していた。
またapache2の80番ポートに対するaccess.log(/var/log/apache2/access.log)にアクセスできる事が分かった。
そのため、access.logに残るようなGETリクエストをncで送信する。
送信した文字列*1 は、PHPをwebシェルとして利用する文字列です。
実行したコマンド(whoami)が実行され、www-dataでwebサーバーが稼働している事が判明しました。
以上でWebサーバーに対し任意のコマンドが実行ができるようになりました。
HA: Natraj - VulnHub
Lab2に置いては、80番ポートでWebサーバーが稼働していることが確認できます。
PHPアプリケーションにLFI脆弱性が存在することがわかります。
また/var/log/auth.logに対する読み取り権限を有していることが確認できます。
そのため、あえてSSHに対して不正な認証を試みる。
以下の画像でidコマンドが実行できていることが確認でき、この脆弱性を利用し、任意のコマンド実行が可能になった事が分かります。
まとめ
恥ずかしながらLFI脆弱性を利用し、Webシェルの取得が可能であることを初めて知り少し驚いたのでご紹介させて頂きました。
また下記のリバースシェルジェネレーターを利用し、任意の言語でPayloadを作成し送信すると便利です。
あと個人的にPHPのWebシェルからリバースシェルのPayloadを送信する際にPythonを利用すると成功率高いような気がするのですが気の所為ですかね?(わからん)