Один трюк для изучения: XSS (межсайтовый скриптинг)

хакер

Введение в XSS

XSS — это аббревиатура от Cross Site Scripting (Кросс-сайтовый скриптинг), но судя по способу именования инициалов, он должен называться CSS, но это то же самое, что и Cascading Style Sheets (CSS), так что берите именно XSS.

Атака XSS обычно относится к методу атаки, при котором злоумышленник внедряет вредоносный скрипт в веб-страницу, и когда пользователь просматривает веб-страницу, вредоносный скрипт выполняется для управления поведением браузера пользователя.

XSS-опасность

  • Украсть пользовательские файлы cookie, обеспечить конфиденциальность пользователей и украсть учетные записи пользователей.
  • Взлом сеанса пользователя (браузера) для выполнения произвольных действий, таких как выполнение незаконных переводов, форсирование журналов, отправка электронных писем и т. д.
  • Принудительно всплывающие рекламные страницы, браш-трафик и т. д.
  • Распространять межсайтовые скриптовые черви, зависающие веб-страницы и т. д.
  • Комбинируйте с другими уязвимостями, такими как уязвимости CSRF, для дальнейших атак.
  • ......

XSS-классификация

Атаки XSS можно классифицировать по тому, хранятся ли данные атаки на стороне сервера и всегда ли существует поведение атаки с данными атаки.Непостоянная XSS-атака и Постоянные XSS-атаки.

XSS-атаки можно разделить наОтраженный XSS,XSS типа DOM,Сохраненный XSS, где отраженные XSS и DOM XSS считаются непостоянными атаками XSS, а сохраненные XSS считаются постоянными атаками XSS.

Отраженный XSS (Отраженный XSS)

После того, как злоумышленник побуждает пользователя посетить URL-адрес с вредоносным кодом, сервер получает данные и обрабатывает их, а затем отправляет данные с вредоносным кодом в браузер, который анализирует данные с помощью XSS-кода и обрабатывает их как скрипт Выполнить и, наконец, завершите XSS-атаку.

Поскольку этот процесс подобен отражению, он называется Reflected XSS.

Шаги атаки:

1. Атака создает специальный URL-адрес, содержащий вредоносный код.

2. Пользователя побуждают открыть URL-адрес с вредоносным кодом, а сервер извлекает вредоносный код из URL-адреса и обрабатывает его как параметр, а затем возвращает данные с вредоносным кодом пользователю.

3. Браузер пользователя получает и анализирует ответ, а также исполняется подмешанный в него вредоносный код.

4. Вредоносный код крадет конфиденциальные данные пользователя и отправляет их злоумышленнику или выдает себя за пользователя и вызывает интерфейс целевого веб-сайта для выполнения операции, указанной злоумышленником.

Пример

Ниже приведен обычный процесс поиска.

1. Откройте домашнюю страницу и введите поисковый запрос.

Откройте домашнюю страницу и введите поисковый запросimage

2. Запустите поиск и посмотрите результаты

Запустите поиск и посмотрите результаты

Но если результаты поиска не найдены, серверная часть также вернет пользовательский ввод, который затем отобразится на странице.

Так как введенные пользователем данные здесь не обрабатываются, строим такую ​​ссылку:

https://www.kkkk1000.com/xss/Reflected/searchResult.html?kw=<script>alert("xss")</script> )

Затем побудите других щелкнуть по этомуСсылка на сайт), может быть выполнена отражающая XSS-атака.

Мы также можем замаскировать такие длинные ссылки и превратить их в короткие URL-адреса или QR-коды.

Короткий URL-адрес:

i6q.cn/4TJcII

QR код:

Может быть, вы думаете, что это просто всплывающее окно, это не большая проблема, но что, если мы изменим код атаки, чтобы загрузить сторонний js-файл? стать сdocument.cookieКак насчет кода для кражи куки? Короче говоря, если это будет настоящая атака, она не будет такой простой, как пуля.

XSS на основе DOM (XSS на основе DOM)

XSS типа DOM формируется из-за того, что XSS формируется путем изменения узлов DOM страницы.

В атаке XSS типа DOM извлечение и выполнение вредоносного кода осуществляется браузером, что является уязвимостью безопасности самого интерфейса.

Шаги атаки:

1. Злоумышленник создает специальный URL-адрес, содержащий вредоносный код.

2. Пользователей побуждают открывать URL-адреса с вредоносным кодом.

3. Браузер пользователя анализирует и выполняет ответ после получения ответа, а интерфейсный JavaScript извлекает вредоносный код из URL-адреса и выполняет его.

4. Вредоносный код крадет пользовательские данные и отправляет их на сайт злоумышленника или имитирует поведение пользователя и вызывает интерфейс целевого сайта для выполнения операции, указанной злоумышленником.

image

Пример

Далее идет страница деталей логистики, в URL есть параметр экспресс-номера, и данные получаются через этот параметр.https://www.kkkk1000.com/xss/dom/index.html?serialNumber=YT40359134268305 Страница сведений

Поскольку вы можете видеть в исходном коде, экспресс-номер, отображаемый на странице, отображается параметрами URL-адреса, взятыми напрямую. Итак, мы создаем URL следующим образом:

