День 11. Веб-анализ при помощи Nikto, OWASP ZAP, Burp Suite и Paros
Автор статьи никого не призывает к правонарушениям и отказывается нести ответственность за ваши действия. Вся информация предоставлена исключительно в ознакомительных целях. Все действия происходят на виртуальных машинах и внутри локальной сети автора. Спасибо!
Сегодня начинаю тестировать веб-приложения (глава 10 книги Парасрам Шивы). Ранее уже использовал сканер уязвимостей Nessus. Сегодня будем использовать нечто похожее.
Для начала необходимо скачать OWASP (https://sourceforge.net/projects/owaspbwa/) – это набор уязвимых веб-приложений. Скачиваю 1.2/OWASP_Broken_Web_Apps_VM_1.2.ova
.
Запустил OWASP на VirtualBox. Теперь необходимо найти этот хост:
nmap -sP 192.168.56.0/24
Замечательно. Будем работать с 192.168.56.108
– это целевая машина на сегодня. Перешел на сам сайт OWASP с атакующей машины. На главной странице множество ссылок, как я понял на первый взгляд, на различные «тестовые площадки», в которых есть уязвимости.
Теперь будем использовать базовый сканер уязвимостей nikto
. Он находит, в основном, ошибки, связанные с неправильной конфигурацией на самом сервере или, если что-то установлено по умолчанию.
$ nikto -h 192.168.56.108 -p 80
Как обычно, очень много информации, которую сходу не понять. Из первых строк становится понятно об использовании Apache/2.2.14 (Ubuntu) с некоторыми модулями (mod_mono/2.4.3 PHP/5.3.2-1ubuntu4.30 with Suhosin-Patch proxy_html/3.0.1 mod_python/3.3.1 Python/2.6.5 mod_ssl/2.2.14 OpenSSL/0.9.8k Phusion_Passenger/4.0.38 mod_perl/2.0.4 Perl/v5.10.1). Далее, как я понимаю, перечислены уязвимости. Попробую разобраться в них (погуглить, то есть):
Server may leak inodes via ETags, header found with file /, inode: 286483, size: 28067, mtime: Thu Jul 30 22:55:52 2015
Речь про утечку «инодов». Инод – это структура данных, используемая в Linux. У каждого файла и каталога есть индексный дескриптор, в котором хранится его имя, размер и другие данные. У каждого индекса есть уникальный номер. Apache некоторое время использовал ETag. Номер инода – это техническая информация о файловой системе. Если эта информация раскрыта, то этот инод нельзя использовать. Далее, кто-то пишет, что это ложное срабатывание nikto, а кто-то считает, что знание номера инода можно применить, чтобы понять в каком месте системы мы находимся: «chroot jail» или нет Chroot jail, это «песочница», в которой можно запустить сомнительный процесс, который не сможет изменять данные за пределами заданного дела каталогов.
The anti-clickjacking X-Frame-Options header is not present.
Clickjacking – это когда злоумышленник использует несколько прозрачных слоев, чтобы заставить нажать пользователя на кнопку на странице по фрейме, когда последний намеревался нажать на страницу «верхнего» уровня. Получается нечто перехвата кликов и нажатия клавиш. Например, пользователь может думать, что вводит данные в поле ввода для пароля от почты, но это не так.
Утилита nikto
сообщает, что у нас отсутствует заголовок X-Frame-Options
, защищающий от кликджекинга.
The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
Отсутствует заголовок X-XSS-Protection, защищающий от атаки с использованием межсайтового скриптинга (XSS). Данные, передаваемые в веб-приложение «заражаются» вредоносным кодом. Вредоносный код, как правило, написан на интерпретируемом браузером языке, например, JavaScript. Целью XSS является получение конфиденциальных данных: файлы cookie или другая информация о сеансе.
The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
Отсутствует заголовок X-Content-Type-Options. Сниффинг типов MIME – обычная процедура браузеров для поиска подходящего способа отображения данных, когда заголовки HTTP, отправляемые сервером, неубедительны. Опасность возникает, когда пользователь может загружать контент на веб-сервер. Таким образом, злоумышленник может выполнить атаку XSS. Например, будет выполняться вредоносный код при просмотре изображения на сайте. (https://www.invicti.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/)
OSVDB-3268: /cgi-bin/: Directory indexing found.
Индексируется каталог cgi-bin
. Не совсем понятно, в чем состоит уязвимость. Здесь возвращаюсь к книге. Что означает код OSVDB. Это аббревиатура базы данных уязвимостей с открытым исходным кодом. В 2016 году сервис перестал работать. Однако, команда CVE, добавила все собранные данные себе. Его можно посмотреть здесь: http://cve.mitre.org/data/refs/refmap/source-OSVDB.html. Использовать эту справочную карту – отдельное искусство.
/crossdomain.xml contains a full wildcard entry. See http://jeremiahgrossman.blogspot.com/2008/05/crossdomainxml-invites-cross-site.html
Найден файл crossdomain.xml, который позволяет включить больше сайтов в круг доверия. То есть, с помощью этого файла разрешается всем сайтам вне домена читать его (сайта) данные. Если злоумышленник находится в кругу доверия, то он может скомпрометировать пользовательские данные. Статья 2008 года. Не знаю, как сейчас обстоят дела (никогда не встречался с этим файлом), но тогда многие сайты этим злоупотребляли.
Python/2.6.5 appears to be outdated (current is at least 2.7.8)
Старая версия Python, к тому же, еще вторая.
Apache/2.2.14 appears to be outdated (current is at least Apache/2.4.37). Apache 2.2.34 is the EOL for the 2.x branch.
Apache тоже устарел.
proxy_html/3.0.1 appears to be outdated (current is at least 3.1.2)
mod_ssl/2.2.14 appears to be outdated (current is at least 2.8.31) (may depend on server version)
Perl/v5.10.1 appears to be outdated (current is at least v5.20.0)
OpenSSL/0.9.8k appears to be outdated (current is at least 1.1.1). OpenSSL 1.0.0o and 0.9.8zc are also current.
mod_mono/2.4.3 appears to be outdated (current is at least 2.8)
PHP/5.3.2-1ubuntu4.30 appears to be outdated (current is at least 7.2.12). PHP 5.6.33, 7.0.27, 7.1.13, 7.2.1 may also current release for each branch.
Phusion_Passenger/4.0.38 appears to be outdated (current is at least 4.0.53)
mod_perl/2.0.4 appears to be outdated (current is at least 2.0.8)
И все модули тоже не обновлялись.
IP address found in the 'location' header. The IP is "127.0.1.1".
На данный момент, не понятная уязвимость.
OSVDB-630: The web server may reveal its internal or real IP in the Location header via a request to /images over HTTP/1.0. The value is "127.0.1.1".
OSVDB-39272: /favicon.ico file identifies this app/server as: owasp.org
Uncommon header 'tcn' found, with contents: list
С этими уязвимостями разберусь в процессе.
Apache mod_negotiation is enabled with MultiViews, which allows attackers to easily brute force file names. See http://www.wisec.it/sectou.php?id=4698ebdc59d15. The following alternatives for 'index' were found: index.css, index.html
Модуль mod_negotiation
включен в MultiViews
, то есть злоумышленник может перебирать имена файлов.
+ mod_ssl/2.2.14 OpenSSL/0.9.8k Phusion_Passenger/4.0.38 mod_perl/2.0.4 Perl/v5.10.1 - mod_ssl 2.8.7 and lower are vulnerable to a remote buffer overflow which may allow a remote shell. http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2002-0082, OSVDB-756.
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ Retrieved x-powered-by header: PHP/5.3.2-1ubuntu4.30
+ Cookie phpbb2owaspbwa_data created without the httponly flag
+ Cookie phpbb2owaspbwa_sid created without the httponly flag
+ OSVDB-3092: /phpmyadmin/changelog.php: phpMyAdmin is for managing MySQL databases, and should be protected or limited to authorized hosts.
+ OSVDB-3268: /test/: Directory indexing found.
+ OSVDB-3092: /test/: This might be interesting...
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3268: /images/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ /phpmyadmin/: phpMyAdmin directory found
+ OSVDB-3092: /phpmyadmin/Documentation.html: phpMyAdmin is for managing MySQL databases, and should be protected or limited to authorized hosts.
+ 8877 requests: 1 error(s) and 35 item(s) reported on remote host
+ End Time: 2022-04-02 03:38:29 (GMT-4) (39 seconds)
Одним словом, множество уязвимостей. В книге, к сожалению, ничего не расписано и вряд ли будет. Показано только как применять утилиту nikto
.
Сканер OWASP ZAP
Проект OWASP, помимо уязвимого веб-приложения, создал сканер с открытым исходным кодом. В моей версии Kali Linux нет OWASP ZAP, поэтому для начала установим его:
$ zaproxy
После скачивания и установки запускаем ZAP
. Предлагается сохранить сеанс. Пока не будем его сохранять. Для начала разберемся с теорией. Существует пассивное и активное сканирование. При пассивном сканировании данные сайта не изменяются – это более безопасный вид. Активное сканирование может изменять данные и вставлять вредоносные скрипты. Таким способом можно сканировать только специально развернутые на локальном хосте сайты.
Хорошо расписано про начальную работу с OWASP ZAP на хабре (https://habr.com/ru/company/alexhost/blog/530110/). Минут двадцать искал, как добавить сайт для анализа. Оказалось все просто, необходимо открыть браузер (через OWASP ZAP) и перейти на нужный сайт. Даже не ожидал, что ZAP настолько автоматизированный. Пока не буду углубляться в работу с этим сканером, оставлю на потом.
Инструмент Burp Suite
Еще одно мощное средство для тестирования веб-приложений. Открываем его:
$ burpsuite
Открываем вкладку Proxy
, далее Intercept
(перехват) и убеждаемся, что перехват включен (intercept is on
). Далее пробуем посетить целевой сайт (http://192.168.56.108/dvwa/). Не открывается.
Все правильно, браузер должен оставаться в режиме подключения. Далее нажимаем кнопку Forward
, чтобы «продвинуть» загрузку. На вкладке HTTP History
сохраняется история запросов HTTP. Далее в книге предлагается использовать Spider
(но, как я понял, в последней версии такой команды нет). Поэтому пока пропустим это, может быть дальше будет понятнее.
Далее введем случайные данные в поля для логина/пароля. В запросе появится:
username=admin&password=12345&Login=Login
Данные, которые использовал для авторизации. Конечно же они неправильные. Далее нажимаю Send to Intruder
, перехожу на вкладку Intruder
, а там на Position
. Данные, которые были введены, подсвечиваются и обрамлены знаком доллара.
Захожу во вкладку Payloads
. Для первого поля (имя пользователя) устанавливаю Simple List
и в Payload Options
ввожу имя admin
, например.
На вкладке Position
необходимо выбрать Cluster bomb
, иначе попросту нельзя будет выбрать второе поле для установки нагрузки.
Загружаю список паролей. Пять миллионов не загрузились. Хорошо, для начала попробую небольшой список из трех тысяч.
К сожалению, ничего не получилось. Даже не смотря на знание логина/пароля (admin/password).
Что же, пока запишем это в неудачную попытку и отложим на потом.
Прокси-сервер Paros
Сначала его необходимо установить. Далее в браузере устанавливаем прокси сервер 127.0.0.1:8080
. Открываем paros и страницу 192.168.56.108
.
На вкладке Sites
появился хост. Нажимаю вкладку Analyse
, далее Spider
для обхода сайта.
Для поиска уязвимостей нажимаю Analyse
, далее Scan
. В результате получаю все найденные уязвимости. С Paros тоже познакомился.
Инструменты W3AF и WebScarab оставлю на потом, так как с ними я все равно просто познакомлюсь. После работы с предыдущими, я понял о необходимости изучения дополнительной информации.
Сегодня установил OWASP для тестирования, познакомился с Nikto, OWASP ZAP, Burp Suite и Paros. Разобрался с некоторыми уязвимостями.
Ссылки дня:
- Пока искал информацию по уязвимостям, часто попадал на сайт: https://www.invicti.com/web-vulnerability-scanner/vulnerabilities/
- Про OWASP ZAP: https://habr.com/ru/company/alexhost/blog/530110/