web-dev-qa-db-ja.com

モバイルアプリケーションの画像アップロードの脆弱性をテストする方法は?

多くのユーザーでモバイルアプリケーションを管理しています。ユーザーは自分の.jpg画像をアップロードできます。

現時点では、管理しているアプリケーションの画像入力がサニタイズされているかどうかはわかりませんが、ユーザーが画像をアップロードして、画像を表示したすべてのユーザーに対してアプリケーションをクラッシュさせることはできました。

それはこのように動作します:

  1. ユーザーが自分の.jpgファイルを彼のプロファイルに

  2. データベースに保存されます

データベースを確認したところ、ユーザーの画像ファイル名ではなく、単に<HTML></HTML>

私は彼がHTML/PHPファイルを画像ファイルとマージしてコードを実行する方法を持っているかもしれないことにすぐに気付きました。

私は彼がアップロードした実際のファイルを最初にチェックせずに削除したので、非常に愚かでした。

さて、画像マージ方法を使用して脆弱性を自分でテストする単純なphp/mysqlコードを起動する方法はありますか?ヘッダーのEXIFデータにhtmlおよびphpコードを追加してバリエーションを試しましたが、それでもデータベースに通常の画像として保存されました。ハッカーが最初に行ったように、画像を<HTML> </ HTML>として保存することができませんでした。

セキュリティを突破して実際にサーバーに侵入できなかった可能性もありますが、スクリプトを起動してエラーが発生し、アプリがクラッシュしたことは明らかです。

ここではどのような手法が使われていたのかを知りたい。どんな助けにも感謝します!

2
AndyTTT

セキュリティの最も重要な法則の1つ:クライアントを信頼することについて決して考えないでください。例外なく。

クライアントが任意のファイルを送信でき、後でそのファイルに直接アクセスできる場合は、問題が発生しています。

ファイルが画像の場合は、本当に画像であることを確認してください。拡張子で。pngまたはContent-type:image/pngを検索するだけでは不十分です。実際に画像を検出するには、関数を使用する必要があります。

また、ユーザーにファイルへの直接アクセスを許可しないでください。ファイルを取得し、生成された名前を使用してWebサーバーにアクセスできないフォルダーに置き、ファイルを使用してfpasstrhu()などを使用してクライアントに画像を送信します。可能であれば、画像に何らかの変換を適用します。

モバイルアプリケーション、デスクトップアプリケーション、APIのいずれであっても、サーバーは同じです。

1
ThoriumBR

ファイル入力をサニタイズしなかった場合AT ALLの場合、ハッカーはc99.phpのようなphp Shellをサーバーにアップロードしただけで、yourapp.com/uploads/c99を介してShellコントロールにアクセスできます。 .php

リクエストのコンテンツタイプを確認した場合、HTTP POST編集ツールを使用してリクエストのコンテンツタイプをimage/jpgに変更した後、シェルをアップロードした可能性があります。

また、ファイル拡張子を確認した場合、おそらく彼はc99.phpシェルをc99.jpgとしてアップロードし、HTTP POST編集ツールを使用してファイル拡張子を.phpに変更しました。

ちなみに、このphp Shellについて説明したのは、サーバーを完全に制御して、データの漏えいや改ざんを引き起こすことです。

安全なファイルのアップロードについてphp.netのドキュメントを検索しました。ファイル入力データをサニタイズする最も安全な方法は、finfo拡張機能を使用することです。

0
Marco Nicolodi