Shikata Ga Nai

Private? There is no such things.

Reflected DOM XSSをやってみた

Hello there, ('ω')ノ

 

反映されたDOM XSSを。

 

このラボでは、反映されたDOMの脆弱性を示して。

サーバサイドのアプリケーションが要求からのデータを処理して。

応答でデータをエコーするときに発生して。

 

まずは、ページにアクセスして検索を。

 

f:id:ThisIsOne:20210419112550p:plain

 

ソースコードを確認して。

 

f:id:ThisIsOne:20210419112658p:plain

 

検索文字列は、下記の関数に渡されるようで。

 eval('var searchResultsObj = ' + this.responseText);

 

f:id:ThisIsOne:20210419112805p:plain

 

レスポンスを見るとJSONに検索文字が反映されて。

 Hack

 ⇩

 "Hack"

 

f:id:ThisIsOne:20210419115327p:plain

 

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

 

f:id:ThisIsOne:20210419113618p:plain

 

下記の検索文字をいれてSendすると。

JSONは、引用符をエスケープしているようで。

ただし、バックスラッシュはエスケープされず。

 "Hack"

 ⇩

 "\"Hack\""

 

f:id:ThisIsOne:20210419113706p:plain

 

下記を検索すると。

 "-alert(1)-"

 ⇩

 "\"-alert(1)-\""

 

f:id:ThisIsOne:20210419113851p:plain

 

下記で検索すると。

最初の二重引用符文字をエスケープしようとして。

2つ目のバックスラッシュが追加されて。

これで、"\\"が検索文字として閉じられて。

 

 \"-alert(1)}//

 ⇩

 "\\"-alert(1)}//"

 

 

f:id:ThisIsOne:20210419114402p:plain

 

レスポンスを確認すると、下記のように。

最初の二重引用符文字をエスケープしようとすると、2番目のバックスラッシュが追加されます。 結果として生じる二重円記号により、エスケープが効果的にキャンセルされます。 これは、二重引用符がエスケープされずに処理されることを意味します。これにより、検索語を含める必要のある文字列が閉じられます。

算術演算子(この場合は減算演算子)を使用して、式の前に式を区切って。

alert()を呼び出して。

最後に、閉じ中括弧でJSONオブジェクトを閉じて。

2つのスラッシュで、オブジェクトの残りをコメントアウトして。 

 

{

 "searchTerm":"\\"-alert(1)

}//","results":[]}

 

f:id:ThisIsOne:20210419140905p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210419141018p:plain

 

Best regards, (^^ゞ