Автор: Kuzya
WebScarab — профессиональный инструмент для анализа защищённости веб-приложений.
Официальная страница: http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project
Последняя версия на момент написания статьи: 20070504-1631
Ограничения: Написан на Java. Для запуска требуется Java JRE/JDK версии 1.4.2 или выше.
ОС: Проект кросс-платформенный.
Все недоработки были обнаружены под ОС WinXP SP2. Возможно некоторые их них не проявляются в других ОС.
В этой статье я хотел бы рассказать о WebScarab (далее WS) - достаточно мощном и профессиональном инструменте, созданном для исследования веб-приложений. К сожалению, как и многие подбные проекты WS уже давно не развивается. Окончание его разработки датируется 4 мая 2007 года, тогда вышла последняя версия доступная и сегодня. История же у него похожа на множество остальных — сначала он создавался для личного пользования автором (Rogan Dawes), а потом было решено выложить его на общедоступные ресурсы для массового пользования. Кстати, при долгом использовании можно заметить все признаки того что сначала автор даже и не думал куда-либо выкладывать свой проект — много непонятных и известных одному ему функций, пунктво меню, кнопок и т.д. большинство из которых не описаны в справке. Конечно, много и недоработок. Очень часто вылазеет окошко исключения, после которого нужно перезагрузить WS, иначе оно буде появляться при каждом движении. Но не смотря на все минусы у WS огромное количество плюсов. WS даёт пользователю огромный функционал который, плюс ко всему, может расширяться с использованием встроенного скриптового языка. В отличие от других проектов подобного рода WS это не программа. Фактически это фреймворк к которому подключаются плагины составляющие его функционал. Его основой является прокси-сервер работающий по адресу 127.0.0.1:8008. При обращении к сайтам данные запросов и ответов сервера записываются в базу и становятся доступны для всех плагинов, что позволяет одному плагину использовать результаты работы другого. Так же, в основном наборе, имеется 2 вида интерфейса — облегчённый и полный. При разных интерфейсах WS доступен разный функционал, поэтому мы рассмотрим по очереди каждый из них.
1.0 Lite-интерфейс.
Этот интерфейс активизируется сразу после установки. В нём доступны только функции перехвата обращений к серверу и ответов от него. Так же доступен небольшой сторонний функционал. Начнём со строки меню которая в обоих вариантах интерфейсов содержит 4 пункта - «File», «View», «Tools» и «Help».
В меню «File» Вы можете начать новую, сохранить или загрузить сессию. При начале новой сессии Вас попросят указать директорию для её хранения. Здесь нужно отметить то что данные сессии хранятся не в одном файле, а в директории в виде множества файлов. Поэтому при сохранении нужно указывать не имя файла а путь к директории сохранения. Обратите внимание ещё и на то что данные сессии, которая начинается при запуске WS, нигде не сохраняются. Их можно сохранить только вручную.
Далее идёт меню «View», в котором содержится подменю «Content editors» содержащее пункт «Wrap text». Честно говоря я так и не смог понять что этот пункт делает. Затем следует меню «Tools». Оно содержит следующие пункты.
- Proxies — здесь Вы можете указать прокси-серверы для протоколов HTTP и HTTPS, а так же список хостов обращение к которым должно проходить без участия прокси-серверов.
- Credentials — в этом пункте Вы должны указать необходимые данные для авторизации, если таковые требуются. При включении галочки «Ask when required» WS будет запрашивать у Вас эти данные только когда они станут необходимы. При этом в таблицу данных авторизации можно ничего не добавлять. Если Вы здесь ничего не укажите то данные для авторизации будут запрашиваться как обычно через браузер.
- ranscoder — здесь Вы можете производить различные операции с обычным текстом, а именно — кодировать/декодировать URL-спецсимволы, кодировать/декодировать текст по алгоритму base64 и получать md5 и sha1 хэши введённого текста.
- Reveal hidden fields — при отметке галочкой этого пункта все скрытые поля, находящиеся в ответах сервера, будут заменены на аналогичные текстовые. Вот пример действия этой опции из редактирования профиля в phpNuke
- User full-featured interface — использование полного интерфейса. Об этом ниже.
Ну и под конец идёт меню «Help» содержащее сведения о программе и небольшой help. Нужно сказать что помощь поставляемая в дистрибутиве не очень то информативная. Некоторые возможности в ней просто не описаны, а некоторые описаны не точно. Вообщем составлена она «в общих чертах».
Следующим шагом мы рассмотрим функциональную части интерфейса. Она состоит из двух закладок - «Summary» и «Intercept».
1.1 Закладка Summary.
На этой закладке располагается информация о запросах прошедших через прокси-сервер. В первой части окна находится древовидная структура запросов с их адресами, кодами ответов и т.д.
Последние 3 колонки этой таблицы помечаются галочкой при следующих условиях. Если в заголовке ответа сервера на определённый запрос имеется поле «Set-Cookie», то в одноимённой колонке ставится галочка. Если в теле ответа имеются какие-либо комментарии то галочкой помечается поле «Comments». Ну и последнее поле «Scripts» отмечается галочкой тогда когда в теле ответа WS обнаружит вставки скриптов.
В нижней части окна находится таблица совершённых запросов. Она содержит те же самые поля что и древовидная структура за несколькими исключениями. По умолчанию в этой таблице содержатся все запросы сделанные в текущей сессии. Если Вы отметите поле «Tree selection filters conversation list», находящееся в самом верху закладки, то в этой таблице будет отображаться только тот запрос который выбран в древе. Так же здесь можно посмотреть все внутренности обращения, комментарии и скрипты обнаруженные в нём. Для этого нужно выбрать интересующий Вас запрос и кликнуть по нему правой кнопкой мыши. Вы увидите меню состоящее из трёх пунктов.
- Show conversation — просмотр внутренностей запроса и ответа на него
- Show scripts — просмотр скриптов обнаруженных в теле ответа. Этот пункт меню активен только если в соответствующем поле стоит галочка.
- Show comments — просмотр комментариев обнаруженных в теле ответа. Этот пункт тоже активен тогда когда соответствующее поле отмечено галочкой.
При выборе первого пункта откроется окно содержащее все данные о запросе. В самом его верху расположена панель навигации. В неё входят кнопки «Previous», «Next» (показ предыдущего и следующего запроса, соответственно) и выпадающий список содержащий все запросы текущей сессии для быстрой навигации между ними. Далее окно разделяется на 2 основные части. В первой его половине показывается информация запроса, а во второй — ответа сервера на этот запрос. В свою очередь каждая из частей делится так же надвое — заголовок и тело.
У части содержащей заголовок всегда имеется только 2 вкладки - «Parsed» и «Raw». При выборе первой из них Вы увидите данные в форме таблицы, как это показано на рисунке выше. При выборе закладки «Raw» содержимое заголовка будет показываться в виде обычного текста. Во той части, что содержит тело, количество закладок постоянно меняется в зависимости от передаваемых данных. Например так могут появится закладки:
- «Hex» - отображение данных в шестнадцатиричном виде.
- «XML» - отображение данных в виде XML-древа.
- «TEXT» - отображение данных в виде обычного текста.
- «HTML» - отображение данных в виде обработанного HTML-кода. Почти точно так же как этот код отобразит браузер.
- «image» - отображение данных в виде изображения.
Если WS не сможет распознать тип передаваемых данных то Вам будет доступна лишь одна закладка - «Hex».
При выборе пункта «Show scripts» открывается окно содержащее коды всех обнаруженных в теле ответа скриптов.
Здесь Вы должны быть внимательны с размером окна и таблицы, находящейся внутри него. На вышеприведённом рисунке видно что в последнем скрипте одна из строк видна не полностью, хотя в окне ещё есть свободное место. При просмотре скриптов растягивайте и окно, и рамку таблицы — это позволит видеть те части кода которые скрываются за её пределами.
При нажатии на пункт «Show comments» Вы увидите окно со списком обнаруженных комментариев. Оно очень похоже на окно показа скриптов.
1.2 Закладка «Intercept»
Перейдём ко второй основной закладке - «Intercept». Здесь можно управлять перехватами запросов и ответов. Если Вы в самом верху окна активируйте галочку «Intercept requests» то WS начнёт перехватывать все запросы браузера проходящие через него. Так же разблокируется и несколько дополнительных полей. Первое поле - «Methods». Оно содержит методы запросов которые подлежат перехвату. По умолчанию в нём выделены 2 пункта - «GET» и «POST». Выделить сразу несколько методов Вы можете с помощью клика мышки с зажатым ctrl`ом. Справа находятся ещё 3 поля. Первое - «Case sensitive regular expression». При его активации начинают перехватываться только те запросы которые совпадают с регулярными выражениями введёнными ниже. Второе поле - «Include Paths matching», содержит регулярное выражение при совпадении с которым запрос должен быть перехвачен. По умолчанию в нём находится значение «.*» обозначающее перехват любых запросов. И третье поле - «Exclude Paths matching». Содержит регулярное выражение при совпадении с которым запрос не будет перехватываться. По умолчанию там уже находится значение «.*\.(gif|jpg|png|css|js|ico|swf|axd.*)$», что исключает перехват картинок, иконок, стилей и прочих, часто не нужных, файлов.
В самом низу данной закладки находится пункт «Intercept responses», при активации которого WS начинает перехватывать ответы сервера. Ниже этого пункта находится поле «Only MIME-Types matching», содержащее регулярное выражение в котором указывается какого MIME-типа (поле «Content-Type» заголовка) ответы должны быть перехвачены. По умолчанию в нём содержится вырежение «text/*» разрешающее перехват только текстовых данных.
Как только WS`у удастся перехватить какие-либо данные он сразу просигнализирует Вам об этом. На панели задач должно открыться новое окно с именем «Edit Request» или «Edit Response». Мы рассмотрим пример только с окном «Edit Request» так как оба эти окна не сильно друг от друга отличаются. В самом его верху находятся 2 поля для быстрой активации/деактивации перехвата запросов и ответов. Далее идёт уже знакомое Вам окно редактирования запроса. Но на этот раз поля не заблокированы для вмешательства.
В режиме таблицы Вы можете редактировать заголовки двойным щелчком мыши по их именам или содержимому. Если же Вы перейдёте на закладку «Raw» то сможете редактировать заголовок как в текстовом редакторе. Справа от заголовков, в табличном режиме, имеются кнопки «Insert» и «Delete» которые вставляют новый заголовок и удаляют выделенный соответственно. И в самом низу этого окна имеется 4 кнопки:
1.Accept changes — Принять все изменения. После нажатия этой кнопки отредактированные данные будут отправлены дальше.
2.Cancel changes — Отменить все изменения. После нажатия этой кнопки данные будут отправлены дальше без применения к ним изменений.
3.Abort Request — Оборвать запрос. После нажатия этой кнопки данные удаляются и до источника не доходят.
4.Cancel ALL Intercepts — закрыть все окна перехваченных запросов и отправить данные дальше без принятия изменений.
Нужно заметить что форма редактирования ответа сервера отличается от формы редактирования запроса только наличием второй части окна — содержимого ответа (которая просто убрана из первой формы за ненадобностью). Больше никаких отличий между ними нет.
Вот и вся суть Lite-интерфейса. Перейдём теперь к полному варианту. Сделать это можно активировав пункт «Use full-featured interface» в меню «Tools» и перезапустив WebScarab.
2.0 Интерфейс «Full-featured»
В данном виде интерфейса пользователю предоставляется полный функционал WS, точнее всех его плагинов. Для начала, как и выше, рассмотрим строку меню. В инструментах («Tools») появились новые пункты. Это
- Certificates
- Shared cookies
- Script manager
- Restart plugins
WS`ом поддерживаются клиентские SSL-сертификаты и пункт «Certificates» открывает их хранилище. В нём Вы можете производить с ними различные манипуляции, а именно — добавлять, удалять, редактировать и активировать сертификаты когда это потребуется. WS поддерживает 2 формата сертификатов — PKCS#11 и PKCS#12.
Пункт «Shared cookies» открывает хранилище общедоступных cookies которые могут использоваться различными плагинами. Вы можете добавлять туда данные как вручную, с помощью кнопки «Add», так и с помощью плагинов (описано ниже).
В верхней части окна («cookies») показывается основная информация о хранящихся здесь данных. В нижней («Previous values») - вторичная. Если устанавливаются cookies которые уже находятся в хранилище, то их данные заносятся второй строкой в нижнюю таблицу. В верхней же ничего не меняется.
Пункт «Script Manager» открывает утилиту управления скриптов. Здесь содержаться и управляются так называемые «хуки». При открытии этой утилиты в левой части окна Вы увидите древовидную структуру. Раскройте любое древо и кликните на под-пункт. В правой верхней части окна сразу же появится описание данного хука в котором говорится когда он вызывается и что использует. Так же, при выборе мышью хука, в верхнем меню станет доступна кнопка «Add» позволяющая добавить скриптовый код(на BeanShell или Jython) в выбранный хук. Соответственно, после добавления при вызове данного хука будет вызываться и Ваш код.
Пункт «Restart plugins» фактически ни для чего не предназначен. Он был очень давно создан разработчиком для того что бы отловить какую-то проблему (сам разработчик деталей уже не помнит), а после её решения он просто не стал удалять этот пункт. То же самое и с пунктом «Log level» в меню «Help». Этот пункт так же ничего не делает.
С меню всё. Перейдём к основному окну. В «Full-featured»-варианте главное окно содержит 14 закладок.
1.Summary
2.Messages
3.Proxy
4.Manual Request
5.WebServices
6.Spider
7.Extensions
8.XSS/CRLF
9.SessionID analysis
10.Scripted
11.Fragments
12.Fuzzer
13.Compare
14.Search
Рассмотрим подробно каждую из них.
2.1 Summary
Эта закладка Вам уже знакома, но в полной версии интерфейса в ней есть несколько дополнений. В древе запросов появились новые колонки, а именно «Posible injection» и «Injection». Первая колонка помечается галочкой тогда когда WS подозревает наличие инъективной уязвимости, а вторая — когда фактически определено её существование. Подробнее об этом написано ниже, в описании закладки «XSS/CRLF». Отмечу то что во время всех проведённых мною тестов я ни разу не видел галочки в поле «Injection». Возможно это просто одна из недоработок.
Вторым дополнением является вызов правой кнопкой мыши меню в древе запросов. Два его пункта - «Show comments» и «Show scripts» в объяснениях не нуждаются, так как были описаны выше, а вот на третьем пункте, «Spider tree», мы остановимся. Выбор этого пункта приведёт к сканированию модулем поискового паука выбранной части древа. То есть если в обычном режиме поисковый паук просканировал бы весь сайт то тут он обработает лишь указанный путь не выходя за его приделы. Подробнее эту процедуру я описал в соответствующем разделе.
В нижней таблице добавилось несколько новых полей относящихся к уязвимостям - «Posible injection», «XSS» и «CRLF» свидетельствующих о наличии/отсутствии возможной уязвимости, XSS и CRLF. Так же в меню, появляющемся при правом клике мышью, добавился пункт «Use as fuzz template», при нажатии на который выделенный запрос будет использоваться как шаблон для плагина «Fuzzer». Об этом так же написано ниже, в разделе этого плагина.
2.2 Messages
Данная закладка содержит отладочную информацию обо всех действиях WS и пользователя. Точно такие же данные Вы можете увидеть в командной строке которая открывается вторым окном при запуске WebScarab`a.
2.3 Proxy
На этой закладке происходит управление функциями прокси-сервера. Здесь имеется 4 под-закладки. Первая - «Listenters». На ней располагается список запущенных прокси-серверов. По умолчанию там один прокси, запущенный на IP-адресе «127.0.0.1». Для того что бы запустить новый экземпляр заполните соответствующую форму в низу окна и нажмите кнопку «Start» в его правой части.
После этого будет запущен новый прокси-сервер на указанном Вами адресе и порту. Данная возможность может использоваться например для того чтобы принимать подключения через WS из вне или с виртуальной машины. Завершить работу какого-либо экземпляра прокси-сервера можно нажитием кнопки «Stop».
Следующая закладка «Manual Edit». Каких-то новшеств, по сравнению с облегчённой версией интерфейса здесь нет, поэтому перейдём сразу к закладке «Bean shell». Данный плагин позволяет с помощью одноимённого языка оказывать воздействие на запросы и ответы (их заголовки, тела и т.д.) проходящие через прокси-сервер. Это нечто похожее на макросы. Для выполнения какого-либо кода нужно выполнить несколько незамысловатых действий. Сначала отметьте галочкой поле «Enabled». Затем в открывшееся текстовом поле поместите нужный код. И активируйте его нажатием кнопки «Commit». Обратите внимание на то что любые изменения в выполняемом коде будут приняты только после нажатия этой кнопки. Основы этого скриптового языка я здесь приводить не буду, скажу лишь только что его синтаксис сильно похож на Java. А в качестве примера я приведу простой скрипт который записывает в текстовый файл данные о запросах и кодах ответов на них.
Код:
import org.owasp.webscarab.model.Request;
import org.owasp.webscarab.model.Response;
import org.owasp.webscarab.httpclient.HTTPClient;
import java.io.IOException;
public Response fetchResponse(HTTPClient nextPlugin, Request request) throws IOException {
response = nextPlugin.fetchResponse(request);
FileWriter fstream = new FileWriter("C:/WebScarab_log.txt", true);
BufferedWriter log = new BufferedWriter(fstream);
log.write("============================================\r\n");
log.write("URL: "+request.getURL().toString()+"\r\n");
log.write("Method: "+request.getMethod()+"\r\n");
log.write("Answer code: "+response.getStatus()+"\r\n");
log.close();
return response;
}
Подробное описание языка «Bean Shell» Вы можете получить на сайте разработчиков — http://www.beanshell.org в разделе документации. Информацию по внутренним объектам WS, которые могут быть задействованы в скриптах, можно получить по адресу [деркториия куда установлен WS]/doc/api/index.html.
Следующая закладка - «Miscellaneouse». Тут имеется всего 4 пункта.
1.«Reveal hidden fields in HTML pages». Этот пункт нам уже знаком из lite-интерфейса. При его активации все скрытые поля в ответах сервера модифицируются в текстовые.
2.«Prevent browser from caching content». При активации этого пункта прокси-сервер запрещает кэширование поступающего материала.
3.«Inject known cookies into request». Активация этого поля указывает WS`у что в каждый запрос нужно включать cookies из хранилища «Shared cookies»
4.«Get cookies from responses». Если этот пункт отмечен галочкой то все получаемые cookies будут помещаться в хранилище «Shared cookies»