Shikata Ga Nai

Private? There is no such things.

Response queue poisoning via H2.TE request smugglingをやってみた

Hello there, ('ω')ノ

 

フロントエンドサーバがHTTP/2リクエストの長さがあいまいな場合でも。

ダウングレードするため、リクエストの密輸に対して脆弱らしく。

まずは、アクセスして。

 

f:id:ThisIsOne:20220112215850p:plain

 

リクエストをリピータへ。

 

f:id:ThisIsOne:20220112215811p:plain

 

リピータを使用してHTTP/2リクエストを送信するには。

オーバーライドを許可するオプションを有効にして。

インスペクターを使用してプロトコルをHTTP/2に変更する必要があって。

 

f:id:ThisIsOne:20220112220038p:plain

 

チャンクエンコーディングを使用して。

HTTP/2リクエストの本文で任意のプレフィックスを密輸すると。

 

f:id:ThisIsOne:20220112215657p:plain

 

送信するリクエストが1秒おきに404レスポンスを受信することを確認できて。

バックエンドが密輸されたプレフィックスに後続のリクエストを。

追加したことが確認できて。

 

f:id:ThisIsOne:20220112215623p:plain

 

Content-Lengthのオプションを解除して。

 

f:id:ThisIsOne:20220112220224p:plain

 

次は、下記のリクエストで、完全なリクエストがバックエンドサーバに密輸して。

 

f:id:ThisIsOne:20220112215525p:plain

 

リクエストのパスが存在しないエンドポイントを指しているので。

リクエストが常に404応答を受け取ることを意味して。

 

応答キューをポイズニングすると、正常にキャプチャした他のユーザの応答を。

簡単に認識できるようになるので。

応答キューをポイズニングする要求を送信して。

自身の要求に対する404応答を受け取って。

 

f:id:ThisIsOne:20220112222145p:plain

 

その他の応答コードは、管理者ユーザ向けの応答を。

正常にキャプチャしたことを示して。

 

f:id:ThisIsOne:20220112222254p:plain

 

管理者の新しいログイン後のセッションCookieを含む302応答を。

キャプチャするまで、このプロセスを繰り返して。

セッションCookieをコピーして。

 sB6ehEIKcaiBZMtNXEmvkMpW3xkCn9vj

 

f:id:ThisIsOne:20220112215456p:plain

 

セッションCookieを使用して次のリクエストを送信して。

管理パネルを含む200の応答を受信するまで、要求を繰り返し送信して。

 

f:id:ThisIsOne:20220112215325p:plain

 

管理パネルで、Carlosを削除すると。

 

f:id:ThisIsOne:20220112215021p:plain

 

クリアできた。

 

f:id:ThisIsOne:20220112172929p:plain

 

Best regards, (^^ゞ