SortKey Station

PWN easy

Складская станция сортирует этикетки и поддерживает старый формат ключей `+POS.C`. В ELF `sortkey-station` находим приведение позиции к знаковому 16-битному числу. Большая положительная позиция после него превращается в отрицательное смещение. ## Решение При проверке старого ключа сервис обращается к `key_buf + (int16_t)pos` и сравнивает строку по этому адресу с `SORT-EXPORT`. Если подобрать `pos`, чтение уйдёт перед началом ключа — в профиль партии, содержимое которого можно задать. Нужная область находится за 32 байта до `key_buf`. В 16-битной арифметике: $$65504 - 65536 = -32.$$ Значит, подходит ключ `+65504.0`. Теперь размещаем строку допуска в профиле: ```python profile = b"A" * 64 + b"SORT-EXPORT" legacy_key = b"+65504.0" ``` Строка допуска начинается после 64 байт заполнения в профиле, по смещению `-32` от начала `key_buf`. В `1) set batch profile` отправляем профиль, затем в `2) set legacy sort key` задаём `+65504.0`. Вызываем `3) dry-run sort`, чтобы сервис проверил допуск, и забираем результат через `4) export station batch`. Проверка читает `SORT-EXPORT` из подставленного профиля и принимает его за разрешение на экспорт. В ответе получаем флаг. [Солвер](solve/solve.py). ## Флаг `caplag{legacy_sort_pointer_found_the_batch_grant}`