XSS, Клуб Хакерів
А ви знаєте все про персональні комп'ютери?
Ось і черговий довгоочікуваний урок! Наступні уроки торкатимуться набагато складніших тем, ніж попередні, тому без деякого вступу в тему «уразливості» (саме вони опиняться під нашою пильною увагою у наступних уроках) обійтися не вийде. Отже, що ж таке вразливість? Це деяка недосконалість, нестача будь-якої програми, що дозволяє за певних умов отримати підвищені привілеї. Це загальне значення терміна. Тепер пройдемося докладно по всіх його складових. Вразливою програмою може бути як програма, встановлена на комп'ютері (в т.ч. драйвера і операційна система), так і будь-який веб-додаток, наприклад движок сайту або форуму (він жеCMS —C ontentM anagementS ystem, система управління вмістом). Під певними умовами розуміється не звичайне повсякденне використання програми за його прямим призначенням, а умисне експлуатацію вразливості (бага). Підвищеними привілеями можуть бути: отримання доступу до деяких даних, отримання доступу до вразливого компонента системи, отримання доступу до системи, порушення роботи системи і т.д. Під «підвищеними» мається на увазі, що у звичайних умовах і за задумом розробника користувач не мав отримати цих привілеїв та можливостей. Сподіваюся, пояснив доступно і суть поняття про вразливість зрозуміла. Методика експлуатування вразливостей загалом проста: визначити і застосувати вразливість. Саме цим ми зараз і візьмемося на прикладі XSS-уразливості. ЗИ схема, за якою описуватиметься дана вразливість, буде надалі застосовуватися і для опису всіх інших багів.
XSS -C rossS teS cripting (CSS вжезайнятоC ascadeS tyleS heets). Вразливість, що виникає внаслідок недостатньої фільтрації даних, що вводяться користувачами і надалі відображаються на сторінках сайту. Дозволяє розмістити безпосередньо на сторінках сайту довільний html-код (відповідно код буде виконуватися у всіх користувачів, що зайшли на сторінку). Давайте подумаємо, що означають для нас такі можливості. Що можна зробити цікавого за допомогою HTML. Ну, по-перше, можна просто налити: вивести напис величезних розмірів (та будь-які можливості форматування тексту в html) або поставити редирект на інший сайт (на фейк, звичайно). Редирект, якщо що, робиться так:
Для того, щоб виявити xss, потрібно перевірити на її наявність усі потенційно вразливі елементи сайту. В даному випадку такими є поля введення тексту, який буде відображений на сторінках сайту (принтабельні поля). Це можуть бути поля надсилання повідомлення, теми повідомлення тощо. Слід перевіряти на наявність уразливості кожне таке поле. Для цього зробимо послідовно все нижчеописане доти, доки не побачимо аналогічне повідомлення:
Отже, починаємо шукати - підставляємо у всі принтабельні поля наступний код:
Нічого? Ок, пробуємо так:
Знову нічого! > шукаємо те, що ми туди запровадили). Знайшли? Дивіться, що сталося з нашим кодом. Швидше за все, були відфільтровані спец-символи. Без них код працювати, ясна річ, не буде… Вони вбили скрипт! Сволоти! xD Фільтрування цих символів означає одне:активної xss тут немає. Але не впадаємо у відчай, ще є варіант зпасивними xss і навіть є шанс обійти фільтрацію! Але про це трохи згодом (див. доповнення). Якщо все ж таки вам вдалося бачити повідомлення, значить ви знайшли вразливе поле! УРА товариші!
(Хтовміє, все одно гляньте по-швидкому, може що нового зрозумієте =)) Отже, заходьте на сайт, де знаходиться ваш сніффер. Знайомимося з інтерфейсом: є дата і час навіщось наш ip. За ними кнопка поновлення лога. А ще є така штука, як картинка сніффера. Ім'я її в моїй збірці -s.gif Ось саме через звернення до цієї картинки сніффер і ловить усі запити. Відкрийте цю картинку (yourhost.com/s.gif) і оновіть лог. Бачите новий запис? У нашому розпорядженні час здійснення запиту, ip того, хто звернувся до картинки, порожній рядок запиту (QUERY), реферер (з якого сайту здійснено звернення до картинки) та агент (тобто браузер) користувача. Тепер спробуйте посилання на картинку дописати що-небудь після знака «?». Наприклад, так:
Освіжимо в пам'яті один момент із основної частини уроку:
Під час пошуку XSS вигарантовано стикатиметеся з подібною фільтрацією. При чому фільтруватися можуть не тільки символи, але і багато інших не менш важливих для проведення атаки (впровадження працездатного коду). В тому числі:
Просто ставимо у принтабельне поле всі потрібні нам символи, а потім шукаємо їх у вихіднику сторінки. Щоб простіше було шукати, можна ще додати до середини якесь слово, напр. XSS просто для орієнтиру. Знайшли? Дивіться, що залишилося на місці, а що «знівечилося» фільтром. Одразу скажу, що якщо ці символи (хоч якісь з потрібних нам крім) замінюються на щось інше чи видаляються, залиште всі ваші марні спроби впровадити код! Якщо ж символи просто віддалилися , можна спробувати поставититег (саме так називають ці дужки та ключові слова в них), і Фільтр або пропустить і не видалити це (адже тепер тег не порожній), або відфільтрує як заборонений тег. Якщо пропустив - все шикарно, переходимодо вставки потрібного нам коду (код сніфера для крадіжки кукіс, пам'ятаєте?). А якщо тупо видалив, підставимо замість чогось таке:
Ставимо після = спочатку перший скрипт, тиснемо ентер, чекаємо закінчення завантаження сторінки. І так перебираємо, поки не побачимо таки омріяне віконце алерта (картинка була вищою). Якщо підстановка нічого не дала, куримо обхід фільтрів (див. додаток 1).
Ще трохи доповню… імхо давати користувачам (а тим більше адмінам) ось такі посилання
у відкритому вигляді дуже палевно… вам не здається? Зараз їх ховатимемо!Спосіб 1: топаємо на tinyurl.com і вбиваємо туди наше посилання. Отримуємо в результаті іншу… коротку та загадкову 😉 А результат її роботи — той самий: banana:Спосіб 2: шифруватимемо в base 64. Заходимо сюди і кладемо в поле наше посилання. Тиснемо «Encode» і отримуємо:
Спосіб 3: кодуємо в url отруйну частину посилання. Кодувати можна тут. Отримаємо посилання на такий вид:
У всіх 3 випадках результат роботи та спосіб застосування посилання один і той же. Не забувайте, що при цьому ще необхідно правильно застосувати СІ, щоб жертва перейшла за посиланням, перебуваючи на сайті, що атакується!
Думаю, багато пояснень не потрібно, ось сам код (у моїй збірці сніффера він є):
А ще, якщо ви використовували легенду про «код підтвердження», можете в кінець цього скрипту дописати щось таке (щоб заспокоїти схвильованого користувача):
Чому в цій частині приділив так багато уваги СІ? Та тому, що у випадку з самодостатніми xss складностями з технічної частини трохи менше ніж ніхрена, а найголовніше — ненав'язливо, але зрозуміло й переконливо пояснити жертві, куди і як вставляти код. Ну щож, вперед на послуги анонімної відправки пошти розсилати наш код! xD
Я повернувся і вирішив описати ще паруметодів вставки коду xss! *Ацький сміх* Є на багатьох сайтах можливості викладати картинки, а іноді навіть флеш-анімації (!) Прямо на сторінки сайту (або форуму або блогу). І я говорю не про те, що ми бачили вконтакті, коли картинки завантажуються на сервер, а потім там обробляються перед додаванням на сторінки, а коли ми вказуємо посилання на зображення і відбувається його пряма вставка на сторінку. Гріх не скористатися такою можливістю! Хитрість в тому, що можна в картинку і код сніфера вставити і вийде у нас таким чином активна xss (які зі зрозумілих причин цінніші і ефективніші за пасивки), адже атаці буде схильний кожен, хто зустріне картинку на сайті.
Тут все простіше простого. Створюємо файл із вмістом у вигляді коду для пасивки:
І зберігаємо з розширенням.gif Тепер заливаємо це на якийсь хостинг, щоб отримати пряме посилання до картинки без будь-яких змін. Ось тепер можна класти картинку на форуми, в блоги, гостьові та скрізь, де є вставка картинок. До речі, цю фішку можна провести не тільки зі вставкою картинок, але й будь-яких інших файлів, у тих випадках, якщо файл можна залити на сайт і якщо його вміст буде відображатися на сторінці сайту.