Райтап на задачу «Десериализатор»

Автор:

feadal

25 октября 2026

Ну чё, ребятки, соскучились, 3пта? Сегодня разбираем очередной вебчик.

Заходим на сайт, а там форма, которая наш ввод пихает прямо в unserialize() без единой проверки. Ну пи3дец, разраб, ты вообще еб4нутый? Сам себе могилу выкопал. В index.php лежит вот такой оху3нный подгон:

Исходный код класса FileReader и метода __destruct()

__destruct() — магический метод, ПХП дёргает его сам, без спроса, когда объект откидывается. То есть нам даже жопу рвать не надо: слепим рецепт FileReader с flag.txt внутри, скормим форме — пыха соберёт объект, потом выкинет его нахYй и уже своими же руками высрет нам флаг. Вот это и есть PHP Object Injection, 3бать, — на3бываем сервак его же функцией.

Но есть одна подстава, Вась, — эта шлюха private $filename: пыха оборачивает имя свойства нуль-байтами (\0FileReader\0filename, длина 20 (вот же непонятный пи3дец)). Нуль-байт с клавы хYй вобьёшь, пальцами его не настучишь → берём большую S, 3пта, ведь эта тварь жрёт хекс-эскейп \00 и сама понимает его как нуль-байт. НихYйно, 3бать.

Готовый рецептик, ёптыть:

O:10:"FileReader":1:{S:20:"\00FileReader\00filename";s:8:"flag.txt";}
Форма отправки сериализованного объекта FileReader

Чего 3блом щёлкать, берём и отправляем этот непонятный пи3дец и получаем флаг. Честно, до сих пор сам в ахYе:

Результат десериализации и содержимое flag.txt

Мораль, пацаны: никогда, не суй пользовательский ввод в unserialize(), иначе прилетит такой вот красавчик и вы3бет тебя твоим же кодом, а ты даже не заметишь.

Если вы нашли опечатку или ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter

Также по теме:

Райтап на задачу «Просмотр файлов»

/Разборы задач

Райтап на задачу «Просмотр файлов»

Райтап feadal на задачу «Просмотр файлов»: проверка пути через startswith, поведение os.path.normpath и обход запрета на чтение файла.
Прочитать

10

Райтап на задачу «Безвыигрышная лотерея»

/Разборы задач

Райтап на задачу «Безвыигрышная лотерея»

Разбор задачи «Безвыигрышная лотерея»: обходим клиентскую проверку длины имени, разбираем усечение JSON в MySQL и уязвимость CWE-602.
Прочитать

30