Wapiti - перевірка сайту на вразливості самотужки

Wapiti - перевірка сайту на вразливості самотужки
У минулій статті ми розповіли про Nemesida WAF Free — безкоштовний інструмент для захисту сайтів та API від хакерських атак, а в цій вирішили зробити огляд популярного сканера вразливостей Вапіті.

Сканування сайту на вразливості — необхідний захід, який разом із аналізом вихідного коду дозволяє оцінити рівень його захищеності від загроз компрометації. Виконати сканування веб-ресурсу можна за допомогою спеціалізованого інструментарію.

Nikto, W3af (написаний на Python 2.7, підтримка якого закінчилася) або Arachni (з лютого більше не підтримується) - найбільш популярні рішення, представлені у безкоштовному сегменті. Зрозуміло, є й інші, наприклад Wapiti, на якому ми вирішили зупинимося.

Wapiti працює з такими типами вразливостей:

  • розкриття файлу (локальні та віддалені, fopen, readfile);
  • ін'єкції (PHP / JSP / ASP / SQL-ін'єкції та XPath-ін'єкції);
  • XSS (міжсайтовий скриптинг) (відбита та постійна);
  • виявлення та виконання команд (eval(), system(), passtru());
  • CRLF-ін'єкції (поділ відповідей HTTP, фіксація сеансу);
  • XXE (XML зовнішня сутність);
  • SSRF (підробка запиту на стороні сервера);
  • використання відомих потенційно небезпечних файлів (завдяки базі даних Nikto);
  • слабкі конфігурації .htaccess, які можна оминути;
  • наявність файлів резервних копій, які розкривають конфіденційну інформацію (розкриття вихідного коду);
  • Shellshock;
  • відкриті перенапрямки;
  • нестандартні методи HTTP, які можна дозволити (PUT).

Можливості:

  • підтримка проксі HTTP, HTTPS та SOCKS5;
  • автентифікація за допомогою кількох методів: Basic, Digest, Kerberos чи NTLM;
  • можливість обмежити область сканування (домен, папка, сторінка, URL-адреса);
  • автоматичне видалення одного з параметрів URL;
  • множинні запобіжні заходи проти нескінченних циклів сканування (приклад: ifor, обмеження значень для параметра);
  • можливість встановлення пріоритету для вивчення URL-адрес (навіть якщо не знаходяться в області сканування);
  • можливість виключити деякі URL-адреси зі сканування та атак (наприклад: URL logout);
  • імпорт файлів cookie (отримання їх за допомогою інструмента wapiti-get cookie);
  • можливість активувати/деактивувати перевірку сертифікатів SSL;
  • можливість отримати URL з JavaScript (дуже простий JS-інтерпретатор);
  • взаємодія з HTML5;
  • кілька варіантів управління поведінкою та обмеженнями crawler'a;
  • встановлення максимального часу для процесу сканування;
  • додавання деяких настроюваних HTTP-заголовків або налаштування користувача User-Agent.

Додаткові можливості:

  • створення звітів про вразливість у різних форматах (HTML, XML, JSON, TXT);
  • призупинення та відновлення сканування або атаки (механізм сеансу з використанням баз даних SQLite3);
  • підсвічування в терміналі виділення вразливості;
  • різні рівні логування;
  • швидкий і простий спосіб активації/деактивації модулів атаки.

Встановлення

Актуальну версію Wapiti можна встановити 2 способами:

  • завантажити вихідник з офіційного сайту і запустити скрипт установки, попередньо встановивши Python3;
  • за допомогою команди pip3 install wapiti3.

Після цього Wapiti буде готовим до роботи.

Робота з інструментом

Для демонстрації роботи Wapiti ми використовуватимемо спеціально підготовлений стенд sites.vulns.pentestit.ru (внутрішній ресурс), що містить різні вразливості (Injection, XSS, LFI/RFI) та інші недоліки веб-додатків.

Інформація надана виключно для ознайомлення. Чи не порушуйте законодавство!

Базова команда для запуску сканера:

# wapiti -u <target> <options>

При цьому є докладна довідка з величезною кількістю опцій запуску, наприклад:

-scope - галузь застосування
Якщо разом з URL для сканування вказати параметр scope, можна регулювати область сканування сайту, вказавши як окрему сторінку, так і всі сторінки, які вийде знайти на сайті.

-s и -x — Додавання або видалення конкретних URL-адрес. Ці параметри корисні, коли потрібно додати або видалити конкретну URL-адресу в процесі сканування.

-skip — вказаний параметр із цим ключем скануватиметься, але не атакуватиметься. Корисно, якщо є якісь небезпечні параметри, які краще виключити під час сканування.

-verify-ssl — увімкнення або вимкнення перевірки сертифіката.
Сканер Wapiti модульний Однак, для запуску конкретних модулів, з тих, що автоматично підключаються під час роботи сканера, потрібно використовувати ключ -m і перераховувати потрібні через кому. Якщо ключ не використовувати, то за промовчанням працюватимуть усі модулі. У найпростішому варіанті виглядатиме це наступним чином:

# wapiti -u http://sites.vulns.pentestit.ru/ -m sql,xss,xxe

Цей приклад використання означає, що ми будемо використовувати лише модулі SQL, XSS та XXE під час сканування мети. Крім цього, можна фільтрувати роботу модулів залежно від необхідного способу. Наприклад -m "xss: get, blindsql: post, xxe: post". У такому разі модуль xss буде застосовуватися до запитів, що передаються методом GET, а модуль blibdsql - До POST-запитів і т.д. До речі, якщо якийсь модуль, який був включений до списку, не знадобився під час сканування або працює дуже довго, натиснувши комбінацію Ctrl+C можна пропустити використання поточного модуля, вибравши відповідний пункт в інтерактивному меню.

