Автор: @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 запросом, не отображается в адресной строке браузера. Она передается скрыто, внутри тела запроса. Это безопаснее для отправки чувствительной информации, такой как пароли или личные данные.

Теперь давайте посмотрим на практический пример.

  1. Заходим на сайт. Нас просят отправить запрос, содержащий GET параметр want_flag и 2 POST параметра - admin и message.

  1. Для отправки запроса мы будем использовать инструмент под названием Burp Suite. Вы можете установить его, введя команду apt install burpsuite.

  1. Начнем с GET запроса. GET параметры указываются прямо в адресной строке браузера, после знака вопроса ?.

  1. 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:

#codeby#writeup#web #easy