12+
Анализ защищенности распределенных информационных систем. DVWA

Бесплатный фрагмент - Анализ защищенности распределенных информационных систем. DVWA

Для студентов технических специальностей

Объем: 144 бумажных стр.

Формат: epub, fb2, pdfRead, mobi

Подробнее

Я — хакер, войдите в мой мир…

Манифест хакера

Введение

Научить «взламывать» информационные системы невозможно. Это другой — альтернативный образ мысли. Данная книга не является пособием по практике тестирования на проникновение, а скорее содержит в себе описание наиболее распространенных уязвимостей на примере популярного образа  DVWA

DVWA содержит 14 уязвимостей (названия представлены из веб-приложения):

— Brute Force;

— Command Injection;

— CSRF;

— File Inclusion;

— File Upload;

— Insecure CAPTCHA;

— SQL Injection;

— SQL Injection (Blind);

— Weak Session IDs;

— XSS (DOM);

— XSS (Reflected);

— XSS (Stored);

— CSP Bypass;

— JavaScript.

Необходимо выполнить задание на трех различных уровнях сложности.

DVWA будет развёрнут на собственном виртуальном сервере с использованием механизмов контейнеризации (Docker). Порт 8001/TCP сервера отображается на порт 80/TCP контейнера. Доступ к серверу производится с использованием доменного имени kalkt.com. Таким образом, доступ к DVWA можно получить по ссылке http://kalkt.com:8001.

Для выполнения заданий будет использоваться виртуальная машина с установленной операционной системой Kali Linux версии 2021.1 и виртуальная сеть между DVWA и kali.

Авторы выражают огромную благодарность студентам группы 6ИБ-1 ФГБОУ ВО КнАГУ за неоценимую помощь в подготовке материалов книги.

1 Command Injection Low

Command Injection (внедрение команды) — уязвимость, представленная в пункте A1 OWASP Top 10 (внедрение). Она позволяет выполнять на стороне сервера произвольный код.

В DVWA на странице Command Injection представлена форма, изображённая на рисунке 1.1. В неё пользователь может написать адрес узла, который будет являться аргументом команды ping.

Рисунок 1.1 — Форма с полем ввода адреса

При вводе корректного адреса выводится результат работы утилиты ping.

В ОС Linux в оболочке bash допускается исполнять несколько команд в одной строке, используя; (точку с запятой) как разделитель команд.

На рисунке 1.2 изображено подтверждение наличия уязвимости. На стороне сервера будет выполнена команда «ping localhost; echo Hello».

Рисунок 1.2 — Подтверждение наличия уязвимости

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

По заданию необходимо получить имя текущего пользователя и hostname контейнера (docker-контейнера). Команды, выводящие указанные данные, изображены на рисунке 1.3. На стороне сервера при этом выполнится команда «ping; id -u -n; hostname».

Рисунок 1.3 — Имя пользователя и hostname

2 Command Injection Medium

В DVWA на странице Command Injection представлена форма, изображённая на рисунке 2.1. В неё пользователь может написать адрес узла, который будет являться аргументом команды ping.

Рисунок 2.1 — Форма с полем ввода адреса

При вводе корректного адреса выводится результат работы утилиты ping.

При попытке использования точку с запятой как разделитель команд, выясняется, что пользовательский ввод фильтруется. Также невозможно использовать оператор &&.

Однако при вводе команды после оператора & обнаруживается уязвимость.

На рисунке 2.2 изображено подтверждение наличия уязвимости. На стороне сервера будет выполнена команда «ping localhost; echo Hello».

Рисунок 2.2 — Подтверждение наличия уязвимости

Для уменьшения времени получения вывода можно не писать аргумент команде ping, то есть, вводить первым символом &.

По заданию необходимо получить имя текущего пользователя и hostname контейнера (docker-контейнера). Команды, выводящие указанные данные, изображены на рисунке 2.3. На стороне сервера при этом выполнится команда «ping &id -u -n&hostname».

Рисунок 2.3 — Имя пользователя и hostname

3 Command Injection Hard

Command Injection (внедрение команды) — уязвимость, представленная в пункте A1 OWASP Top 10 (внедрение). Она позволяет выполнять на стороне сервера произвольный код.

В DVWA на странице Command Injection представлена форма, изображённая на рисунке 3.1. В неё пользователь может написать адрес узла, который будет являться аргументом команды ping.

Рисунок 3.1 — Форма с полем ввода адреса

При вводе корректного адреса выводится результат работы утилиты ping.

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

На рисунке 3.2 изображено подтверждение наличия уязвимости. На стороне сервера будет выполнена команда «ping localhost; echo Hello».

Рисунок 3.2 — Подтверждение наличия уязвимости

Для уменьшения времени получения вывода можно не писать аргумент команде ping, то есть, вводить первым символом прямую черту.

По заданию необходимо получить имя текущего пользователя и hostname контейнера (docker-контейнера). Команды, выводящие указанные данные, изображены на рисунках 3.3 и 3.4. На стороне сервера при этом выполнятся команды «ping |id» и «ping |hostname».

Рисунок 3.3 — Имя пользователя


Рисунок 3.4 — hostname

4 File Inclusion Low

