Перевірка входження рядка
Помилка в регулярному виразі
Інший спосіб трохи складніше, але також зустрічався на реальних проектах - це перевірка домену по регулярному виразу. Однак, всі ми люди, а людям властиво помилятися. І були такі випадки, коли відбувається перевірка, що домен відповідає регулярному виразу, припустимо
А що тут не так? А то, що точка в регулярному виразі - це будь-який символ, тому відправивши посилання на mail-vulnsite.com (який можна зареєструвати) - перевірка буде пройдена.
Відсутність перевірки перенаправлення
«Відрізання» частини домену
Для деяких механізмів перевірки - доменне ім'я буде відповідати google.com, а по факту - домену, вказаного через символ «@».
Деякі символи дозволяють «відрізати» хвіст у домену, і якщо парсер пропускає їх:
Символ використовується для hash-навігації або передачі інформації без участі сервера. Відкривши це посилання в браузері, браузер відправить GET запит тільки на evil.com, а обробка інформації після символу відбувається на стороні клієнта.
Аналогічна ситуація, тільки рядок після знака питання піде в параметр, точно так же, якщо відкрити сторінку evil.com/?vulnsite.com
Здебільшого це стосується сайтів на PHP, бо працював він з nullbyte не завжди добре.
- Окремо варто відзначити символ # X1f4a9; (U + 1F4A9)
Веселий emoji «PILE OF POO» - альтернатива nullbyte для таких СУБД як MySQL з кодуванням utf8. І ця вразливість зустрічається на багатьох проектах.
Це стосується і до звичайних доменних імен.
Більш того, ці варіанти можна змішувати:
Аналогічно, Long IP можна уявити в вісімковій і шістнадцятковій системах числення:
Як виявилося, це популярний сервіс, а користуються ним багато. Після реєстрації в додатку я створив свою форму і спробував додати домен PortSwigger. Природно вилізла помилка - «This domain name is already in use», однак, тут я згадав про одну фиче з доменами.
Існує така штука, як домен нульового рівня. В кінці домену повинна стояти крапка. але вона не береться.
Наприклад, сайт вікіпедії нормально працює з точкою
але як буде вести себе логіка програми - ще незрозуміло.
Залежно від налаштувань сервера - сайт може реагувати по-різному. Хтось буде показувати 404, хтось invalid hostname, хтось bad request. Але в будь-якому випадку, браузери вважають такий запит цілком дійсним.
І як ти вже здогадався, я додав домен surveys.portswigger.net. в особистий кабінет. А так як сервіс досить популярний, знайшов ще десяток-другий компаній, який потрапили до мене в кабінет: