Shikata Ga Nai

Private? There is no such things.

File Upload Bypass to RCE == $$$$を訳してみた

Hello there, ('ω')ノ

 

RCE へのファイル アップロード バイパスを。

 

脆弱性:

 無制限のファイルアップロード

 RCE

 

記事:

 https://sagarsajeev.medium.com/file-upload-bypass-to-rce-76991b47ad8f

 

今回は、ターゲットのファイル アップロード機能をバイパスして。

RCE にチェーンする方法を。

今回は、3つのバイパス シナリオすべてについて。

 

シナリオ #1:

拡張子が .php のペイロードは許可されておらず。

ペイロードの名前を「payload.php」から「payload.pHp5」に変更して。

拡張子をランダムな大文字と小文字に変更すると、バイパスされて。

ただし、このようなペイロードは、ターゲットにクライアント側の。

検証のみがある場合にのみ機能することに注意して。

そのため、ペイロードがフロントエンドを通過することがありますが。

IDS またはバックエンド ファイアウォールによってブロックされているため。

コールバックを取得できない場合があって。

 

シナリオ #2:

拡張子が .php のペイロードは許可されず。

ペイロードの名前を「payload.php」から「payload.php\x00.png」に変更して。

 \x00.png を末尾に追加すると、制限 (Null Byte) が回避され。

右クリック→新しいタブで画像を表示すると、スクリプトがトリガされて。

 

ノート:

場合によっては .inc 、 .phps 、 .phtml も使用できて。

これを使用する場合は、それに応じて content-Type を変更してするように。

 

追伸:

保存された XSS もここで可能で。

 

シナリオ #3:

今回は、有効なバイパスを見つけるのに時間がかかって。

彼らは、画像のみを許可するという厳格なルールを設定していて。

データが実際に画像であるかどうかを対象の Web アプリが。

どのように検証しているかを理解できず。

しかし、多くの調査の結果、ペイロードのマジック バイトをチェックして。

検証していることがわかって。

 

アプリケーションは、最初の署名バイトに基づいてファイルの種類を。

識別することがあり。

ファイルにそれらを追加/置換するとアプリケーションがだまされる可能性があり。

 

マジックバイトは、ファイルを認識するために使用されるファイルの。

最初の数バイトに他ならず。

ファイルを開いた場合は表示されないので、ファイルのマジック バイトを。

表示するには、特別な 16 進エディタが必要で。

 

Linux を使用しているので、組み込みの 16 進エディタと xxd を使用して。

マジック バイトを表示および編集でき。

ただし、任意の 16 進エディタを使用して同じ結果を得ることができて。

 

 また、バックエンドが特定のキーワードをフィルタリングして。

削除することもわかって。

たとえば、「.php」という用語を削除するとしたら。

ファイルの名前を「payload.p.phphp」に変更すると。

フィルタが「.php」を削除して、ファイル名は「payload.php」になって。

この段階でファイアウォールはバイパスされているため、スクリプトが実行されて。

下記のビデオの1つがこれに役立って。

 

https://www.youtube.com/c/JohnHammond010

 

1.89 50 4e 47 0d 0a 1a 0apng ファイルのマジックバイト

2.echo “89 50 4e 47 0d 0a 1a 0a” | xxd -p -r >> payload.p.phphp

3.スクリプトをアップロードして、本格的な RCE を入手して。

 


マジック バイトを含む png ファイルを作成するには。

0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A で始まるファイルを作成することだけで。

 

「xxd」は、ファイルや標準入力から受け取った内容を16進数、または。

2進数でダンプするコマンドで。

さらに16進ダンプから元のデータに復元できて。

 

Best regards, (^^ゞ