バイパスGoogleのXSSチャレンジ


前提条件


始める前に、XSSに精通しなければならないか、少なくともそれについての考えがあるべきです.ここでは、XSSとは何かを理解するために読むことができる良い記事です.Read !
また、読者は少なくともJavaScriptに精通していると仮定します.そうでないならば、私はJSと若干の時間を過ごして、基本と快適になることを提案します.あなたはjavascript.info and MDN これは非常に有用です.

ブレイク


よく、我々はすでにGoogle XSS挑戦を解決しました、そして、私が私が最初にこの挑戦を試みたとき、私がかなり基本的なものを共有したかったです.私はあなたがそれを解決せずにすべてのレベルをバイパスすることができますと言う場合はどうですか?

私はそれが良いではないが知っている!それは不正行為としてカウントされませんので、我々はすでにゲームを解決した.その超簡単ですが、このポストは、アプリケーションの作業を理解する方法を理解し、どのようにアプリケーションの弱さを探すのに役立ちます.
イントロページでは、チャレンジを開始するhttps://xss-game.appspot.com 次のように表示できます.

Is it possible to cheat at this game?
Yes, since this is a browser-based game, you will be able to cheat by messing with the page internals in developer tools or editing HTTP traffic. However, we're sure that you won't have to resort to that -- there are hints and source to guide you. And as your teacher once told you: you would only be cheating yourself ;-)


あなたがしなければならないすべては、このゲームは、ゲームの進行状況を検証する方法を理解しています.
あなたはレベル1のそのURLに気づくでしょうxss-game.appspot.com/level1 そして、レベル2のそれはそうですxss-game.appspot.com/level2 . クールならxss-game.appspot.com/level3 それはレベル3には、私たちをリードする必要があります!次のメッセージを得る

Based on your browser cookies it seems like you haven't passed the previous level of the game. Please go back to the previous level and complete the challenge.


サイトのように私たちがクリアしたレベルを追跡しているようですcookies そして、あなたが行くならばapplication > cookies あなたはクッキーがHttpOnly これらのクッキーはクライアント側から変更できません.周りの方法を見つける必要があります.

NOTE: well if you add /frame/ after URL or each level then the cookie message doesn't seem to appear. Ex- xss-game.appspot.com/level1/frame/ and so on, however I am not sure whether progress will be tracked or not.


レベル1では、devのツールを開き、source > frame 探してgame-frame.js .

ここでの良いことは何が起こっているかをかなり明確ですが、説明のために、8行目のブレークポイントを設定し、ペイロードを設定しましょう<script>alert("test")</script> を返します.

ゲームフレームを破壊する.js
6行目からアラートを実行するとiframe その後、警告は抑制されますが、警告のテキスト内容は引数として渡されますs を呼び出す.
8行目はこちらparent Windowプロパティは、現在のウィンドウの親ウィンドウ(この場合、IFrame)を返す.だから、警告メッセージを外部のウィンドウに送信されているparent.PostMessage .
10行目の警告テキストコンテンツはいくつかの余分な文字列で連結され、タイムアウトは50 msに設定されます.
GIFでもデバッガがゲームに連れて行くのを見ることができます.からのメッセージを聞くJSiframe JavaScriptに精通している場合は、いくつかのことを理解することができます.
概要:iframeからアラートを開く必要があるレベルをクリアするには
以下のコードは、私が思い付いたコードです
 function bypass_level(){
    iframe=document.getElementsByClassName('game-frame')[0].contentWindow.document; 
    bypass=document.createElement('script');
    bypass.textContent="alert(/level bypassed/)";
    iframe.head.appendChild(bypass) 
 }
 window.onload=function(){    
    bypass_level();
 }
  • 最初にiframe そして、それは内部です.
  • それから、script 要素とスクリプトの内容をalert(/level bypassed/)
  • 付加するscript 中で要素headiframe コンテンツ.
  • この関数は、次のレベルに移動するたびにページを再読み込みするたびに呼び出されます.
  • ここにデモがあります.

    ちょうど6回のクリックで我々は全体の課題をクリアしました.
    正直に、我々はコードのこの多くさえ必要としません.我々がトップからiframeに開発ツールの範囲を変えるならば、コンソールで警報権利を実行してください、そして、それは働きます.

    冗談は別として、私はレベルもバイパスする他の方法があると信じています.それらを見つけるし、コメントでそれらを言及してください.私は最初に、アプリケーションの作業を理解し、このポストに来るが、最後にそれはあなたの選択のすべてのレベルを解決することをお勧めします.

    📄 Google XSS challenge detailed walkthrough level 1-6


    お気軽にポストの間違いを指摘したり、改善を提案します.もともと投稿souvikinator.netlify.app そして、最終的に、ここで他のブログ柱を移住させてください.
    🥳 それで、引用でポストを包む時間です

    “If you cheat, you would only be cheating yourself” – literally every teacher in the world 🤣