File Inclusion — уязвимость, заключающаяся в возможности использования и выполнения файлов на стороне сервера путём формирования определённого запроса к серверу.

Задание состоит в том, что необходимо прочитать содержимое файла ../hackable/flags/fi.php.

В DVWA на странице File Inclusion представлены три файла. При открытии любого файла его название отображается в строке запроса. Это означает, что GET-параметр page определяет, какой файл необходимо открыть, что изображено на рисунке 4.1.

Рисунок 4.1 — Пример открытия файла

Для демонстрации наличия уязвимости будет предпринята попытка прочитать файл /etc/passwd. На рисунке 4.2 изображено его содержимое.

Рисунок 4.2 — Содержимое файла /etc/passwd

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

Рисунок 4.3 — Использование фильтров php

На рисунке 4.4 изображено декодированное содержимое файла.

Рисунок 4.4 — Содержимое файла ../hackable/flags/fi.php

5 File Inclusion Medium

File Inclusion — уязвимость, заключающаяся в возможности использования и выполнения файлов на стороне сервера путём формирования определённого запроса к серверу.

Задание состоит в том, что необходимо прочитать содержимое файла ../hackable/flags/fi.php.

В DVWA на странице File Inclusion представлены три файла. При открытии любого файла его название отображается в строке запроса. Это означает, что GET-параметр page определяет, какой файл необходимо открыть, что изображено на рисунке 5.1.

Рисунок 5.1 — Пример открытия файла

Опытным путём установлено, что последовательность символов».. /” фильтруется. Предположительно, заменяется на пустую строку, так как при параметре page равном “../../../file3.php» открывается файл file3.php, изображённый на рисунке 5.1.

Существует метод обхода подобной фильтрации. В нём используется тот факт, что операция замены последовательности символов во входных данных выполняется только один раз. Это позволяет использовать конструкции вида «….//». Эта последовательность будет преобразована в».. /».

Для демонстрации наличия уязвимости будет предпринята попытка прочитать файл /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.

Рисунок 9.6 — Содержимое таблицы users

Также на скриншоте видно, что sqlmap в процессе работы нашёл пароли в открытом виде, использовав перебор по встроенному словарю.

10 SQL Injection (Blind) Low

SQL Injection (внедрение кода SQL) — атака, связанная с внедрением в SQL-запрос сервера к СУБД произвольного кода. Blind (слепая) инъекция не выводит пользователю никакой информации. Для получения информации злоумышленник использует предположения о длительности выполнения различных операций.

В DVWA на странице SQL Injection (Blind) представлена форма ввода id пользователя, изображённая на рисунке 10.1.

Рисунок 10.1 — Форма ввода

Для эксплуатации уязвимости будет использована утилита sqlmap.

На рисунке 10.2 представлена команда, запускающая сканирование: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli_blind/?id=1&Submit=Submit" — cookie=«PHPSESSID=mp4p8kk8or3m2s7spc22ng0m73; security=low’».

Рисунок 10.2 — Запуск сканирования

В ходе сканирования было выяснено, что используется СУБД MySQL, уязвимый параметр — id. Результаты сканирования изображены на рисунке 10.3.

Рисунок 10.3 — Результаты сканирования

Далее необходимо получить список баз данных, для этого к команде добавляется ключ –dbs: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli_blind/?id=1&Submit=Submit" — cookie=«PHPSESSID=mp4p8kk8or3m2s7spc22ng0m73; security=low’ — dbs». Результаты изображены на рисунке 10.4.

Рисунок 10.4 — Список баз данных

Теперь можно получить список таблиц в базе dvwa. Для этого через ключ -D нужно указать БД, затем указать ключ –tables, чтобы получить названия таблиц: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli_blind/?id=1&Submit=Submit" — cookie=«PHPSESSID=mp4p8kk8or3m2s7spc22ng0m73; security=low’ -D dvwa — tables». Результаты изображены на рисунке 10.5.

Рисунок 10.5 — Таблицы в базе dvwa

Теперь можно получить записи таблицы guestbook. Для этого ключ –tables меняется на -T guestbook, добавляется ключ –dump: «sqlmap -u "http://kalkt.com:8001/vulnerabilities/sqli_blind/?id=1&Submit=Submit" — cookie=«PHPSESSID=mp4p8kk8or3m2s7spc22ng0m73; security=low’ -D dvwa -T guestbook — dump». Результаты изображены на рисунке 10.6.

Рисунок 10.6 — Содержимое таблицы guestbook

11 SQL Injection (Blind) Medium

SQL Injection (внедрение кода SQL) — атака, связанная с внедрением в SQL-запрос сервера к СУБД произвольного кода. Blind (слепая) инъекция не выводит пользователю никакой информации. Для получения информации злоумышленник использует предположения о длительности выполнения различных операций.

В DVWA на странице SQL Injection (Blind) представлена форма ввода id пользователя, изображённая на рисунке 11.1.

Рисунок 11.1 — Форма ввода

Для эксплуатации уязвимости будет использована утилита sqlmap. В качестве аргумента будет передаваться файл, содержащий POST-запрос в текстовом виде. Содержимое файла представлено на рисунке 11.2.

Бесплатный фрагмент закончился.

Купите книгу, чтобы продолжить чтение.