ݺߣ

ݺߣShare a Scribd company logo
Cross Site Scripting aka XSS:
           Начало

                           QAClub #21
                         1 марта 2012
                     Колодяжный Иван


                                        1 из 20
Agenda
•   Безопасность и Web
•   JavaScript и HTML
•   XSS – что это такое и с чем его едят?
•   XSS: тогда и сейчас
•   Делаем первые шаги
•   Как это было у них?
•   Поиск XSS на сайте
•   Что дальше?
•   Пару слов о защите

                         QAClub #21         2 из 20
Безопасность и Web


• Пользовательские
  данные
• Вирусы и трояны
• Атаки на сайты




                     QAClub #21   3 из 20
JavaScript и HTML
•   Как работает браузер?
•   Что из себя представляет HTML?
•   DOM модель
•   JavaScript
•   Cookies




                     QAClub #21      4 из 20
XSS – что это такое и с чем его едят?
• Буквально: «межсайтовый скриптинг»
• По факту: XSS injection – инъекция
  сторонних скриптов на атакуемый сайт




                   QAClub #21            5 из 20
XSS: тогда и сейчас
• 1990-е: фан и печеньки
  – Прикалываться над пользователями
  – Воровать админские cookies на форумах
• 2000-е: карты, деньги, два ствола
  – Все так же воруем аккаунты
  – Показываем баннеры и рекламу
  – Атакуем «чужие» сайты


                     QAClub #21             6 из 20
Делаем первые шаги




       QAClub #21    7 из 20
Задача
• Внедрить скрипт на сайт:
  <script>alert(‘hello QAClub’)</script>




                      QAClub #21           8 из 20
Способы решения
• Заставить пользователя перейти по ссылке
• Ввести скрипт на в поле ввода
• Прячем скрипт
• Отключение клиентской валидации
• Ломать – не строить, или не валидный
  HTML
• Баги браузеров

                   QAClub #21            9 из 20
Заставить пользователя перейти по
              ссылке
