Введение
В этом курсе подробно описываются сведения, необходимые для тестирования web-приложений на проникновение. Мы постарались собрать воедино основы веб-тестирования, и подготовили ряд статей по наиболее распространенным уязвимостям.
Глобальная сеть
Веб-приложения считаются наиболее распространенным типом сервисов от большинства компаний. Кроме того, даже старые программы постепенно переносятся в Интернет – у многих есть успешно функционирующие веб-двойники, позволяющие осуществлять привычные действия посредством Интернет. Именно такая популярность Глобальной сети обуславливает важность осуществления мероприятий по обеспечению сетевой безопасности.
Модель интернет-безопасности
Основа модели интернет-безопасности достаточно проста: нельзя доверять клиенту. Большую часть информации, которая загружается на сервер, недобросовестный клиент может подменить. Поэтому лучше перестраховаться, чем потом сожалеть; лучше фильтровать и избежать всех подводных камней, чем впоследствии понять, что далеко не все операции с файлами действительно недоступны для пользователя.
Риски веб-безопасности
Веб-приложения подвержены всем рискам, присущим обычным программам:
- утечка информации;
- репутационный ущерб;
- потеря информации;
- потеря денег.
Web-технологии
Архитектура
Большинство веб-приложений базируются на 3-х компонентах:
- Клиент: в большинстве случаев через веб-браузер.
- Веб-сервер, который будет получать запросы от клиента. Сервер приложений может также использоваться для обработки запросов, и в этом случае веб-сервер будет просто пересылать запросы на сервер приложений;
- Бэкэнд для хранения и последующего извлечения резервной информации – чаще всего в виде базы данных.
Все эти компоненты могут иметь различные модели поведения, которые будут влиять на наличие уязвимостей и возможность их использования в противоправных целях. Все они также могут послужить источником ответа на вопросы, касающиеся устранения уязвимостей и общей безопасности.
Front-end технологии
Большинство клиентских технологий используются ежедневно всеми пользователями Интернет: HTML, JavaScript, Flash … через свои браузеры (Chrome, Firefox, Internet Explorer, Safari …). Тем не менее, клиенты веб-приложений также могут оказаться «толстыми клиентами» для подключения к веб-службе, или просто скриптом.
Back-end технологии
Множество технологий на стороне сервера могут использоваться в качестве источника уязвимостей, однако некоторые более подвержены такого рода рискам.
Серверную сторону можно условно разделить на несколько подкатегорий:
- веб-серверы — Apache, lighttpd, Nginx, IIS…
- серверы приложений — Tomcat, JBoss, Oracle application server…
- используемые языки программирования — PHP, Java, Ruby, Python, ASP, C #… Язык программирования также может использоваться, как часть фрэймворков Ruby-on-Rails, .Net MVC, Django и т.д.
Back-end база данных
Резервная копия информации может храниться как на том же веб-сервере, так и на другом. Это может объяснить странное поведение во время использования некоторых уязвимостей для проникновения.
Несколько примеров бэкэндов:
- простые файлы.
- реляционные базы данных — MySQL, Oracle, SQL Server, PostgreSQL.
- другие базы данных — MongoDB, CouchDB.
- каталоги – OpenLDAP, Active Directory и т.д.
Приложение может использовать более одной системы хранения. Например, некоторые приложения используют LDAP для хранения пользовательских данных, а также Oracle для хранения информации.
Протокол HTTP
HTTP – это основа Интернета, поэтому очень важно иметь глубокое понимание данного протокола для тестирования веб-безопасности. Знание и понимание особенностей HTTP позволит найти уязвимости и использовать их.
Диалог клиент-сервер
HTTP представляет собой диалог между одним клиентом и одним сервером. Клиент (в нашем случае в качестве клиента выступает браузер) посылает запрос на сервер, а затем сервер отвечает на этот запрос. HTTP имеет преимущества текстового протокола, и поэтому его очень легко воспринимать, понимать и изучать. По умолчанию большинство веб-серверов доступно по порту TCP / 80. Когда ваш браузер подключается к сайту https://codeby.net/blogs/, он на самом деле соединяется по протоколу TCP с портом 80 на IP, соответствующим имени codeby.net
Наиболее распространены запросы браузера к серверу контента. Браузер посылает запрос, состоящий из следующих элементов:
- метод HTTP, который позволит серверу понять, какого рода операцию браузер хочет выполнить;
- ресурс, соответствующий тому, к которому клиент пытается получить доступ на сервере;
- версия, которая позволит серверу понять, какая версия HTTP используется браузером;
- опционально могут отправляться заголовки, дающие более подробную информацию на сервер — имя и версию браузера, предпочтительный для пользователя язык (например, английский, немецкий, французский и т.д.);
- в зависимости от используемого метода HTTP, собственно тело запроса.
В качестве примера, приведем листинг http-запроса к сайту https://codeby.net:
GET /index.php HTTP/1.1 Host: codeby User-Agent: Mozilla Firefox
Запросы
Методы
Существует множество методов HTTP:
- метод GET: запрос контента – наиболее распространенный запрос, отправляемый браузерами;
- метод POST используется для отправки большего количества данных; он используется в большинстве форм, а также для загрузки файлов.
- метод HEAD очень схож с запросом GET; единственное различие состоит в ответе, который предоставляется сервером – в нем будет содержаться только заголовки, без тела запроса. Метод HEAD массово используется поисковыми роботами для проверки обновления страницы без загрузки полного ее содержимого.
Существует также множество других методов HTTP: PUT, DELETE, PATCH, TRACE. OPTIONS, CONNECT … О них можно прочитать в Википедии.
Параметры
Другой важной частью запроса являются параметры. Когда клиент получает доступ к странице http://codeby/article.php?id=1&name=2, на веб-сервер отправляется следующий запрос:
GET /article.php?id=1&name=2 HTTP/1.1 Host: codeby User-Agent: Mozilla Firefox
Запросы POST похожи на GET, но в них параметры передаются в теле запроса. Например, следующая форма:
[...]
будет по факту выглядеть в браузере следующим образом:
После того как форма будет заполнена следующими значениями:
- имя пользователя — ‘admin’,
- пароль — ‘Password123’.
И будет нажата кнопка «Отправить» (Submit), на сервер отправляется такой запрос:
POST /login.php HTTP/1.1 Host: codeby User-Agent: Mozilla Firefox Content-Length: 35 username=admin&password=Password123
Обратите внимание: если в тэге
только я подумал, что давно статьи не выходили, а тут вот она :)))) Спасибо, что не бросаете проект !
«Некоторые ответы намного менее распространенные, например ответ 418: I’m a teapot (Я чайник).»
RFC не подтверждает такой пасхалки https://tools.ietf.org/html/rfc2616