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

CTF web - silmarill store

CTF

Разбираем седьмую задачку из нашего соревнования CTF. Задание называется silmarill store, 478 баллов за флаг.

ctf

В задании предлагается посмотреть на некий простенький интернет-магазин.

Ссылки

Решение

В задачке встретятся различные логические уязвимости, связанные с недостаточной валидацией входных данных.

Рассматриваем магазинчик. 

ctf

У нас есть пользователь, у него 100 рублей на счету. И есть два товара, мусор, который стоит 1 рубль и Silmaril, которы стоит много, у нас столько нет. Подозреваю, что в задаче нужно попытаться купить драгоценность. 

Пробуем купить мусор.

ctf

Замечаем, что баланс уменьшился на 1 рубль.

ctf

Пробуем купить драгоценность.

ctf

Неудачка. 

Попробуем обычный вариант - подменить идентификаторы товаров. Заменим у мусора идентификатор товара на идентификатор драгоценности. Этот способ используют мошенники и в обычных магазинах - переклеивают этикетки и дорогой товар покупают по цене недорогого.

Посмотрим идентификатор драгоценности:

ctf

Название идентификатора "id", значение "0". Смотрим идентификатор мусора:

ctf

У мусора id=1. Заменяем его на "0":

ctf

Покупаем мусор.

ctf

А вот и флаг!

evoctf{lembas_elvish_waybread}

P.S.

У задачки есть ещё несколько решений.

  1. Вместо подмены id можно заменить стоимость у драгоценности, тоже прокатывает.
  2. Можно купить мусор за отрицательное количество рублей, тогда сумма на счету не уменьшится, а увеличится. Это ещё один из распространённых типов уязвимости - не учитывать отрицательные значения.

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

В интернет-магазинах идёт работа с деньгами, нужно проверять всё досконально, особенно если у вас всё автоматизировано.

  1. Проверяйте стоимость товара.
  2. Проверяйте идентификаторы товаров.
  3. Проверяйте отрицательные величины.

Теги

Комментарии