• Вариант A:
  <a href=“mysite.com” onclick=“<script>alert('hello
  QAClub')</script>”>misite.com</a>


• Вариант B:
  <a href=“javacript:alert('hello QAClub')”>misite.com</a>




                            QAClub #21                       10 из 20
Ввести скрипт на в поле ввода
• Простой алгоритм:
  – Находим поле ввода (input)
  – Вводим в него hello <script>alert('hello
    QAClub')</script> QAClub
  – Смотрим что получилось




                        QAClub #21             11 из 20
Прячем скрипт
• Самый простой способ – HTML(URL)
  encode/decode
  – &lt;script&gt;alert(&#39;hello
    QAClub&#39;)&lt;/script&gt;
  – %3cscript%3ealert(%27hello+QAClub%27)%3c%2fscri
    pt%3e
  – См. Предыдущий способ
• Advanced level:
  – Unicode encode
  – etc

                       QAClub #21               12 из 20
Отключение клиентской валидации
• Дебаггер JavaScript в браузере
• Отправка POST/GET запросов мимо
  браузера




                  QAClub #21        13 из 20
Advanced level
• Ломать – не строить, или не валидный
  HTML
• Баги браузеров




                   QAClub #21            14 из 20
Как это было у них?
• Twitter, сентябрь 2011 – неправильная
  обработка атрибутов тега <img>
• Facebook, апрель 2011 – неправильная
  обработка атрибутов тега <a>
• Google – Analytics, support forum, Reader




                     QAClub #21               15 из 20
Поиск XSS на сайте
• Статический анализ кода
• Автоматизация поиска на сайте:
  – Использование Web GUI
  – Использование POST и GET запросов




                     QAClub #21         16 из 20
Пару слов о защите
• Не доверять пользовательским данным
• Модули для веб-серверов для фильтрации
  запросов
• IPS/IDS




                  QAClub #21          17 из 20
Что дальше?
• Advanced способы
• Думаем, думаем, думаем
• Автоматизация рутины




                  QAClub #21   18 из 20
Список используемой литаратуры




   http://blog.e0ne.info/?tag=/xss




                QAClub #21           19 из 20
Спасибо
E-mail: e0ne@e0ne.info      Skype: e0ne-user
Twitter: @e0ne              Blog: http://blog.e0ne.info/




                         QAClub #21                  19 из 19

More Related Content

Cross Site Scripting aka XSS: Начало

  • 1. Cross Site Scripting aka XSS: Начало QAClub #21 1 марта 2012 Колодяжный Иван 1 из 20
  • 2. Agenda • Безопасность и Web • JavaScript и HTML • XSS – что это такое и с чем его едят? • XSS: тогда и сейчас • Делаем первые шаги • Как это было у них? • Поиск XSS на сайте • Что дальше? • Пару слов о защите QAClub #21 2 из 20
  • 3. Безопасность и Web • Пользовательские данные • Вирусы и трояны • Атаки на сайты QAClub #21 3 из 20
  • 4. JavaScript и HTML • Как работает браузер? • Что из себя представляет HTML? • DOM модель • JavaScript • Cookies QAClub #21 4 из 20
  • 5. XSS – что это такое и с чем его едят? • Буквально: «межсайтовый скриптинг» • По факту: XSS injection – инъекция сторонних скриптов на атакуемый сайт QAClub #21 5 из 20
  • 6. XSS: тогда и сейчас • 1990-е: фан и печеньки – Прикалываться над пользователями – Воровать админские cookies на форумах • 2000-е: карты, деньги, два ствола – Все так же воруем аккаунты – Показываем баннеры и рекламу – Атакуем «чужие» сайты QAClub #21 6 из 20
  • 7. Делаем первые шаги QAClub #21 7 из 20
  • 8. Задача • Внедрить скрипт на сайт: <script>alert(‘hello QAClub’)</script> QAClub #21 8 из 20
  • 9. Способы решения • Заставить пользователя перейти по ссылке • Ввести скрипт на в поле ввода • Прячем скрипт • Отключение клиентской валидации • Ломать – не строить, или не валидный HTML • Баги браузеров QAClub #21 9 из 20
  • 10. Заставить пользователя перейти по ссылке • Вариант A: <a href=“mysite.com” onclick=“<script>alert('hello QAClub')</script>”>misite.com</a> • Вариант B: <a href=“javacript:alert('hello QAClub')”>misite.com</a> QAClub #21 10 из 20
  • 11. Ввести скрипт на в поле ввода • Простой алгоритм: – Находим поле ввода (input) – Вводим в него hello <script>alert('hello QAClub')</script> QAClub – Смотрим что получилось QAClub #21 11 из 20
  • 12. Прячем скрипт • Самый простой способ – HTML(URL) encode/decode – &lt;script&gt;alert(&#39;hello QAClub&#39;)&lt;/script&gt; – %3cscript%3ealert(%27hello+QAClub%27)%3c%2fscri pt%3e – См. Предыдущий способ • Advanced level: – Unicode encode – etc QAClub #21 12 из 20
  • 13. Отключение клиентской валидации • Дебаггер JavaScript в браузере • Отправка POST/GET запросов мимо браузера QAClub #21 13 из 20
  • 14. Advanced level • Ломать – не строить, или не валидный HTML • Баги браузеров QAClub #21 14 из 20
  • 15. Как это было у них? • Twitter, сентябрь 2011 – неправильная обработка атрибутов тега <img> • Facebook, апрель 2011 – неправильная обработка атрибутов тега <a> • Google – Analytics, support forum, Reader QAClub #21 15 из 20
  • 16. Поиск XSS на сайте • Статический анализ кода • Автоматизация поиска на сайте: – Использование Web GUI – Использование POST и GET запросов QAClub #21 16 из 20
  • 17. Пару слов о защите • Не доверять пользовательским данным • Модули для веб-серверов для фильтрации запросов • IPS/IDS QAClub #21 17 из 20
  • 18. Что дальше? • Advanced способы • Думаем, думаем, думаем • Автоматизация рутины QAClub #21 18 из 20
  • 19. Список используемой литаратуры http://blog.e0ne.info/?tag=/xss QAClub #21 19 из 20
  • 20. Спасибо E-mail: e0ne@e0ne.info Skype: e0ne-user Twitter: @e0ne Blog: http://blog.e0ne.info/ QAClub #21 19 из 19

Editor's Notes

  • #2: Test notes
  • #13: http://www.opinionatedgeek.com/dotnet/tools/htmlencode/encode.aspxhttp://www.opinionatedgeek.com/dotnet/tools/urlencode/Encode.aspx
  • #16: Twitter – вставка скриптов, Facebook – вставка скриптов, iframe,google
  • #18: intrusion detection systemIntrusion detection and prevention systems
  • #21: «всем спасибо, все свободны» (с) 