Автор: @FaLLenSkiLL
Ссылка на таск Codeby
https://codeby.games/categories/web/ca07034b-bde4-4c87-bc9d-bccea9cc9dd1
Описание задания
Таск на понимание GET и POST запросов и манипуляции с ними
IP: 62.173.140.174:16002
Решение
В этом задании нам предстоит научиться отличать GET параметры от POST. На это также намекает подсказка
Начнем с теории:
GET параметры указываются в URI. Когда вы пытаетесь получить что-то с сервера, например, открыть страницу в браузере, это часто осуществляется через GET запрос. Он включает информацию, которая видна прямо в адресной строке браузера. Например, если вы хотите открыть страницу с новостями о кошках, адрес страницы может выглядеть так: www.example.com/news?category=cats
. Здесь category
- это GET параметр, а cats
- его значение.
POST параметры указываются в теле запроса. Когда вы отправляете информацию на сервер, например, заполняете форму для отправки комментария, используется POST запрос. Информация, отправляемая POST запросом, не отображается в адресной строке браузера. Она передается скрыто, внутри тела запроса. Это безопаснее для отправки чувствительной информации, такой как пароли или личные данные.
Теперь давайте посмотрим на практический пример.
- Заходим на сайт. Нас просят отправить запрос, содержащий GET параметр
want_flag
и 2 POST параметра -admin
иmessage
.
- Для отправки запроса мы будем использовать инструмент под названием Burp Suite. Вы можете установить его, введя команду
apt install burpsuite
.
- Начнем с GET запроса. GET параметры указываются прямо в адресной строке браузера, после знака вопроса
?
.
- POST параметры указываются в теле запроса, что означает, что они не отображаются в адресной строке браузера.
В ответе сервера будет лежать флаг
Но есть и другой способ, вы можете использовать утилиту curl, прямо у себя в консоли
curl - это утилита командной строки, которая используется для отправки и получения данных с серверов по различным протоколам, включая HTTP и HTTPS.
Наш запрос будет выглядеть примерно так:
curl -i -s -k -X $'POST' \
-H $'Host: 62.173.140.174:16002' -H $'Cache-Control: max-age=0' -H $'Upgrade-Insecure-Requests: 1' -H $'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.216 Safari/537.36' -H $'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7' -H $'Content-Type: application/json' -H $'Accept-Encoding: gzip, deflate, br' -H $'Accept-Language: en-US,en;q=0.9' -H $'Connection: close' -H $'Content-Length: 35' \
--data-binary $'{\x0d\x0a\"admin\":1,\x0d\x0a\"message\":\"Hello\"\x0d\x0a}' \
$'http://62.173.140.174:16002/?want_flag=YES'
Где:
-i - указывает curl на вывод заголовков ответа сервера.
-s - параметр, указывающий curl на режим “тихого” выполнения, что подразумевает отключение индикаторов прогресса и других сообщений, чтобы получить только данные ответа.
-k - этот параметр игнорирует проверку сертификата SSL. Это может быть полезно, если вы тестируете на сервере с самоподписанным сертификатом.
-X POST - указывает curl на то, что мы отправляем POST запрос.
-H - этот параметр добавляет заголовки к запросу. Например, -H 'Host: 62.173.140.174:16002'
указывает целевой сервер и порт.
—data-binary - это параметр, который указывает curl на данные, которые нужно отправить в теле запроса. В данном случае мы отправляем JSON данные, представленные в виде строки '{\x0d\x0a\"admin\":1,\x0d\x0a\"message\":\"Hello\"\x0d\x0a}'
.
URL - указывает на адрес, на который отправляется запрос. В данном случае, мы отправляем запрос на http://62.173.140.174:16002/?want_flag=YES
, указывая GET параметр want_flag
со значением YES
.
Tags: