#9 Gray Hat C#. Руководство для хакера по созданию и автоматизации инструментов безопасности. Cross-Site Scripting (Межсайтовый скриптинг) — XSS.
Здравствуйте, дорогие друзья.
Подобно SQL-инъекции, атаки с использованием межсайтовых сценариев (XSS) используют уязвимости в коде, которые возникают, когда программисты создают HTML для отображения в веб-браузере, используя данные, передаваемые из веб-браузера на сервер. Иногда данные, передаваемые на сервер ненадежным клиентом, например веб-браузером, могут содержать HTML-код, например JavaScript, что позволяет злоумышленнику потенциально захватить веб-сайт, путем кражи файлов cookie или перенаправления пользователей на вредоносный веб-сайт.
Например, блог, который позволяет оставлять комментарии, может отправить HTTP-запрос с данными в форме комментариев на сервер сайта. Если злоумышленник создаст вредоносный комментарий со встроенным HTML или JavaScript, а программное обеспечение блога доверяет и, следовательно, не очищает данные из веб-браузера, отправляющего «комментарий», злоумышленник может использовать свой загруженный атакующий комментарий, чтобы испортить веб-сайт с помощью собственного HTML-кода или перенаправить любого посетителя блога на собственный зловредный сайт. Злоумышленник потенциально может установить вредоносное ПО на компьютеры посетителей.
Вообще говоря, быстрый способ обнаружить код на веб-сайте, который может быть уязвим для XSS-атак, — это сделать запрос к сайту с испорченным параметром. Если испорченные данные появляются в ответе без изменений, возможно, Вы нашли вектор для XSS. Например, предположим, что Вы передаете в качестве параметра HTTP-запроса, как показано в листинге 2-5.
GET /index.php?name=Brandon HTTP/1.1
Host: 10.37.129.5
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Gecko/20100101 Firefox/37.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Сервер отвечает чем-то вроде ответа HTTP в листинге 2-6.
HTTP/1.1 200 OK
Date: Sun, 19 Apr 2023 21:28:02 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.7
Content-Length: 32
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
Welcome Brandon<xss>
По сути, если код заменяется версией, содержащей некоторые объекты HTML, Вы знаете, что сайт фильтрует входные данные с помощью функции PHP, такой как htmlspecialchars() или аналогичного метода. Однако, если сайт просто возвращает в ответе, Вы знаете, что он не выполняет никакой фильтрации или очистки, как в случае с параметром имени HTTP в коде, показанном в листинге 2-7.
Как и в случае с кодом, уязвимым для SQL-инъекций в листинге 2-1, программист не очищает и не заменяет потенциально неверные символы в параметре, перед отображением HTML на экране [1]. Передавая веб-приложению специально созданный параметр имени, мы можем отображать HTML на экране, выполнять JavaScript, и даже запускать Java-апплеты, которые пытаются захватить управление компьютером. Например, мы могли бы отправить специально созданный URL-адрес, такой как в листинге 2-8.
www.example.com/vuln.php?name=Brandon
URL-адрес в листинге 2-8 может привести к появлению в браузере всплывающего окна JavaScript с номером 1, если сценарий PHP использовал параметр name для создания некоторого HTML-кода, который в конечном итоге будет отображаться в веб-браузере.
На этом все. Всем хорошего дня!