File Upload Vulnerabilities

 

ファイルアップロードってよくある機能ですが、ちゃんと実装しないとリスクになる機能でもあるので、どんな感じで危ないのかを書いていきます
※ここに書いてる事は、よそ様の環境で試したらダメな事も含まれてるので!


ファイルアップロードって脆弱なの?
ファイルアップロードの脆弱性とは、アップロードするファイルの検証がされていない場合に発生します。
検証っていうのは、例えば
  • 想定している種類のファイルなのか?
  • 想定しているサイズのものなのか?
などなどをチェックする事です。
これらができてない場合に何が起こるかと言うと、
  • 任意のコードが実行される
  • 必要なファイルが上書きされる
  • 巨大なファイルでディスクを占有されシステムが機能しなくなる
というような事が起こり得ます。
任意のコードがどのように実行されるのかを簡単に書いていきます。
任意のコードが実行される?
攻撃者がやる大まかな流れはこんな感じになると思います。
  1. アップロードできそうなページを探す
  2. シェルをアップロードする
  3. サーバ上で実行させる
では、順番に説明します。
1.アップロードページを探す
下の画面はディレクトリをスキャンしてるところです。狙えそうな目星を付けます。

2.シェルをアップロードする
アップロードできる画面を見つけたので、任意のコードを実行させるShellをアップロードします。
シェルのアップロードは制限されている事がほとんどと思いますが、攻撃者はファイルの拡張子やシグネチャを操作して、ファイル検証のjsをすり抜けるように細工をしてアップロードしてきます。
下の画面はws.phpをアップロードした後の画面です
3.サーバ上で実行させる
アップロードしたファイルを実行させるには、ブラウザからアップロードしたws.phpファイルへアクセスします。
実行したいコマンド(今回はcat /etc/passwd)をクエリで渡すと実行結果が表示されました。
パスワード見られちゃいますね…
というように、ファイルをアップロードする機能は悪用されるリスクがあります。今回の例ではファイルの読み込みをやってみましたが、アップロードするファイルに前回のお題だったReverse Shellを使うと、サーバ側へのアクセスも可能になります
なので、アップロード機能を実装する時は、ファイルタイプ・サイズの検証や、実行可能なシェルを制限するなどして対策をしましょう
以上、File Upload Vulnerabilities でした。
参考:
Offensive Security Proving grounds : FunboxEasyEnum

このブログの人気の投稿

リスクアセスメント

セキュリティ監視入門! MITRE ATT&CK編 その①フレームワークの理解