Перейти к основному содержанию
 

CTF — HTTP POST

CTF

Продолжаем решать задачки по информационной безопасности web-серверов. Сегодня задачка с портала root-me.org, называется "HTTP - POST". За решение задачки дают 15 баллов, чуть посложнее начального уровня.

ctf

Задание: Find a way to beat the top score! Найдите способ побить рекорд! Также предлагают ознакомиться с тем, что же такое POST-запрос.

POST — один из многих методов запроса, поддерживаемых HTTP протоколом. POST предназначен для передачи данных в теле запроса на сервер. Часто используется для загрузки файла на сервер или передачи данных заполненной пользователем формы.

Ссылки

https://www.root-me.org

https://en.wikipedia.org/wiki/POST_(HTTP)

https://ru.wikipedia.org/wiki/POST_(HTTP)

Решение

Переходим на страницу задания:

http://challenge01.root-me.org/web-serveur/ch56/

Видим страницу с текстом:

RandGame
Human vs. Machine
Here is my new game. It's not totally finished but I'm sure nobody can beat me! ;)
Rules: click on the button to hope to generate a great score
Score to beat: 999999

ctf

Нажимаем на кнопку "Give a try!"

ctf

Так, я получил 747394 очка, а нужно, судя по заданию, чтобы было больше 999999. Посмотрим содержимое страницы.

ctf

У нас есть форма, которая методом POST отправляет данные на сервер. При этом она передаёт скрытую переменную score. При отправке формы срабатывает скрипт:

document.getElementsByName('score')[0].value = Math.floor(Math.random() * 1000001)

Этот код каждый раз присваивает случайное значение переменной score от 0 до 1000001 (не включая). Соответственно, шансов получить больше 999999 очков не много.

Естественно, кликать до посинения не будем. Мы можем убрать этот скрипт и присвоить значение переменной score самостоятельно. Или можно повысить свои шансы на успех, сделаем это. Редактируем скрипт.

ctf

Дописываем пару нулей. Нажимаем на кнопку "Give a try!"

ctf

На этот раз нам выпадает больше чем 999999. Видим флаг:

H7tp_h4s_N0_s3Cr37S_F0r_y0U

Валидируем.

ctf

Флаг подходит, зарабатываем 15 очков.

Безопасность

  • Следует помнить, что методом POST данные передаются от клиента серверу, поэтому клиент может эти данные менять как ему вздумается. Web-сервер не должен доверять данным, переданным через POST.
  • Не передавайте секретные данные через POST в скрытых полях. Если данные не отображаются в URL, то это не значит, что клиент не может их посмотреть.

Теги