Веб-взлом для начинающих: SQL-инъекции, XSS и другие уязвимости

Веб-взлом для начинающих: SQL-инъекции, XSS и другие уязвимости

Вы когда-нибудь задумывались, насколько безопасны сайты, которые вы посещаете? Или, может быть, вам приходило в голову, что кто-то может получить доступ к вашим личным данным, если сайт уязвим? Мир веб-взлома (web hacking basics) одновременно и пугающий, и завораживающий. В этой статье мы разберемся в самых распространенных веб-уязвимостях – от SQL-инъекций до XSS. Поговорим о том, как “условно” можно взломать сайт (исключительно с целью понимания механик), рассмотрим реальные примеры и инструменты для поиска брешей. И, конечно, затронем тему, как защитить веб-приложения от таких атак.

Введение: актуальность веб-уязвимостей и OWASP Top 10

Современные сайты – это сложные системы, которые обрабатывают огромное количество данных. Логины, пароли, платёжная информация, личные переписки, фотографии – всё хранится на серверах, а пользователи, как правило, не задумываются, насколько безопасно доверять свои данные конкретному ресурсу. К сожалению, люди, которые ищут, как взломать сайт уязвимости, не перевелись. Злоумышленники используют все мыслимые методы для получения несанкционированного доступа, и наиболее уязвимые точки могут быть реально взломаны при отсутствии базовой защиты.

Если вы хотите разобраться в том, что такое SQL-инъекция пример, как работает XSS атака (что это вообще?), или какие еще “дыры” бывают, то сначала стоит упомянуть о OWASP Top 10 – списке самых критических рисков безопасности веб-приложений, который регулярно обновляется. В него входят категории уязвимостей, наиболее часто встречающиеся в реальных проектах. OWASP (Open Web Application Security Project) – это своего рода “дорожная карта” как для тех, кто хочет научиться атаковать системы, так и для тех, кто стремится их защищать.

SQL-инъекции: понятие и простой пример

Когда мы говорим о типичных веб-уязвимостях, в голову сразу приходит SQL-инъекция (SQL Injection). Это классическая штука, без которой невозможно представить ни один список серьезных угроз. Если вы разрабатывали когда-либо динамические сайты и не уделяли особого внимания безопасности, то наверняка могли оставить незащищенный вход для SQL-инъекций.

Суть проста: в полях ввода (например, форма логина и пароля, поле поиска, комментариев и так далее) пользователь вводит данные, а сервер не корректно валидирует эти данные и “склеивает” в итоговый SQL-запрос. Если не применять меры безопасности, атакующий может “внедрить” в запрос собственный код. Допустим, мы имеем неосторожный запрос к базе данных:

 SELECT * FROM users WHERE username = 'ВВЕДЕННОЕ_ИМЯ' AND password = 'ВВЕДЕННЫЙ_ПАРОЛЬ'; 

Теперь представим, что злой гений вводит в поле имени пользователя строку вида ' OR '1'='1, а в пароле – что-то несущественное. Тогда итоговый запрос будет выглядеть примерно так:

 SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '12345'; 

Из-за части OR '1'='1' результатом будет бесконечно истинное утверждение, и система вполне может выдать данные обо всех пользователях или просто авторизовать атакующего. В худшем случае (если ещё имеются права на модификацию базы), подобная уязвимость может привести к удалению таблиц – классический пример DROP TABLE:

 '; DROP TABLE users; -- 

В результате могут быть уничтожены все данные сайта. Именно это часто упоминается как пример SQL-инъекции при базовом обучении взлому, и именно подобная демонстрация распространялась во множестве статей, в том числе на ресурсе securitylab.ru.

XSS-атаки: механизм и демонстрация простого сценария

Если SQL-инъекция “бьёт” непосредственно в базу данных, то XSS (Cross-Site Scripting) – это про то, как обмануть браузер жертвы или вообще всю систему обработки клиентских данных. Наверняка вы видели живой пример, когда кто-то вставлял код JavaScript в поле комментариев, и при загрузке страницы у остальных пользователей всплывало окошко с чем угодно. Именно так выглядит базовая XSS атака. Что это даёт? Во-первых, можно украсть cookie пользователя, а это нередко позволяет получить доступ к его сессии. Во-вторых, можно подменить содержимое страницы, встраивая фишинговые формы.

“Механика” элементарна: там, где пользователь может вводить произвольный контент, сервер (или клиентская часть) не отфильтровывает потенциально опасные символы. Классический, самый простой тестовый пример – это вставка скрипта вроде:

 <script>alert('XSS!');</script> 

Если сайт выводит этот контент обратно без экранирования, то скрипт реально выполнится в браузере. И, хотя всплывающее окно с alert – это невинная демонстрация, в боевых условиях можно вставить более сложный код, который будет, например, отправлять cookies на удалённый сервер. Получается, атакующий может использовать ваш браузер в своих целях.

Существует несколько типов XSS: Reflected (отражённые), Stored (хранимые) и DOM-based. Reflected XSS – когда вредоносный скрипт “отражается” от сервера на страницу из параметров запроса. Stored XSS – когда вредоносный код сохраняется на стороне сервера (например, в комментариях к статье), и при загрузке страницы все посетители, ничего не подозревая, выполняют чужой код. DOM-based XSS – это особый случай, когда сам JavaScript-код на странице небезопасно обрабатывает данные из URL или других источников, в результате чего возникает уязвимость.

Другие распространенные баги (CSRF, LFI/RFI, upload уязвимости)

CSRF (Cross-Site Request Forgery)

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

LFI/RFI (Local File Inclusion / Remote File Inclusion)

Эти уязвимости связаны с механизмом включения файлов на уровне сервера. Если скрипт (скажем, на PHP) динамически подключает файлы на основе пользовательского ввода и не фильтрует путь, атакующий может подставить путь к системным файлам (LFI), выудив конфиденциальную информацию. В случае RFI можно вообще подгрузить удалённый файл с вредоносным кодом и выполнить его на сервере. Такая брешь чаще встречалась в старых версиях движков и плагинов, но иногда выплывает и в современных системах, если разработчик пренебрегает безопасной обработкой путей.

Upload уязвимости

Многие сайты дают возможность загружать фотографии, документы и т.д. Если не ограничить типы файлов или не проверять их содержимое, есть риск, что вместо безобидного JPEGа будет загружен исполняемый скрипт (PHP, Python, Perl) или другой вредоносный файл. В итоге атакующий может получить практически полный доступ к серверу, запустив загруженный файл напрямую.

Инструменты для поиска веб-дыр: Burp Suite, sqlmap и другие

Разобравшись с базовыми уязвимостями, становится интересно, какие инструменты используют специалисты для поиска и эксплуатации брешей. Или любопытствующие, которым хочется понять, web hacking basics на практике. Вариантов масса, но есть несколько “маст-хэв” инструментов:

  • Burp Suite. Один из самых популярных инструментов для тестирования безопасности веб-приложений. Позволяет перехватывать и модифицировать запросы “на лету”, подбирать параметры, автоматически сканировать сайт на уязвимости. Free-версия имеет ограничения по скорости сканирования, но для обучения – в самый раз.
  • sqlmap. Специализированный инструмент для SQL-инъекций. Сканирует сайт и пытается внедрить различные варианты инъекций. Может автоматизировать процесс обнаружения уязвимостей, извлечения баз данных, таблиц и т.д. Опробовать sqlmap можно даже на собственных локальных проектах, чтобы проверить их безопасность.
  • Nmap. Не только для веб-сайтов, но в целом для сети. Позволяет сканировать порты, определять операционные системы, версии сервисов и так далее. Может быть полезен и в веб-исследованиях.
  • OWASP ZAP (Zed Attack Proxy). Официальный инструмент OWASP для комплексного тестирования безопасности, во многом схож с Burp Suite. Отлично подходит для обнаружения XSS, SQL-инъекций, CSRF и других распространенных брешей.

Использовать все эти инструменты следует с умом и обязательно в рамках законных процедур (например, тестирование собственного сайта или сайтов, где у вас есть разрешение на пентест ). В противном случае вы рискуете перейти в категорию “преступников”, что чревато весьма неприятными последствиями.

Как защититься разработчикам: валидация вводимых данных, CSP и другие меры

