CRLF to XSS から学ぶ

ソース:

medium.com

脆弱性:CRLF, XSS

 

訳:

CRLF 脆弱性を発見し、いくつかのバイパスを使用してそれを XSS 脆弱性に連鎖させることができました。
Snapchatに属するドメインで見つけました。

 

CRLFとは何ですか?

CRLF は、キャリッジ リターン (CR) とライン フィード (LF) を表します。
これらは、テキスト行の終わりと新しい行の始まりをマークするために使用される制御文字です。
これら 2 つの文字のシーケンスは、UnixWindows などのさまざまなオペレーティング システムで行末として使用されます。

セキュリティの観点から見ると、CRLF インジェクションは、攻撃者が HTTP 応答に CRLF 文字を挿入できる攻撃の一種です。
これにより、HTTP ヘッダー インジェクション、クロスサイト スクリプティング (XSS)、場合によってはリモート コード実行 (RCE) など、さまざまなセキュリティ問題が発生する可能性があります。

 

ドメインを target.com という名前にするので、始めましょう。

エンドポイント `target.com/api/users/id` を見つけました。
ここで、`users/id` は `X-api` ヘッダーに反映されています。
「id」を削除して「%0d%0aaanything」に置き換えたところ、うまくいきました。
それでは、XSS を取得する方法を見てみましょう。

まずコンテンツタイプを text/html に変更する必要があるので、ペイロードを追加しました、 %0d%0acontent-type:text/html;

 

 

しかし、うまくいかず。

そこで、サーバーがフィルタリングしていることを発見しました/エンコードを試してみましたが、うまくいきませんでした。
content-type を削除してペイロードを使用するのはどうでしょうか %0acontent-type:%0a%0a<html>

 

 

撤去されて今は <html>はburp では機能するようですが…
ブラウザではまだ機能せず、テキストとして処理されました。 

 

いくつかの検索の後、問題がどこにあるのかがわかりました。
応答のx-content-type-optionsヘッダーが常に目の前にありました 

 

このヘッダーは何ですか??

X-Content-Type-Options応答ヘッダーは、特定の種類の攻撃を防止できるセキュリティ機能です。
可能な値は 2 つあります。
nosniff
そして undefined。

もし X-Content-Type-Optionsヘッダーはnosniffに設定されている場合、MIME タイプを使用するように、またContent-Typeヘッダーの内容を盗聴したり、MIME タイプをオーバーライドしたりしないでくださいとブラウザに指示します。

一方、 X-Content-Type-Optionsヘッダーは undefined と設定されている場合、これは、ブラウザが独自のコンテンツ タイプ スニッフィングを使用することを意味します。
これは、ブラウザーが応答の内容に基づいてコンテンツ タイプを変更できる可能性があり、セキュリティ上の脆弱性につながる可能性があるため、安全ではない可能性があります。

一般に、セキュリティ対策としてX-Content-Type-Options ヘッダーを nosniff と設定することをお勧めします、あなたのすべてのリソースのために。
これにより、ブラウザーが正しいコンテンツ タイプを使用し、コンテンツを盗聴しないようになり、特定の種類の攻撃を防ぐことができます。

したがって、ブラウザが応答を正しく処理できるように、これを undefined に設定し、content-type を削除するだけで済みます。

 



 

最後に xss-protection を削除し、xss を追加します。

 

 

ほなほな。