Init. Commit

This commit is contained in:
Caplag
2026-09-17 00:50:07 +03:00
commit 880d8698d6
115 changed files with 7611 additions and 0 deletions
@@ -0,0 +1,35 @@
<h1 align="center">SortKey Station</h1>
<p align="center">
<img src="https://img.shields.io/badge/category-PWN-blueviolet" alt="PWN"/>
<img src="https://img.shields.io/badge/difficulty-easy-brightgreen" alt="easy"/>
</p>
Складская станция сортирует этикетки и поддерживает старый формат ключей `+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}`