[Web Application Pentesting] Знакомство с протоколом HTTP
Life-HackВсем привет колеги. Как и обещал начинаю цикл статей посвященных пентесту веб приложений по мотивам курса Вивека Рамачандрана Web Application Pentesting от PentesterAcademy
Это не означает что я совсем дословно буду переводить его курс,а означает что я буду ссылаться на него как основу материала,но и забегать далеко за программу курса также не буду. Ну что же, поехали)
В этой статье для демонстрации работы протокола http нам понадобится:
Все эти инструменты есть по умолчанию в Kali Linux.
Начнем мы с самых самых основ.
И так что же такое протокол HTTP?
Как он структурирован ?
И как работает?
Давайте поглядим на следующий слайд:
Ну в первую очередь что нам нужно понимать,это то что HTTP - это протокол для передачи данных в виде гипертекста который работает по принципу запроса-ответа от веб сервера . То есть простыми словами - (смотрим картинку на слайде) мы ,используя программу которая понимает и преобразовывает гипертекст (браузер в нашем случае) передаем (запрос) информацию в виде html-тегов (исходный html код страницы) на веб сервер, где эта информация обрабатывается (там в случаи необходимости ходит к Базе Данных за какими то данными ) и возвращается в виде ответа программе браузеру который ее снова преобразовывает в приемлемый для юзера вид (картинки,медиа,и т.д)
А идентификация ресурсов происходит с помощью URL/URI
Надеюсь тут более менее понятно,если будут трудности -читаем википедию(там все реально очень доступно расписанно ) Ну а если совсем совсем трудно будет,задавайте вопросы в комментариях - попытаюсь ответить )
Давайте попробуем посмотреть на примере как работает протокол HTTP.
Хочу заметить что передавать http запросы на сервер умеет не только веб браузеры,а так же и много других программ ,в том числе и консольные утилиты такие как curl,netcat
Именно их я буду использовать для демонстрации работы протокола http.
Давайте посмотрим как выглядит http запрос на веб сервер.
Для этого запустим wireshark на интерфейсе который используем для выхода в интернет(в моем случае это eth1 "У вас же может быть eth0 или wlan0".
После запуска анализатора трафика WireShark ,давайте передадим запрос на сайт www.securitytube.net :
curl -v www.securitytube.net
параметром -v я указал что мне нужен более подробный вывод
Как видим - curl нам сразу же говорит что когда мы обратились по URL(www.securitytube.net ) мы подключились на веб сервер с айпи адресом 173.194.73.121 на 80 порт.
И мы передали на сервер наш HTTP запрос в виде 4 строчек:
> GET / HTTP/1.1 > Host: www.securitytube.net > User-Agent: curl/7.50.1 > Accept: */*
На что сервер нам ответил следующими заголовками :
< HTTP/1.1 200 OK < Content-Type: text/html; charset=utf-8 < Cache-Control: no-cache < X-Cloud-Trace-Context: 81b2e66a998ecbfd10d4fad489def794 < Date: Sun, 18 Dec 2016 19:52:45 GMT < Server: Google Frontend < Content-Length: 31913 <
От себя добавлю , что изучение HTTP заголовков очень немаловажный этап - так как тут также встречаются всякого рода инъекции и другие уязвимости.
В заголовках ответа видим что первым идет статус код ответа 200 ОК (Означает успешное подключение)
Ну а после заголовков видим наш HTML код (гипертекст) который после обработки браузером превращается в приемлемый контент)
Теперь давайте вернемся в WireShark и посмотрим что же произошло.
Первым мы видим трафике обращение (запрос) по протоколу DNS
И ответ сервера(Обращаясь по DNS имени сервер нам ответил и предоставил IP адрес который принадлежит этому днс имени)
Далее идет три пакета TCP трафика,устанавливается TCP соединение с веб сервером
И только потом на прикладном уровне по модели OSI посылается GET запрос (О GET|POST|HEAD запросах мы поговорим в следующей статье,так что не переживайте )по протоколу HTTP
Кликнув по нашему пакету с GET запросом в WireShark
В среднем окне мы можем видеть полностью сегментацию нашего пакета,от канального до прикладного уровня:
Раскрыл Hyper Transport Protocol (HTTP ) мы можем полностью увидеть наш запрос который мы видели при обращении на сервер с помощью утилиты curl :
Что касается заголовком которые мы передаем на сервер,думаю что здесь все понятно:
HOST - это днс имя сайта к которому обращаемся
UserAgent - ПО и версия через которую передавался запрос на сервер(Если бы был браузер было что то типа "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" )
Accept:
Что ж вернемся в WireShark и посмотрим там ответ сервера:
Видим тот же ответ что и получили через curl
Заголовок Server: Google Frontend потому что Вивек используюет гугл апи на своем сайте ))
Ну и ниже видим html контент ответа сервера)
Ну вообщем это пока все для этой статьи ребята) В следующей статьи мы поговорим с вами о GET,POST и HEAD запросах ,а также научимся вручную передавать на сервер запросы с использованием NetCat)
До новых встреч)
Если понравилась статья - жмакни лайк) Источник