どのJavascriptがハイフンを扱うのですか?

maritio_o:

私は見ていますXSSゲームと呼ばれるこの1チャレンジジェフ

課題は、と呼ばれるクエリパラメータ取るjeff入力として、およびという名前の変数に格納しますjeff課題の目標は、ページ上の警告ボックスをロードすることです。解決策は、内Javascriptを実行するためにハイフンを使用してeval()機能。

そこで、我々はこの評価を持っています:

eval(`ma = "Ma name ${jeff}"`)

そして、警告ボックスを取得するためのソリューションの入力がある(!スポイラー警告ませしゃれは意図していません。):

"-alert(1337)-"

今、私はJavascriptがそれらのハイフンを扱う方法を理解の切実に必要です!助けて!?

CertainPerformance:

サイトが使用するコードは次のとおりです。

let jeff = (new URL(location).searchParams.get('jeff') || "JEFFF")
eval(`ma = "Ma name ${jeff}"`)

searchParamsあなたに与えURLSearchParamsたオブジェクトを、その.get方法は、あなたに与えた文字列パラメータに対応します。だから、客観的に挿入、一部の文字を考え出すことです

ma = "Ma name <CHARACTERS>"

そして、、任意のコードの実行で結果を実行します。

最初のステップは、内の文字囲むようにある"後の文字列リテラルを終了するように、Sのname文字の後に文字列リテラルを再開する。

ma = "Ma name " <SOMETHING ELSE> ""

だから今は、ソート文字に入ることができるかを把握する必要があり<SOMETHING ELSE>、有効なJavaScriptコードになりますました。

あなただけに置けばalert()、それは有効になりません。

ma = "Ma name " alert() ""

それは構文エラーです。あなたは何を示すために何かを必要とするalertだけで、それの前に来る文字列リテラルトークンに関係しています。Aは、-トリックを行うことができますが、そのいずれかの他のオペレータ、などの可能性+%などが。あなたはまたの終わりを接続する必要がありalert、文字列リテラル、最後に別のオペレータのためにこのように必要性を再開して:

ma = "Ma name "-alert('foo')-""
//            ^^^^^^^^^^^^^^^^

ma = "Ma name "-alert('foo')-""

だから、挿入する必要がある文字は、次のとおりです。

"-alert('foo')-"

文字列が検索パラメータの内部に配信されているので、注意することを+リテラル文字として解釈されることはありません+、むしろ、それがすることがあります- スペースとして解釈だから、jeff="+alert(1337)+"仕事ではなくなりjeff="%2balert(1337)%2b"ます。

彼らはにつながるため、セミコロンは、同様に動作します。

ma = "Ma name " <SOMETHING ELSE> ""
ma = "Ma name "; alert()        ;""

これは有効な構文です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=303033&siteId=1
おすすめ