Если вы начинаете с нуля, как начинал я, и эта книга - один
из первых совершенных вами шагов в мир хакинга, для вас
важно буде понимать, как работает интернет. Прежде, чем вы
перевернете эту страницу, я хочу сказать, что имею ввиду то,
как URL, который вы набираете в адресной строке, связывается
с доменом, который направляется на IP-адрес, и так далее.
Одним предложением: Интернет - это множество систем, ко-
торые связаны вместе и отправляют друг другу сообщения.
Некоторые принимают только определенные типы сообще-
ний, другие принимают сообщения только от ограниченного
списка других систем, но каждая система в интернете имеет
адрес, чтобы люди могли отправлять ей сообщения. Каждая
система решает, что ей делать с сообщением и как она будет
отвечать.
Чтобы определить структуру этих сообщений, люди задоку-
ментировали то, как некоторые из этих систем должны об-
щаться в Requests for Comments (RFC). Например, взгляните
на HTTP. HTTP определяет протокол того, как ваш интернет-
браузер общается с веб-сервером. Поскольку ваш интернет-
браузер и веб-сервер действуют в соответствии с одним и тем
же протоколом, они могут общаться.
Когда вы вводите http://www.google.com в адресной строке сво-
его браузера и нажимаете enter, следующие шаги описывают
то, что происходит на высшем уровне:
• Ваш браузер извлекает имя домена из URL, www.google.com.
• Ваш компьютер отправляет DNS запрос к DNS-серверам,
описанным в конфигурации вашего компьютера. DNS может помочь определить IP-адрес для доменного име-
ни, в этом случае он равен 216.58.201.228. Подсказка: вы
можете использовать dig a www.google.com из своего
терминала, чтобы узнать IP-адрес для домена.
• Ваш компьютер пытается установить TCP-соединение с
IP-адресом на порту 80, который используется для пере-
дачи и получения HTTP-трафика. Подсказка: вы можете
установить TCP-соединение, выполнив nc 216.58.201.228
80 из своего терминала
• Если соединение успешно установлено, ваш браузер от-
правит HTTP-запрос, подобный этому:
1 GET / HTTP/1.1
2 Host: www.google.com
3 Connection: keep-alive
4 Accept: application/html, */*
• Теперь он будет ждать ответа от сервера, который будет
выглядеть примерно так:
1 HTTP/1.1 200 OK
2 Content-Type: text/html
3
4 <html>
5 <head>
6 <title>Google.com</title>
7 </head>
8 <body>
9 ...
10 </body>
11 </html>
• Ваш браузер прочтет и отрисует возвращенный HTML,
CSS и Javascipt. В этом случае, на экране появится глав-
ная страница Google.com.
Теперь, когда мы закончили с браузером, интернетом и HTML,
как упомянуто ранее, существует сообщение о том, как эти
сообщения будут отправляться, включая конкретные исполь-
зуемые методы, и требования к заголовку-запросу для всех
HTTP/1.1 запросов, как обозначено в пункте 4. Описанные
методы включают GET, HEAD, POST, PUT, DELETE, TRACE,
CONNECT и OPTIONS.
Метод GET означает запрос произвольной информации, обо-
значенной URI. Термин URI может быть непонятным, особен-
но в сочетании с указанным ранее URL, но для целей этой
книги просто знайте, что URL - это как адрес человека, и
является типом URI, который подобен имени человека (спа-
сибо, Wikipedia). Хотя HTTP-полиции не существует, обычно
GET-запросы не должны быть ассоциированы с какими-либо
функциями, изменяющими данные, они просто получают и
предоставляют информацию.
Метод HEAD идентичен GET, с единственным отличием: сер-
вер не должен возвращать тело сообщения в ответе. Обычно вы
встретите случаев, когда он применяется, но он нередко слу-
жит для тестирования гипертекстовых ссылок на валидность,
доступность и недавние изменения.
Метод POST используется для вызова некоторой функции,
которая будет выполнена на сервере способом, определенным
этим сервером. Другими словами, обычно на бэкенде будет
выполнено некоторое действие, такое, как создание коммен-
тария, регистрация пользователя, удаление аккаунта, и так да-
лее. Действие, выполняемое сервером в ответ на POST, может
варьироваться и не обязательно вызывается в результате за-
проса. Например, если в процессе обработки запроса возникла
ошибка.
Метод PUT используется при вызове какой-либо функции,
но относится к уже существующей сущности. Например, при
обновлении вашего аккаунта, обновлении поста в блоге, и так
далее. Опять же, выполняемое действие может варьироваться
и не обязательно вызывается в результате запроса
Метод DELETE, как несложно догадаться, используется для
вызова запроса на удаление ресурса, идентифицированного
через URI, обращенного к серверу.
Метод TRACE - еще один необычный метод, в этот раз ис-
пользуемый для отражения сообщения запроса к тому, кто
его запросил. Это позволяет отправителю увидеть, что было
получено сервером и использовать эту информацию для те-
стирования и диагностики.
Метод CONNECT зарезервирован для использования с прокси
(прокси обычно является сервером, который передает запросы
к другим серверам).
Метод *OPTIONS используется для запроса с сервера инфор-
мации о доступных способах общения. Например, запрос OPTIONS
может показать, что сервер принимает GET, POST, PUT, DELETE
и OPTIONS, но не HEAD или TRACE.
Теперь, вооруженные базовым пониманием того, как работает
интернет, мы можем ознакомиться с разными типами уязви-
мостей, которые могут быть в нем найдены.