Перейти к содержимому
← Каталог php Type Juggling

Type Juggling: обход strcmp() через массив

Эндпоинт /promo сравнивает секретный токен через strcmp() с `== 0`. Отправка promo_token[]=x превращает strcmp() в NULL, а NULL == 0 — true: проверка обходится.

mediumphpPro
Задача
# Lab: Type Juggling — обход strcmp() через некорректную интерпретацию результата ## Сценарий SecureShop добавил специальную страницу "Promo Redemption" — по секретному административному токену любой пользователь может получить "CTF Flag" бесплатно. Токен хранится в базе и должен быть длинной случайной строкой — угадать невозможно. Разработчик использовал `strcmp()` для сравнения присланного токена с сохранённым значением, но неправильно интерпретировал возвращаемое значение: `strcmp()` возвращает `0` только при равенстве строк, и отрицательное число, если первая строка лексикографически меньше. Неверная проверка приняла **любую** строку, лексикографически меньшую админского секрета, за "равную". Твоя задача — обойти проверку токена и получить "CTF Flag" на аккаунт `demo`, не зная секретного значения. ## Цели 1. Залогиниться под `demo` / `demo`. 2. Обойти проверку промо-токена на эндпоинте `POST /promo` и получить заказ "CTF Flag" на свой аккаунт. 3. Убедиться, что на странице `/profile` появился заказ "CTF Flag". ## Данные | Параметр | Значение | |----------|----------| | Эндпоинт | `POST /promo` | | Пользователь | `demo` / `demo` | | Поле формы | `promo_token` | | Проверка результата | `GET /profile` должен показывать "CTF Flag" в списке заказов | ## Ограничения - Подбирать точное значение токена нельзя: это длинная случайная строка. - Утечка секрета из кода/БД не предполагается — сервер доступен только по HTTP. - Нужен специфичный для PHP трюк при сравнении строк / интерпретации возвращаемого значения.
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru