Введение в практическую безопасность (2019)/HTTP, инструменты & SQL injection: различия между версиями

Материал из SecSem Wiki
Перейти к навигации Перейти к поиску
(Новая страница: «# Клиенты (например, веб-браузеры) взаимодействуют с веб-приложениями по протоколу '''HTTP'''…»)
 
Строка 1: Строка 1:
# Клиенты (например, веб-браузеры) взаимодействуют с веб-приложениями по протоколу '''HTTP''' ([https://ru.wikipedia.org/wiki/HTTP википедия], стандарт HTTP 1.1: [https://tools.ietf.org/html/rfc2616 RFC 2616], [https://tools.ietf.org/html/rfc7230 RFC 7230], [https://tools.ietf.org/html/rfc7231 RFC 7231]). Протокол состоит из запросов (которые клиент отправляет серверу) и ответов (которые сервер присылает в ответ). Протокол HTTP версии 1.1 (наиболее используемой в данный момент) и более ранних - текстовый, то есть сообщения этого протокола человекочитаемые. К примеру, вот запрос, который сделает браузер при переходе по URL http://sql1.stands.course.secsem.ru/users:<br>[[Файл:Http-req-annot.png]] <br>Ответ сервера на него:<br>[[Файл:Http-res-annot.png]]
+
# Клиенты (например, веб-браузеры) взаимодействуют с веб-приложениями по протоколу '''HTTP''' ([https://ru.wikipedia.org/wiki/HTTP википедия], стандарт HTTP 1.1: [https://tools.ietf.org/html/rfc2616 RFC 2616], [https://tools.ietf.org/html/rfc7230 RFC 7230], [https://tools.ietf.org/html/rfc7231 RFC 7231]). Протокол состоит из запросов (которые клиент отправляет серверу) и ответов (которые сервер присылает в ответ). Протокол HTTP версии 1.1 (наиболее используемой в данный момент) и более ранних - текстовый, то есть сообщения этого протокола человекочитаемые. К примеру, вот запрос, который сделает браузер при переходе по URL http://sql1.stands.course.secsem.ru/users:<br>[[Файл:Http-req-annot.png]] <br>Ответ сервера на него:<br>[[Файл:Http-res-annot.png]]<br>Ещё пример, запрос, который сделает браузер при попытке (неудачной) залогиниться на сайте vk.com c почтой "admin@adminmail.ru" и паролем "adminpassword":<br>[[Файл:Http-req-post-annot.png]]<br>Ответ сервера на этот запрос<br>[[Файл:Http-res-post-annot.png]]
 
# Для анализа этого HTTP-взаимодействия, а также для вмешательства в него удобен '''Burp Suite'''. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам ("вручную"). [http://demo.secsem.ru/workshop/burp Здесь написано как его скачать и начать использовать].
 
# Для анализа этого HTTP-взаимодействия, а также для вмешательства в него удобен '''Burp Suite'''. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам ("вручную"). [http://demo.secsem.ru/workshop/burp Здесь написано как его скачать и начать использовать].
 
# Более простой инструмент, позволяющий отправлять HTTP-запросы веб-приложению и получать ответы - netcat. Netcat позволяет установить tcp-соединение, после чего отправляет на другой конец всё что подано ему на стандартный ввод и печатает на стандартный вывод всё, что получил.  
 
# Более простой инструмент, позволяющий отправлять HTTP-запросы веб-приложению и получать ответы - netcat. Netcat позволяет установить tcp-соединение, после чего отправляет на другой конец всё что подано ему на стандартный ввод и печатает на стандартный вывод всё, что получил.  
 
# Веб-приложения нередко используют SQL-базы данных, т. е. базы данных, взаимодействие с которыми осуществляется через запросы на языке SQL. При этом веб-приложение формирует и отправляет базе SQL-запросы, которые могут зависеть от параметров, пришедших от клиента (взятых из HTTP-запроса). SQL-запросы текстовые и простой способ сделать запрос, зависящий от параметра - просто подставить этот параметр в текст запроса. После такой подстановки может оказаться, что смысл SQL-запроса изменился и данные, подставленые в запрос стали не просто значением параметра запроса (скажем, числовым или стокововым литералом), а какими-то еще конструкциями языка SQL. Возможность передать такое значение параметра HTTP-запроса, которое подставится в текст SQL-запроса и при подстановке изменит смысл этого запроса называется SQL injection. Фактически, это один из представителей класса уязвимостей '''injection''', которые получаются, если в какие-то управляющие команды подставляются параметры-данные от пользователя и эти данные могут выйти из контекста, куда подставляются, перестав быть просто данными и поменять смысл команды.
 
# Веб-приложения нередко используют SQL-базы данных, т. е. базы данных, взаимодействие с которыми осуществляется через запросы на языке SQL. При этом веб-приложение формирует и отправляет базе SQL-запросы, которые могут зависеть от параметров, пришедших от клиента (взятых из HTTP-запроса). SQL-запросы текстовые и простой способ сделать запрос, зависящий от параметра - просто подставить этот параметр в текст запроса. После такой подстановки может оказаться, что смысл SQL-запроса изменился и данные, подставленые в запрос стали не просто значением параметра запроса (скажем, числовым или стокововым литералом), а какими-то еще конструкциями языка SQL. Возможность передать такое значение параметра HTTP-запроса, которое подставится в текст SQL-запроса и при подстановке изменит смысл этого запроса называется SQL injection. Фактически, это один из представителей класса уязвимостей '''injection''', которые получаются, если в какие-то управляющие команды подставляются параметры-данные от пользователя и эти данные могут выйти из контекста, куда подставляются, перестав быть просто данными и поменять смысл команды.

Версия 21:03, 24 февраля 2019

  1. Клиенты (например, веб-браузеры) взаимодействуют с веб-приложениями по протоколу HTTP (википедия, стандарт HTTP 1.1: RFC 2616, RFC 7230, RFC 7231). Протокол состоит из запросов (которые клиент отправляет серверу) и ответов (которые сервер присылает в ответ). Протокол HTTP версии 1.1 (наиболее используемой в данный момент) и более ранних - текстовый, то есть сообщения этого протокола человекочитаемые. К примеру, вот запрос, который сделает браузер при переходе по URL http://sql1.stands.course.secsem.ru/users:
    Http-req-annot.png
    Ответ сервера на него:
    Http-res-annot.png
    Ещё пример, запрос, который сделает браузер при попытке (неудачной) залогиниться на сайте vk.com c почтой "admin@adminmail.ru" и паролем "adminpassword":
    Http-req-post-annot.png
    Ответ сервера на этот запрос
    Http-res-post-annot.png
  2. Для анализа этого HTTP-взаимодействия, а также для вмешательства в него удобен Burp Suite. Он может работать как HTTP-proxy, то есть получать от клиента запрос и пересылать его серверу, получать ответ сервера и передавать его клиенту. При этом Burp может показывать запросы и ответы пользователю, задерживать и изменять их. Кроме этого, он может формировать и отправлять новые HTTP-запросы сам ("вручную"). Здесь написано как его скачать и начать использовать.
  3. Более простой инструмент, позволяющий отправлять HTTP-запросы веб-приложению и получать ответы - netcat. Netcat позволяет установить tcp-соединение, после чего отправляет на другой конец всё что подано ему на стандартный ввод и печатает на стандартный вывод всё, что получил.
  4. Веб-приложения нередко используют SQL-базы данных, т. е. базы данных, взаимодействие с которыми осуществляется через запросы на языке SQL. При этом веб-приложение формирует и отправляет базе SQL-запросы, которые могут зависеть от параметров, пришедших от клиента (взятых из HTTP-запроса). SQL-запросы текстовые и простой способ сделать запрос, зависящий от параметра - просто подставить этот параметр в текст запроса. После такой подстановки может оказаться, что смысл SQL-запроса изменился и данные, подставленые в запрос стали не просто значением параметра запроса (скажем, числовым или стокововым литералом), а какими-то еще конструкциями языка SQL. Возможность передать такое значение параметра HTTP-запроса, которое подставится в текст SQL-запроса и при подстановке изменит смысл этого запроса называется SQL injection. Фактически, это один из представителей класса уязвимостей injection, которые получаются, если в какие-то управляющие команды подставляются параметры-данные от пользователя и эти данные могут выйти из контекста, куда подставляются, перестав быть просто данными и поменять смысл команды.