テキストのGoogleの翻訳:
あなたはタイトルが「リターン指向プログラミング(ROP)」を意味していると考えているため、あなたがここにいる場合は、クリックしてください。私は、リンクが「ガジェット」はXSSを選択することができない、技術を紹介したいと思い相対パスカバレッジ(RPO)を利用することができます。これはシリーズのRPOを使用して、私のGoogleサービスの最初の部分です。これは高度なトピックですので、私は読者がRPOの基本的な知識を持っている願っています。そうでない場合(、私は読んでお勧めガレス の元のプレゼンテーションとジェームズ にphpBBのを、実際のRPOエラー。
認識RPO
(つまり、緩い解決)という事実を私たちは、RPO(ジェームズ実際に作成PRSSIを、良いが)知っているQuirksモードでのCSSパーサに依存寛容の不正な構文います。当然のことながら、最初のステップは、RPOページが正しいDOCTYPEを提供です抜け穴を見つけるためにチェックすることです。私たちは、その後、インポートされた比較的スタイルシートを探します。
:私はすぐに、このような目標グーグル(Googleツールバー)で見つかったHTTP://www.google.com/tools/toolbar/buttons/apis/howto_guide.html
< HTML > < ヘッド> < タイトル> GoogleツールバーAPI -カスタムボタンの作成へのガイド</ タイトル> < リンクのhref = "../../ Styles.cssを" のrel = "スタイルシート" タイプ= "テキスト/ CSSの" / > [..]
次のステップでは、パスをどのように解釈するか、ターゲット・サーバーいじりが含まれます。ブラウザの場合、ディレクトリはスラッシュで区切られました。しかし、スラッシュとサーバーのパスは、必ずしもディレクトリが存在しているという意味ではありません。例えば、JSPは、セミコロンは、(例えばためのパラメータとして扱われた後にすべてなりパスパラメータ、受け入れる http://example.com/path;/notpath )、ブラウザは、このパターンを認識しない、それはパスのままであることを、およびディレクトリがあります。
同様に、Googleツールバーは、独自の奇妙な解釈パスを持っています。基本的には、エージェントは、要求を処理することができる持っているようだと、すべてのコンテンツは、パスをデコードして、実サーバに配布します。これは私たちがすることができます%2f
パスで使用スラッシュを置き換える:HTTP://www.google.com/tools/toolbar/buttons/apis%2fhowto_guide.html
ビューサーバー:/tools/toolbar/buttons/apis/howto_guide.html
ブラウザの視点:/tools/toolbar/buttons/apis%2fhowto_guide.html
輸入スタイルシート:/ツール/ ツールバー/ボタン/../../のstyle.css
さて、ブラウザその基本的なパス、/tools/toolbar/buttons/
およびない/tools/toolbar/buttons/apis/
ので参照して../../style.css
ジャンプ層。
しかし、私たちはより良いカタログをジャンプよりもそれを行うことができますか?もちろん。私たちは、偽のディレクトリをすることができます。私たちはシートが次の場所に位置していたスタイルをインポートするとします/tools/fake/styles.css
(:これは動作しません注意してください):HTTP : //www.google.com/tools/ 偽2F /..% %2fhowto_guide.htmlツールバー/ボタン/ APIの
- サーバの観点
- Viewサーバ:/ツール/ フェイク/../の ツールバー/ボタン/ APIを/ howto_guide.html
- ブラウザビュー:/ツール/偽/..%の2ftoolbar /ボタン/ APIの%2fhowto_guide.html
- 輸入スタイルシート:/ツール/フェイク/ ..%の2ftoolbar /ボタン/../../ のstyle.css
さて、ブラウザその基本的なパス、/tools/toolbar/buttons/
およびない/tools/toolbar/buttons/apis/
ので参照して../../style.css
ジャンプ層。
しかし、私たちはより良いカタログをジャンプよりもそれを行うことができますか?もちろん。私たちは、偽のディレクトリをすることができます。私たちは、スタイルシートは、次の場所に位置してインポートするとします/tools/fake/styles.css
(:これは動作しません注意してください):HTTP://www.google.com/tools /fake/..%2ftoolbar/buttons/apis%2fhowto_guide.html
Viewサーバ:/ツール/ フェイク/../のツールバー/ボタン/ APIを/ howto_guide.html
ブラウザの視点:/ツール/偽/..%の2ftoolbar /ボタン/ APIの%2fhowto_guide.html
輸入スタイルシート:/ツール/フェイク/ ..%の2ftoolbar /ボタン/../../のstyle.css
(基本的なパスのハイライト領域を表します)
ここで、我々は2つの仮想「ディレクトリ」、追加することができますfake/
し、..%2f
サーバー側で、彼らは互いに相殺するようにパスをし、ブラウザはそれが思うfake/
本当のディレクトリ、ある..%2ftoolbar
別のディレクトリ。理論的には、我々は基本的にこれを行うことができ https://www.google.com/*/styles.css 上の任意のスタイルシートをインポートします。残念ながら、これは本当に衝撃的である:エージェントのみにhttps://www.google.com/tools/*/styles.css 効果的。言い換えれば、魔法の外部エンコーディングのいずれかのパスがある/tools/
無効。それは可能ですが、私たちは https://www.google.com/tools/*/styles.css 上の任意のスタイルシートをインポートします。
私は周りを探し、それに加えて、すべての静的なものということが分かってきた http://www.google.com/tools/toolbar/buttons/gallery 、それはGoogleツールバーボタンギャラリーにリダイレクトhttp://www.google。COM /ガジェット/ディレクトリ?ツールバー=のFrontPage =&SYND。1 。
しかし、今のものはボタンギャラリーがあるので、面白くq
検索用語を指定するのパラメータは、パラメータがページに反映されています。:のは、単純なRPOペイロードを注入してみましょうHTTP : ?//Www.google.com/gadgets/directory SYND =&ツールバーのFrontPageを= 1&Q
= {} * {背景:赤}
場合にのみ、我々はいくつかの方法で、スタイルシートを参照することができます。事は、リダイレクト処理のクエリ文字列である。この問題を解決するのに役立ちます。例えば、http://www.google.com/tools/toolbar/buttons/gallery?FOO =バーは、我々はにリダイレクトされますhttp://www.google.com/gadgets/directory?synd=toolbar&frontpage=1& FOO =バー、およびクエリ文字列を添付してください。
最後のステップは、私たちがどのようにクエリ文字列を維持するためにスタイルシートとして引用されたときに把握することです。RPOは、参照されたスタイルシート自体は、クエリ文字列が含まれていないため、持続的に注入する必要があります。:しかし、行動のパスデコーディング、我々は、ライブラリペイロードによって参照ボタン・スタイル・シートにすることができHTTP : //www.google.com/tools/toolbar/buttons%2Fgallery%3Fq%3D%0a%7B%7D*% 7Bbackgroundを%3Ared%7D /..% 2Fである/のAPI / howto_guide.html
- サーバーの視点:/ツール/ツールバー/ボタン/ ギャラリーQ =%0Aの{} * {背景:赤}?/../ /apis/howto_guide.html
- ブラウザの視点:/ツール/ツールバー/ボタン%2fgallery%3fq%の3D%250A%257B%257D *%257Bbackground%253Ared%257D /..% 2F / APIを/ howto_guide.html
- 輸入スタイルシート:/ツール/ツールバー/ボタン%2fgallery%3fq%の立体%250A%257B%257D *%257Bbackground%253Ared%257D / ..%2F / APIを/../../ のstyle.css
- /tools/toolbar/buttons/gallery?q=%0a{}*{background:red}/style.css
- /gadgets/directory?synd=toolbar&frontpage=1&q=%0a{}*{background:red}/style.css
(ペイロード領域は、2つの強調表示された最後の注射、他の基本的なパスを表します)