HTTP応答には、攻撃者が制御するコンテンツを含む次のヘッダーがあります。
Content-Disposition:attachment; filename="attacker_controlled.html"
攻撃者が制御する値に表示できない文字は、[CR]と[LF]だけです(どの組み合わせでも表示できません)。私がHTTPヘッダーインジェクションについて読んだすべての場所で、それらの文字をインジェクトするように言われました。
CRLFなしでHTTPヘッダーインジェクションまたはその他の有害な攻撃を実行することは可能ですか?
あなたが何を意味するかは、剥がすことによります。 (Pythonのstring.strip()
メソッドは、オカレンスを最初と最後から削除するだけで、CRLFインジェクションは停止しません。)すべてのオカレンス "\ r\n"を置き換える場合、まだ脆弱です HTTP応答分割に。これは、私が知っているすべてのhttpクライアントおよびサーバーも、区切り文字として「\ n」文字だけを認識するためです。この場合、私たちが気にするのはブラウザだけです。
常に、改行「\ n」をすべて「なし」で置き換え、「\ r」を「なし」で置き換える最善の方法は、適切に測定するためです。 「\ r」のみを検索するHTTPプロトコルの埋め込みを見たことがありません。セキュリティへの影響がゼロであることがわかっている限り、これを行うには、適切な対策をとる必要があります。 HTTP属性も心配している場合は、 ""、 "\" "、"; "も取り除く必要がありますが、これは、攻撃者が制御する文字列がhttpヘッダーのどこにあるかによっても異なります。
あなたが言及している状況下で、HTTPヘッダーインジェクションを行う方法を私は知りません。
ただし、パストラバーサル攻撃、アクティブコンテンツのダウンロード、システム標準ファイルの上書きなど、他のリスクもあります。 RFC 6266、セクション4. および RFC 2183、セクション5 を読んで、いくつかのリスクについて説明することをお勧めします。 (RFC 6266はContent-Dispositionヘッダーを定義するものです。)攻撃者がファイル名とファイルの内容の両方を制御できるようにする場合、XSSリスクについての説明は このブログ投稿 も参照してください。