[Web Application Pentesting] Знакомство с протоколом HTTP

[Web Application Pentesting] Знакомство с протоколом HTTP

Life-Hack

Всем привет колеги. Как и обещал начинаю цикл статей посвященных пентесту веб приложений по мотивам курса Вивека Рамачандрана Web Application Pentesting от PentesterAcademy

Это не означает что я совсем дословно буду переводить его курс,а означает что я буду ссылаться на него как основу материала,но и забегать далеко за программу курса также не буду. Ну что же, поехали)

В этой статье для демонстрации работы протокола http нам понадобится:

curl

netcat

wireshark

Все эти инструменты есть по умолчанию в 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)

До новых встреч)

Если понравилась статья - жмакни лайк) Источник