https://www.kkkk1000.com/xss/dom/index.html?serialNumber=<script>alert("xss")</script> )

Затем побудите других щелкнуть по этомуСсылка на сайт), вы можете выполнить XSS-атаку типа DOM.

image

Сохраненный XSS (Сохраненный XSS)

Разница между сохраненным XSS и отраженным XSS заключается в том, что вредоносный код сохраненного XSS хранится на сервере, а вредоносный код отраженного XSS хранится в URL-адресе.

В атаках Stored XSS вредоносные скрипты хранятся на целевом сервере. Когда браузер запрашивает данные, сценарий возвращается с сервера и выполняется. Это самый опасный тип межсайтового скриптинга, и он более незаметен, чем рефлективный XSS и XSS на основе DOM, потому что он не требует ручного запуска пользователем. Сохраненные XSS-уязвимости могут существовать в любой веб-программе, которая позволяет пользователям хранить данные. Если страница подвергается сохраненной XSS-атаке, все пользователи, которые посещают страницу, будут атакованы XSS.

Шаги атаки:

1. Злоумышленник отправляет вредоносный код на сервер целевого веб-сайта.

2. Пользователь открывает целевой веб-сайт, и сервер веб-сайта извлекает данные с вредоносным кодом и возвращает их пользователю как обычные данные.

3. Браузер пользователя получает и анализирует ответ, а также исполняется подмешанный в него вредоносный код.

4. Вредоносный код крадет конфиденциальные данные пользователя и отправляет их злоумышленнику или выдает себя за пользователя и вызывает интерфейс целевого веб-сайта для выполнения операции, указанной злоумышленником.

image

Пример

Это страница для статей, которые можно комментировать

Комментарий к статье

image

Однако содержимое комментария не обрабатывается, поэтому если мы введем что-то вроде этого:

<script>alert("xss")</script>То же самое можно использовать в качестве комментария.

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

image

способ защиты

В браузере своя защита(X-XSS-Protection)

HTTPX-XSS-ProtectionЗаголовки ответа — это функция Internet Explorer, Chrome и Safari, которая не позволяет браузеру загружать страницу при обнаружении атаки с использованием межсайтовых сценариев (XSS).

Он может установить 4 значения:

X-XSS-Protection: 0     
禁止XSS过滤。     

X-XSS-Protection: 1       
启用XSS过滤(通常浏览器是默认的)。 如果检测到跨站脚本攻击,浏览器将清除页面(删除不安全的部分)。  

X-XSS-Protection: 1; mode=block  
启用XSS过滤。 如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载。  

X-XSS-Protection: 1; report=<reporting-uri>    
启用XSS过滤。 如果检测到跨站脚本攻击,浏览器将清除页面并使用CSP report-uri指令的功能发送违规报告。

Собственная защитная функция этого браузера имеет только определенную защиту от отраженного XSS.Принцип заключается в проверке корреляции между URL-адресом и элементами в DOM, но это не полностью предотвращает отраженный XSS, и не все браузеры поддерживают обаX-XSS-Protection.

побег

В атаках XSS злоумышленник в основном внедряет сценарии, создавая специальные символы, поэтому необходимо обнаружить ввод пользователя, и необходимо выполнить обнаружение ввода как на клиенте, так и на сервере, а затем преобразовать данные, введенные пользователем. праведный.

Главное — избегать специальных символов, содержащихся во входных данных, таких как<,>,&,",', чтобы предотвратить XSS-атаки.

Вот метод побега:

function escapeHTML(str) {
    if (!str) return '';
    str = str.replace(/&/g, "&");
    str = str..replace(/</g, "<");
    str = str..replace(/>/g, ">");
    str = str..replace(/"/g, """);
    str = str..replace(/'/g, " ");
    return str;
};

фильтр

Поскольку HTML должен быть сохранен в форматированном тексте, мы не можем использовать экранирование для защиты от XSS-атак.Здесь мы используем фильтрацию для защиты от XSS-атак, то есть используя только HTML-теги и их атрибуты, разрешенные белым списком, для защиты от атак. .

Вот рекомендуемыйXSSКомпонент , который фильтрует HTML в соответствии с белым списком для предотвращения XSS-атак.

Политика безопасности контента (CSP)

Политика безопасности контента (CSP), суть в системе белых списков, разработчик четко сообщает клиенту, какие внешние ресурсы можно загружать и выполнять, что значительно повышает безопасность веб-страницы.

Есть два способа включить CSP. Один — через поле Content-Security-Policy заголовка HTTP.

Content-Security-Policy: script-src 'self'; 
                         object-src 'none';
                         style-src cdn.example.org third-party.org; 
                         child-src https:

Второй через сайт<meta> Этикетка.

<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">

В приведенном выше коде CSP настроен следующим образом.

  • сценарий:Доверять только текущему доменному имени
  • <object>Теги: не доверять никаким URL-адресам, т. е. не загружать никакие ресурсы.
  • таблица стилей:Доверяйте только cdn.example.org и Third-Party.org
  • Подконтент страницы, такой как<frame>,<iframe>: Должен быть загружен с использованием протокола HTTPS.
  • Дополнительные ресурсы: безлимитный

Если этот параметр включен, внешние ресурсы, не соответствующие CSP, блокируются от загрузки.

Суммировать

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