Wapiti підтримує надсилання запитів через проксі-сервер за допомогою ключа -p та аутентифікацію на цільовому сайті через параметр -a. Також можна вказати тип аутентифікації: Basiс, Digest, Керберос и NTLM. Для останніх двох може знадобитися встановлення додаткових модулів. Крім того, можна вставляти у запити будь-які заголовки (у тому числі довільний User-Agent) і багато іншого.

Для використання аутентифікації можна використовувати інструмент wapiti-getcookie. З його допомогою ми формуємо cookie, які Wapiti буде використовувати під час сканування. Формування cookie виконується за допомогою команди:

# wapiti-getcookie -u http://sites.vulns.pentestit.ru/login.php -c cookie.json

У процесі роботи в інтерактивному режимі відповідаємо на запитання та вказуємо необхідну інформацію типу: логін, пароль та інше:

Wapiti - перевірка сайту на вразливості самотужки

На виході одержуємо файл у форматі JSON. Інший варіант – додати всю необхідну інформацію через параметр -d:

# wapiti-getcookie - http://sites.vulns.pentestit.ru/login.php -c cookie.json -d "username=admin&password=admin&enter=submit"

Результат буде аналогічний:

Wapiti - перевірка сайту на вразливості самотужки

При розгляді основного функціоналу сканера кінцевим запитом для проведення тестування веб-додатку в нашому випадку став:

# wapiti --level 1 -u http://sites.vulns.pentestit.ru/ -f html -o /tmp/vulns.html -m all --color -с cookie.json --scope folder --flush-session -A 'Pentestit Scans' -p http://proxy.office.pentestit.ru:3128

де серед інших параметрів:

-f и -o — формат та шлях для збереження звіту;

-m - Підключення всіх модулів - не рекомендується, т.к. позначатиметься на часі тестування та розмірі звіту;

-color - підсвічувати знайдені вразливості залежно від їх критичності за версією Wapiti;

-c - Використання файлу з cookie, згенерованого за допомогою wapiti-getcookie;

-scope - Вибір мети для атаки. Вибравши варіант папка буде скануватися та атакуватися кожен URL, починаючи з базового. Базовий URL повинен мати косу межу (без імені файлу);

-flush-session - дозволяє проводити повторне сканування, при якому не враховуватимуться попередні результати;

-A - Власний User-Agent;

-p — адреса проксі-сервера, якщо потрібна.

Трохи про звіт

Результат сканування представлений у вигляді докладного звіту з усіх знайдених уразливостей у форматі HTML-сторінки, у зрозумілому та зручному для сприйняття вигляді. У звіті будуть вказані категорії та кількість знайдених уразливостей, їх опис, запити, команди для витися та поради про те, як їх закрити. Для зручності навігації до назв категорій буде додаватися посилання, клікнувши по якому можна перейти до неї:

Wapiti - перевірка сайту на вразливості самотужки

Істотний мінус звіту — відсутність карти веб-додатку, без якої не буде зрозуміло, чи всі адреси і параметри були проаналізовані. Також є можливість помилкових спрацьовувань. У нашому випадку у звіті фігурують "файли бекапів" та "потенційно небезпечні файли". Їхня кількість не відповідає дійсності, оскільки подібних файлів на сервері не було:

Wapiti - перевірка сайту на вразливості самотужки

Можливо, модулі, що некоректно працюють, виправлять з часом. Також недоліком звіту можна назвати відсутність забарвлення знайдених уразливостей (залежно від їхньої критичності), або хоча б їх поділу за категоріями. Єдине, як ми можемо побічно зрозуміти про критичність знайденої вразливості – це застосовувати параметр -color при скануванні і тоді знайдені вразливості забарвлюватимуться різними кольорами:

Wapiti - перевірка сайту на вразливості самотужки

Але в самому звіті такого забарвлення не передбачено.

Вразливості

SQLi

Cканер частково впорався із пошуком SQLi. При пошуку SQL-уразливостей на сторінках, де не потрібна автентифікація, жодних проблем не виникає:

Wapiti - перевірка сайту на вразливості самотужки

Не вдалося знайти вразливість на сторінках, доступних тільки після аутентифікації, навіть з використанням валідних cookie, оскільки швидше за все після успішної аутентифікації буде здійснено "вихід їхньої сесії" і cookie стануть недійсними. Якби функція деавторизації була виконана у вигляді окремого скрипта, що відповідає за обробку цієї процедури, можна було б повністю виключити його через параметр -x, і тим самим запобігти його спрацьовування. В іншому випадку виключити його обробку не вдасться. Це проблема не конкретного модуля, а інструмента в цілому, але через цей нюанс не вдалося виявити кілька ін'єкцій у закритій області ресурсу.

XSS

Із заданим завданням сканер чудово впорався і знайшов усі підготовлені вразливості:

Wapiti - перевірка сайту на вразливості самотужки

LFI/RFI

Сканер знайшов усі закладені вразливості:

Wapiti - перевірка сайту на вразливості самотужки

Загалом, незважаючи на хибні спрацьовування та пропуски вразливостей, Wapiti як безкоштовний інструмент показує досить непогані результати роботи. У будь-якому випадку варто визнати, що сканер досить потужний, гнучкий і багатофункціональний, а головне безкоштовний, тому має право на використання, допомагаючи адміністраторам і розробникам отримувати базову інформацію про стан захищеності веб-додатку.

Залишайтеся здоровими та захищеними!

Джерело: habr.com

Додати коментар або відгук