File Upload Bypass to RCE == $$$$ から学ぶ

ソース:

medium.com

脆弱性:File Upload

 

訳:

シナリオ #1

  1. .php 拡張子を持つペイロードは許可されません。
  2. ペイロードの名前を 'payload.php' から 'payload.pHp5' に変更します。 拡張子をランダムな大文字と小文字に変更すると、それが回避されました。
  3. ただし、そのようなペイロードは、ターゲットにクライアント側の検証のみがある場合にのみ機能することに注意してください。
    そのため、ペイロードがフロントエンドを通過しても、IDS またはバックエンド ファイアウォールによってブロックされているため、コールバックを取得できない場合があります。
  4. この場合、コールバックを受信し、RCE が確立されました。

 

シナリオ #2

  1. .php 拡張子を持つペイロードは許可されません。
  2. ペイロードの名前を 'payload.php' から 'payload.php\x00.png' に変更しました。
    末尾に \x00.png を追加すると、制限 (Null バイト) が回避されました。
  3. 右クリック→新しいタブで画像を表示するとスクリプトがトリガーされました。
  4. RCE達成しました。

 

注記:-

  • 場合によっては、 .inc 、 .phps 、 .phtml も使用できます。
  • これを使用する場合は、必ず content-Type を適宜変更してください。
    PS: 保存された XSS もここで可能でした。

 

シナリオ #3

  • 今回は、有効なバイパスを見つけるのに時間がかかりました。
    彼らは画像のみを許可するという厳格なルールを設定していました。
  • 対象の Web アプリがデータが実際に画像であるかどうかをどのように検証しているのかを理解できませんでした。
    しかし、よく調べた結果、ペイロードのマジックバイトをチェックして検証していることがわかりました。
  • 場合によっては、アプリケーションが最初の署名バイトに基づいてファイルの種類を識別することがあります。
    ファイル内でそれらを追加/置換すると、アプリケーションが誤魔化される可能性があります。

マジックバイトとは、ファイルを認識するために使用されるファイルの最初の数バイトにすぎません。
ファイルを開くと表示されません。
ファイルのマジックバイトを表示するには、特別な 16 進エディタが必要です。

Linux を使用しています。
したがって、組み込みの 16 進エディタと xxd を使用してマジック バイトを表示および編集できます。
ただし、任意の 16 進エディタを使用して同じ結果を得ることができます。

 

  • また、バックエンドが特定のキーワードをフィルタリングして削除していることもわかりました。
    たとえば、「.php」という用語が削除されます。
    したがって、ファイルの名前を「payload.p.phphp」に変更できます。
    したがって、フィルターが '.php' を削除すると、ファイル名は 'payload.php' になります。
    この段階ではファイアウォールはバイパスされているので、スクリプトが実行されます。
  1. 89 50 4e 47 0d 1a 0a → png ファイルのマジックバイト
  2. エコー「89 50 4e 47 0d 1a 0a」 | xxd -p -r >> payload.p.php
  3. スクリプトをアップロードして、本格的な RCE を入手します。

 

ほなほな。