web-dev-qa-db-ja.com

スラッシュなしのHTMLタイトルタグ内のXSS

これがXSSに対して脆弱かどうかを確認しようとしています。URLを介してtitleタグのコンテンツを制御できます。これは、最初のスラッシュが表示されるまでサイトがテキストのみを取得するという事実がなければ、サイトを脆弱にし、titleタグ。私は既に%2Fを試しましたが、サーバーはそれをフォワードスラッシュに変換するため、そこで入力を切り取ります。これはおそらくmod_rewriteですが、AllowEncodedSlashesはありません。

例:domain.com/subfolder/myXss</title>blaは... <title> myXss < </ title>につながります

だから私の質問は、これら2つのどちらかが可能かどうかです:

  • 他の方法でスラッシュをエンコードできますか?
  • titleタグを何らかの方法で閉じるか、悪意のあるコードをタイトルタグに挿入できますか? scriptを単に挿入することはできません。title 鬼ごっこ。
5
Philipp F

HTML5 <title>タグ内では、スラッシュを許可せずに新しい要素を挿入することはできません。

ブラウザのHTMLパーサーはステートマシンであるため、トークナイザーの状態遷移を追跡するだけで( HTML構文の仕様 に従って)、どれだけ到達するかを確認できます。

あなたの場合、 head section<title>タグは " generic RCDATA element parsing algorithm "を呼び起こします。 RCDATA状態 から、最後に開いたタグを閉じない限り、すべての開始ブラケットは無視されます。したがって、生のテキストとして扱われない唯一の継続は、リテラルシーケンス</title>です。また、その文字列にはスラッシュが含まれているため、XSSは使用できません。 (この動作は、<textarea>などの他の要素と同様です)。

私の答え こちら には、トークナイザーが可能なXSSの推論にどのように役立つかについて、もう少し詳細な説明があります。

他の方法でスラッシュをエンコードできますか?

HTMLパーサーは、リテラル/0x2f)のみを受け入れます。 Webアプリケーションをだましてスラッシュを印刷する方法を尋ねている場合、これはWebアプリケーションの実装に依存するため、純粋な推測です。

1
Arminius

サーバーが何をしているかによって、さまざまなことを試すことができます。ダブルエンコーディング、16進エンコーディング。私がこれを最初に見ていたら、バックスラッシュなしでどうやってそれを行うことができますか?.

タイトルタグを閉じる必要はありません。JavaScriptコンテキストにアクセスできるようにする必要があります。

言い換えると、スクリプトalert(xss)/ scriptを挿入して(スクリプトの開始タグと終了タグを追加できないようにする)、スラッシュが許可されている場合は実行され、htmlタグを閉じる必要はありません。 。

%3Csvg%20onload%3D%22alert(%27xss%27)%22%3Eのようなものはどうですか

0
user3632719