Перейти к содержимому

Поиск по платформе

Second-Order SQL Injection через профиль пользователя

Имя из БД подставляется в SQL через конкатенацию — Second-Order SQLi.

Автор: Hack & Fix
Освоишь: параметризованные запросыprepared statementsleast-privilege DB
Сложно+90 XP ~65 мин php
CWE-89 · A03:2021 Pro
Обложка: Second-Order SQL Injection через профиль пользователя Обложка: Second-Order SQL Injection через профиль пользователя
Задача
# Second-Order SQL-инъекция: срабатывание сохранённого ввода в профиле ## Сценарий Вы проводите аудит магазина аудиотехники «Белый Шум» (нативный PHP, SQLite) после выкатки «социальной» функции: на странице профиля появился блок похожих пользователей с тем же полным именем. Внешний пентест форм редактирования ничего не нашёл — регистрация и вход параметризованы, — и команда считает профильно-социальный блок мелочью. Заказчик попросил перепроверить именно его до рекламной кампании новой фичи. ## Цель 1. Убедитесь, что прямых инъекций в формах нет, и зарегистрируйте пользователя, спрятав вредоносную конструкцию в поле полного имени — при записи она сохранится как обычная строка. 2. Откройте профиль и добейтесь срабатывания «спящей» инъекции в блоке похожих пользователей. 3. Извлеките хеш пароля администратора, восстановите пароль и войдите под его учётной записью. 4. Купите товар «CTF Flag» и заберите флаг со страницы профиля. ## Теория Second-order (хранимая) инъекция работает в два такта: вредоносное значение безопасно сохраняется в базу через параметризованный запрос, а срабатывает позже — в другом месте, где данные, прочитанные из «своей» базы, снова вклеиваются в текст SQL конкатенацией. Разработчик ошибочно считает сохранённые данные доверенными: на точке ввода атаку не видно, сканеры форм молчат. **Уязвимый паттерн:** ```php $fullname = $user['fullname']; $sql = "SELECT username, fullname FROM users WHERE fullname LIKE '%" . $fullname . "%' AND id != " . (int)$user['id']; ``` Полное имя записывается при регистрации параметризованно — спецсимволы остаются буквальной строкой. Но блок похожих пользователей читает это имя из базы и склеивает из него новый запрос. Сохранённая конструкция «просыпается» уже как SQL-код: она способна изменить условие выборки и дополнить её строками из таблицы учётных записей — включая хеш пароля администратора, который отрисуется в списке похожих пользователей. ## Точка входа атаки * **Точка сохранения:** `POST /register`, поле `fullname`. * **Точка срабатывания:** `GET /profile` — блок похожих пользователей. * **Обычный пользователь для разведки:** `demo` / `demo` Пароль администратора словарный — хеш узнаваем по базе распространённых паролей. Флаг появится на странице `/profile` после входа под администратором и покупки товара «CTF Flag».

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: Boolean-based Blind SQL Injection через cookie купона Обложка лабы: Boolean-based Blind SQL Injection через cookie купона
SQLi

Boolean-based Blind SQL Injection через cookie купона

Значение купона из cookie подставляется в SQL-запрос без параметризации, позволяя извлечь данные через boolean-based blind инъекцию.

+90 XP
PHP Pro
Exploit Fix
Обложка лабы: SQL Injection — обход WAF blacklist Обложка лабы: SQL Injection — обход WAF blacklist
SQLi

SQL Injection — обход WAF blacklist

WAF с blacklist-фильтром блокирует SQL-ключевые слова, но обходится через mixed case.

+90 XP
PHP Pro
Exploit Fix
Обложка лабы: UNION SQL Injection в поиске каталога Обложка лабы: UNION SQL Injection в поиске каталога
SQLi

UNION SQL Injection в поиске каталога

UNION-based SQL-инъекция через поиск товаров позволяет извлечь данные из таблицы пользователей.

+60 XP
PHP Pro
Exploit Fix
Обложка лабы: SQL Injection в форме входа Обложка лабы: SQL Injection в форме входа
SQLi

SQL Injection в форме входа

Обход аутентификации через SQL-инъекцию в форме логина.

+30 XP
PHP Pro
Exploit Fix