Как видите, уязвимостей пруд пруди. Возникает логичный вопрос: “Ну окей, а как защититься?”. Удивительно, но большинство проблем легко решить, если закладывать правильные практики с самого начала. Профессиональные разработчики следуют принципам “безопасной разработки”, но и начинающим специалистам стоит знать эти основы.

  • Валидация и экранирование данных. В первую очередь следует проверять все входные данные. Для SQL – использовать параметризованные (подготовленные) запросы и ORM, которые уменьшают вероятность инъекций. Для вывода в HTML – экранировать специальные символы (<, >, ", ', &). Любая пользовательская строка должна быть небезопасной по умолчанию, а значит, ее нужно очищать или кодировать.
  • Защита от XSS. Кроме экранирования пользовательского ввода, хороший способ – настроить Content Security Policy (CSP). Это HTTP-заголовок, который указывает браузеру, какие источники скриптов, стилей, изображений и т.п. можно загружать. CSP может существенно снизить риск успешной XSS-атаки.
  • CSRF-токены. Для форм и запросов, которые изменяют состояние (например, отправка сообщения, удаление записи и т.д.), используйте специальные уникальные токены. Они должны храниться в сессии и передаваться вместе с формой. Браузер не сможет автоматически подставить правильный токен для чужого сайта, поэтому атаки вида “нажмите на ссылку и ваш аккаунт все удалит” будут блокироваться.
  • Ограничение прав и принцип наименьших привилегий. На сервере, да и в базе данных, не нужно раздавать полные права всем подряд. Например, пользователю базы, который просто читает данные, не обязательно иметь возможность удалять таблицы. Если злоумышленник получит доступ к такому аккаунту, он повредит меньше.
  • Обновление и мониторинг. Следите за обновлениями фреймворков, модулей и библиотек. Почти все системы периодически имеют уязвимости, которые устраняются патчами. Регулярный мониторинг логов и использование IDS/IPS-систем помогут вовремя обнаружить подозрительную активность.

Кроме того, рекомендуется периодически проводить аудит безопасности, прибегать к помощи внешних пентестеров, а для собственного контроля – настроить хотя бы базовую систему оповещения о критических событиях.

Заключение: этичный взлом против криминала

Итак, мы разобрали, что такое SQL-инъекция (пример вы уже видели), как работает XSS атака (что это дает и почему так опасно), упомянули другие уязвимости и инструменты, которые помогают “вычислять” слабые места. Но важно понимать, что само по себе знание, как взломать сайт уязвимости, не делает вас супергероем. Без правильной этической базы, разрешения владельца ресурса и понимания закона, подобные навыки могут привести к уголовной ответственности.

В итоге вся эта информация может (и должна) использоваться в “белых” целях. Есть понятие “ White Hat ” – когда вы проверяете сайты на уязвимости по согласованию с владельцами, помогаете закрывать дыры и получаете вознаграждение (Bug Bounty программы). Есть “Grey Hat”, когда “взломают, посмотрят что внутри, подправят что-то и уходят”, не нанося прямого вреда. И есть “ Black Hat ” – злой умысел, кража данных и прочие неприятные дела.

Чем больше в мире будет “White Hat” хакеров и грамотных разработчиков, тем безопаснее станут веб-приложения. Поэтому, если вы новичок в теме, учитесь атаковать только на тестовых средах и используйте знания во благо. Пробуйте Burp Suite, sqlmap на локальном сервере, изучайте OWASP Top 10, участвуйте в CTF-соревнованиях – это легальный, увлекательный и полезный путь для прокачки навыков.

Будьте любопытны, но оставайтесь в рамках закона и не забывайте, что каждая бомба, заложенная ради “шутки”, может стоить кому-то времени, денег или репутации. А создавать сильные сайты без брешей – это искусство, которое приносит пользу всем.

SQL-инъекция Burp Suite OWASP Top 10 sqlmap web hacking basics XSS атака веб-безопасность защита как взломать сайт уязвимости
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.

Реальные атаки. Эффективные решения. Практический опыт.

Standoff Defend* — это онлайн-полигон, где ты сможешь испытать себя. Попробуй себя в расследовании инцидентов и поборись за победу в конкурсе

*Защищать. Реклама. АО «Позитив Текнолоджиз», ИНН 7718668887

Юрий Кочетов

Здесь я делюсь своими не самыми полезными, но крайне забавными мыслями о том, как устроен этот мир. Если вы устали от скучных советов и правильных решений, то вам точно сюда.