条件
競争の条件に従って 、コードには以下が必要でした:
- UTF-8またはISO-8859-1エンコードである必要があります。
- POST要求によって、開始元と同じドメイン(GETなし)の
post.php
ページに自分自身をコピーする必要があります。 テキストパラメータはcontent
必要がありcontent
。post.php
はコードを適切にエスケープpost.php
すると想定できます。 - 配布中にサイズが増加することはありません(コードがnバイトで始まる場合、次のステップでn + xに増加することはありません)。 つまり nバイトを超えるコンテンツは
post.php
スクリプトによって無視されると想定しています。 - 書面で開始する必要があります(対応する注入のために他のすべてのパラメーターを後で追加できます)
- クエリ文字列のCookieまたはGETパラメーターを使用しないでください(コードのすべての行は、アクティブなXSSとしてページ自体にのみ存在します)。
- DOMツリーに関する情報を想定すべきではありませんが、ワームコード自体に含まれている場合は
class
またはid
使用できます。 この情報はサイトごとに異なる可能性があるため、ページ上のn番目のスクリプトの検索は使用できません。 - 少なくともInternet Explorer 7.0およびFirefox 2.xで動作するはずです。
- XSSをページ上のメッセージとして(「ペイロード」として)生成する必要があります。
- 少なくともApache 1.3+およびApache 2+サーバーで動作するはずです(つまり、他のサーバーに関連するサーバー依存のものを使用しないでください)。
- ユーザーの参加なしで、または各ページで発生する最小限の参加で動作するはずです(たとえば、ページ上の任意の場所での
mouseover
)。
実行する
コンテストは1月4日に始まり、10で終了しました。著者は数百のオプションを受け取りましたが、そのうちの2つだけが最小限であり、すべての指定された条件下で機能しました。
<form><input name="content"><img src="" onerror="with(parentNode)alert('XSS',submit(content.value='<form>'+
innerHTML.slice(action=(method='post')+'.php',155)))">
そして
<form><INPUT name="content"><IMG src="" onerror="with(parentNode)submit(action=(method='post')+'.php',content.value=
'<form>'+innerHTML.slice(alert('XSS'),155))">
ワームの長さ: 161バイト 。 コードからわかるように、オプションは、言うまでもなく非常によく似ていますが、ほとんど同じです。 競争に関する完全な結論 。
まとめ
その結果に基づいて、RSnake は短いメモを公開しました。このメモでは、このようなワームから保護する方法を要約しようとしています(結局、最小限のコードには、最も効率的に機能するための共通のシグネチャがあります)。
著者はまた、一般にXSSワームの問題に焦点を当てた大規模な記事を公開しました。XSSワームと戦うことは非常に難しいが、それは可能であると主張しています。 この記事はやや長めですが、非常に興味深いものです。
関連リンク
ご清聴ありがとうございました。 コメントさせていただきます。
Web Optimizator:サイトの読み込み速度の確認