Здравствуйте. Изучая w3af я наткнулся на страницу описания всех плагинов (http://w3af.sourceforge.net/plugin-descriptions.php). Там содержится всё - их опции, назначение, принцип работы и т.д. Этот документ может сильно помочь в освоении фреймворка, поэтому я решил перевести его на русский язык. pdf-версия с содержанием - http://kuzya.name/files/w3af_plugins.pdf (26 страниц, Times New Roman, 12pt). Плагины аудита xsrf Плагин ищет уязвимости категории Cross Site Request Forgeries (XSRF) Для проведения элементарной проверки на XSRF приложение должно отсылать пользователю cookie и принимать от него же один или несколько параметров. htaccessMethods Плагин обнаружает неправильную настройку .htaccess через параметр LIMIT. Его работа основана на документе написанном Frame и madjoker с сайта kernelpanik.org. Он называется: "htaccess: bilbao method exposed" Идея техники (и плагина) заключается в раскрытии неправильной настройки .htaccess. Например, вот такой: <LIMIT GET> require valid-used </LIMIT> Подобная конфигурация позволяет осуществлять GET-запросы только авторизированным лицам. Но те же POST-запросы могут выполнятся любым пользователем. sqli Данный плагин ищет уязвимости категории SQL-injections. Для их обнаружения он посылает строку d'z"0 в каждом параметре отдельно взятой ссылки и ищет в теле ответа сообщения о SQL-ошибках. sslCertificate Этот плагин проверяет параметры SSL-сертификатов. Примечание: Он будет полезен только при работе с сайтами через HTTPS. fileUpload Данный плагин пытается произвести небезопасную загрузку файлов на сервер через соответствующую форму на сайте. Он имеет один настраиваемый параметр: - extensions. Параметр представляет из себя список расширений, разделённых запятыми, файлы с которыми плагин будет пытаться загрузить на сервер. Большинство веб-приложений проверяют расширение в случае если разрешено загружать строго определённые типы файлов. Именно их Вы должны указать в параметре extensions. Некоторые приложения проверяют ещё и содержимое файла на предмет его соответсвия расширению. Для обхода этих проверок плагин использует шаблоны располагающиеся в директории "plugins/audit/fileUpload/". Они представляют из себя файлы с содержимым которое полностью соответствует расширению. В каждом из них имеется специальная секция (например поле комментария в GIF-картинке) которая может быть заменена определённым кодом ( PHP, ASP и т.д.). После загрузки файла плагин пытается найти директории типа "upload" или "files". Если такие директории найдены, и файл находится в одной из них, то уязвимость существует. mxInjection Плагин ищет MX-инъекции. Такие уязвимости присущи веб-приложениям которые представляют из себя ПО для работы с почтой через WEB. Проверка крайне проста. В каждом параметре отсылается специальная строка. Если в ответе сервера будет найден текст ошибки то уязвимость существует. generic Этот плагин ищет все виды уязвимостей без использования исправленных ошибок базы данных. Это новая методология которая решает большинство проблем присущих сканерам веб-приложений. Примечание переводчика: Знаю, бред, но по другому я никак не смог это перевести. Вот настоящий текст: This plugin finds all kind of bugs without using a fixed database of errors. This is a new kind of methodology that solves the main problem of most web application security scanners. localFileInclude Данный плагин ищет уязвимости подключения локальных файлов. Это осуществляется помещением в каждый параметр пути к файлу (например "../../../../../etc/passwd") и поиском в ответе сервера текста типа "root:x:0:0:". unSSL Плагин проверяет какие из ссылок, доступных по защищённому протоколу (HTTPS), доступны по обычному HTTP. Для этого он запрашивает одни и те же ссылки с разными протоколами. Например "https://abc/a.asp" и "http://abc.asp". Затем происходит сравнение ответов от сервера, и если они одинаковые то уязвимость существует. xpath Плагин ищет уязвимости типа XPATH-injections. Для их обнаружения он помещает строку "d'z'0" во все доступные параметры и в ответе сервера ищёт сообщение о XPATH-ошибке. osCommanding Этот плагин пытается обнаружить уязвимости удалённого выполнения команд на атакуемом сервере. Обнаружение происходит двумя разными путями: - С помощью временной задержки - Вывода в ответе сервера какого-либо файла. При первом случае плагин отсылает специально сформированный запрос, который при существовании уязвимости замедлит ответ сервера на 5 секунд (ping -c 5 localhost). Во втором варианте он посылает серверу специально сформированный запрос, который в случае существования уязвимости выводит какой-либо файл (например /etc/passwd/). Плагин имеет большой список разделителей команд типа ";" и "`" для поиска уязвимостей в любых ОС, платформах и языках программирования. remoteFileInclude Плагин осуществляет поиск уязвимости подключения удалённых файлов. Он имеет 3 параметра которые пользователь может изменять - listenAddress - listenPort - usew3afSite Есть 2 варианта запуска этого плагина. Первый заключается в использовании сайта w3af (w3af.sf.net) как места, откуда веб-приложение будет брать удалённый файл. Другой же путь заключается в запуске локального веб-сервера и использовании его как источника для подключения удалённого файла. Как Вы, наверное, уже догадались, опции для второго варианта это "listenAddress" и "listenPort". dav Данный плагин ищёт ошибки конфигурации WebDAV. Это ошибки скорее серверной стороны, чем веб-приложения. Для проверки наличия уязвимости плагин пытается методом PUT записать файл в директорию где задействован WebDAV. Если это удалось то ошибка существует. ssi Этот плагин ищет уязвимости при работе с технологией Server Side Include eval Этот плагин ищет уязвимости при использовании функции eval(). Такие уязвимости существуют в приложениях, разработчики которых помещают в эту функцию данные приходящие от пользователя. Для выявления уязвимости фреймворк посылает строку с вызовом echo-функции и двумя случайными строками в качестве параметров (echo 'abc' + 'xyz') и если в ответе сервера имеется результат выполнения этой функции ('abcxyz') то уязвимость существует. buffOverflow Плагин ищет уязвимости переполнения буфера. Вы должны знать о том что подобный тип уязвимостей можно выявить только в том случае если на сервере включён вывод ошибок. К тому же проверяемое приложение должно быть написано на С, или другом языке, позволяющем программисту управлять памятью приложения. xss Плагин обнаружает уязвимости межсайтового скриптинга (Cross Site Scripting (XSS). Имеет 2 параметра: - checkStored - numberOfChecks При поиске XSS плагин будет отсылать серверу специально сформированный JavaScript-код в параметрах ссылки или формы и искать его в ответе сервера. Параметр "checkStored" указывает плагину на то, что нужно запомнить все отправляемые в ходе проверки данные и по окончании неё заново запросить все страницы, проверив их наличие там. Опция numberOfChecks указывает сколько строк с кодом нужно посылать в каждом параметре. xst Этот плагин ищет XST-уязвимости (Cross Site Tracing). Он не имеет параметров. Суть XST-уязвимостей в том что TRACE-метод возвращает обратно запрос пользователя в таким, каким он его принял. Плагин отсылает TRACE-запрос серверу и если получает его обратно в неизменном виде то уязвимость существует. blindSqli Плагин для поиска слепых SQL-инъекций Имеет 2 параметра: - equAlgorithm - equalLimit Параметр equAlgorithm показывает как сравнивать полученные плагином страницы. Здесь есть 2 варианта: - stringEq - setIntersection Классический метод сравнения двух строк (stringEq) в Python - это "string1 == string2", но некоторые сайты содержат постоянно изменяющиеся баннеры и другую не статичную информацию. Для таких случаев разработан второй метод. Алгоритм "setIntersection" создаёт два разных набора слов, взяв их из двух разных ответов сервера (имеется в виду несколько слов со страницы с ошибочным запросом и несколько с безошибочным - п.п.). При проведении проверки плагин получает страницу и ищет в её коде слова из этих наборов. Если в ответе найдено совпадений столько сколько указано в "equalLimit" то считается что страница совпала с набором "правильного" или "ошибочного" ответа. formatString Плагин ищен ошибки форматной строки. Вы должны знать, что выявить подобные уязвимости можно в том случае когда на сервере включён вывод ошибок. И приложение написано на C или другом языке. Позволяющем программисту допускать такие недочёты. preg_replace Плагин ищет ошибки в использовании функции preg_replace. Они допустимы в том случае когда пользователь может управлять данными, попадающими в регулярное выражение этой функции и оно имеет модификатор "e". На данный момент плагин может обнаружить уязвимость только тогда когда PHP выводит информацию об ошибках. Но в скором времяни он сможет делать это "вслепую". globalRedirect Данный плагин обнаружает ошибки глобальной переадресации пользователей. Такие уязвимости могут быть использованы для фишинга или подобных ему атак. Самым простым примером является скрипт который переадресовывает пользователя на адрес, переданный в параметре "url", с помощью HTTP-ответа 302 с заголовком "location". Ошибки глобальной переадресации могут быть найдены в javascript-коде, META-тегах и переадресации с помощью кодов 302/301. LDAPi Плагин ищет уязвимости категории LDAP-injections. Он посылает в каждом параметре специально сформированную строку и проверяет код ответа на наличие в нём LDAP-ошибки. phishingVector Плагин ищет уязвимости пригодные для фишинга. Например уязвимость существует если я пройду по ссылке "http://site.tld/asd.asp?info=http://attacker.tld" и в ответе приложения будет код код: ... <iframe src="http://attacker.tld"> .... frontpage Этот плагин пытается загрузить файлы на сервер с использованием скприта author.dll поставляемым в FrontPage. responseSplitting Данный плагин ищет уязвимость разделения ответа (По нашему - CRLF-инъекция - п.п.). Ошибка существует если при отправке серверу запроса с данными "w3af\r\nVulnerable: Yes" в каждом параметре, он посылает ответ с заголовком "Vulnerable" и его значением "Yes". Bruteforce-плагины formAuthBrute Данный плагин занимается подбором логинов через html-формы. Он имеет 9 параметров: - usersFile - stopOnFirst - passwdFile - passEqUser - useMailUsers - useSvnUsers - useMails - useProfiling - profilingNumber Плагин возьмёт список пользователей из файла указанного в "usersFile", почтовые пользователи будут браться с сайта (если "useMailUsers" установлен в true), почтовые адреса берутся с сайта (если "useMails" установлена в true), и svn-пользователи берутся с сайта (если "useSvnUsers" установлена в true). Список паролей будет взят из файла "passwdFile" и из результатов профилирования паролей (если опция "useProfiling" установлена в true). Опция profilingNumber указывает номер результата из работы плагина профилирования для использования в поле пароля. Опция "stopOnFirst" указывает на завершение подбора как только будет подобран пароль к первому аккаунту. basicAuthBrute Плагин подбирает пароли к basic-авторизации Имеет 9 параметров: - usersFile - stopOnFirst - passwdFile - passEqUser - useMailUsers - useSvnUsers - useMails - useProfiling - profilingNumber Плагин возьмёт список пользователей из файла указанного в "usersFile", почтовые пользователи будут браться с сайта (если "useMailUsers" установлен в true), почтовые адреса берутся с сайта (если "useMails" установлена в true), и svn-пользователи берутся с сайта (если "useSvnUsers" установлена в true). Список паролей будет взят из файла "passwdFile" и из результатов профилирования паролей (если опция "useProfiling" установлена в true). Опция profilingNumber указывает номер результата из работы плагина профилирования для использования в поле пароля. Опция "stopOnFirst" указывает на завершение подбора как только будет подобран пароль к первому аккаунту.
Grep-плагины dotNetEventValidation ASP.NET имеет метод контроля действий пользователя во избежании атак. Он называется EventValidation. В некоторых случаях разработчики отключают его, добавляя в конфигурацию строку EnableEventValidation="false". Данный плагин находит страницы с отключенным EventValidation. В некоторых случаях, если Вы проанализируйте логику работы программы, Вы сможете обойти авторизацию или другие ограничения. pathDisclosure Плагин сканирует каждую страницу в поисках строк раскрывающих путь приложения. Например: - C:\www\files\... - /var/www/htdocs/... Результат сохраняется в общей базе знаний, и может использоваться другими плагинами которым нужно знать местонахождение определённых файлов внутри атакуемого сервера. codeDisclosure Плагин ищет страницы, в HTML-коде которых есть вставки серверных скриптовых языков. В основном он ищет PHP и ASP теги ('<?.*?>' и '<%.*%>'). Такие ошибки могут возникать в следствие неправильной конфигурации сервера. blankBody Плагин отлавливает http-ответы с пустым телом. Такие ответы могут свидетельствовать об ошибке или неправильной настройке сервера/приложения metaTags Плагин ищет в каждой странице интересные meta-теги. К примеру, они могут содержать слова : 'microsoft', 'visual', 'linux'. motw Плагин ищет страницы которые сформированы по MOTW-стандарту. Он описан вот тут: http://msdn2.microsoft.com/en-us/library/ms537628.aspx Он проверяет длину адресов на основании цифр "(XYZW)". Меньшей они длинны, такой же, или большей. И сообщает о результатах пользователю.Имеется один параметр который пользователь может изменять: - withoutMOTW Если опция "withoutMOTW" включена то плагин будет искать страницы не включающие в себя MOTW. privateIP Плагин сканирует все страницы веб-приложения в поисках приватных IP-адресов. directoryIndexing Плагин ищет ссылки при обращении к которым показывается индекс директории. svnUsers Плагин отсеивает со страниц имена SVN-пользователей. Наример, иногда в HTML-коде приложения можно обнаружить информацию о пользователе вносившем изменения в страницу. Эта информация добавляется в плагин knowledgeBase. ssn Плагин сканирует страницы приложения и ищет в них номера социального страхования. fileUpload Плагин отбирает все страницы где есть форма загрузки файлов. strangeHTTPCode Плагин анализирует HTTP-ответ и пытается найти в нём различные странности, о которых позже сообщает. hashFind Плагин ищет различные хэши в коде http-ответов. getMails Плагин осеивает из кода страниц все E-mail адреса. Позже они могут использоваться для подбора паролей или ещё чего либо. httpAuthDetect Плагин отбирает все страницы которые требуют авторизации. wsdlGreper Этот плагин обрабатывает каждую страницу и ищет в коде признаки наличия WSDL. Не все WSDL-документы кончаются "?WSDL" в адресе страницы. Но именно по такому признаку их ищет плагин discovery.wsdlFinder. wsdlGreper может помочь отыскать те WSDF-страницы которые другой плагин не нашёл. newline Плагин идентифицирует тип переноса строки на каждой странице. В конце работы он скажет в какой OС было написано данное приложение - Windows, Linux или Mac. Примечание: Я не знаю где этот плагин может пригодиться, но он был одной из многих идей. Возможно, когда-то он воскреснет из мёртвых и будет использоваться для более полезных целей. passwordProfiling Плагин формирует лист возможных поролей на основании анализа страниц и отбора самых популярных слов. domXss Плагин отбирает страницы которые могут страдать DOM XSS - уязвимостью. Информация об этом типе уязвимостей может быть найдена здесь: http://www.webappsec.org/projects/articles/071105.shtml ajax Плагин ищет страницы в которых имеется AJAX-код. findComments Этот плагин отсеивает страницы на которых имеются комментарии. Комментарии со специальными словами типа "password" или "user" показываются пользователю отдельно. httpInBody Плагин ищет сраницы у которых в теле имеются http-запросы или ответы. Такая ситуация может быть например когда программист занимается отладкой веб-приложения и выводит текущий запрос в комментариях страницы. strangeHeaders Плагин собирает странные заголовки в ответах сервера. Это может помочь в определении дополнительных модулей сервера. lang Плагин сканирует n-ное количество страниц и определяет на каком языке написан сайт. Информация о языках хранится в виде списка предлогов. Для определения на странице просто ищутся совпадения с предлогами каждого из языков. errorPages Плагин сканирует каждую страницу и ищет в них тексты ошибок. collectCookies Плагин собирает все cookies которые сервер посылает в ответ на запросы. Это может помочь в выявлении уязвимостей или идентификации приложения. strangeParameters Плагин собирает ссылки со странными параметрами. Например, вот такие: http://a/?b=method(a,c) http://a/?c=x|y|z|d error500 Плагин отсеивает каждый адрес при обращении к которому сервер отвечает ошибкой 500. objects Плагин отбирает каждую страницу на которой есть подключение апплетов и прочих объектов. creditCards Плагин сканирует каждую страницу и отсеивает строки похожие на номера кредитных карт. Вы можете протестировать его на этом адресе: https://www.paypal.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm oracle Плагин отсеивает каждую страницу где есть сообщения, ошибки и т.д. СУБД Oracle feeds Этот плагин отбирает каждую страницу где есть возможность rss, atom или opml - подписки. Это может помочь при определении ПО отвечающего за генерацию подписок. Эта же информация может использоваться при поиске feed-инъекций. Evasion-плагины shiftOutShiftInBetweenDots Плагин вставляет до, после и перед точками специальные символы (shift-in, shift-out) которые позволяют обойти проверку на выражение "..". Например: Исходный запрос: '../../../../../../../../etc/passwd' Изменённый запрос: '.%0E%0F./.%0E%0F./.%0E%0F./.%0E%0F./.%0E%0F./.%0E%0F./.%0E%0F./.%0E%0F./etc/passwd' backSpaceBetweenDots Данный плагин добавляет перед точками символ "А" и символ бэкспейса. Это помогает обойти фильтрацию по выражению"..". Пример: Исходный запрос: '../../../../../../../../etc/passwd' Результат: '.%41%08./.%41%08./.%41%08./.%41%08./.%41%08./.%41%08./.%41%08./.%41%08./etc/passwd' rndPath Плагин генерирует случайный путь к документу. Пример: Исходный запрос: '/bar/foo.asp' Результат: '/aflsasfasfkn/../bar/foo.asp' selfReference Плагин добавляет к директориям ссылку на себя же (.). Пример: Исходный запрос: '/bar/foo.asp' Результат: '/bar/./foo.asp' modsecurity Плагин для обхода mod_security версии 2.1.0 и ниже. Почитать об этом Вы можете здесь: http://www.php-security.org/MOPB/BONUS-12-2007.html Важно: Такой приём работает только с POST-данными. Пример: Исходные данные: 'a=b' Результат: '\x00a=b' rndCase Данный плагин случайно генерирует регистр букв в строке. Исходный адрес: '/bar/foo.asp' Результат: '/BAr/foO.Asp' rndHexEncode Плагин случайным образом заменяет некоторые символы в строке на их HEX-аналоги. Пример: Исходный адрес: '/bar/foo.asp' Результат: '/b%61r/%66oo.asp' reversedSlashes Данный плагин заменяет слэши на бэк-слэши. Пример: Исходные данные: '/bar/foo.asp' Результат: '\bar\foo.asp' fullWidthEncode Полностью принцип работы этого плагина описан здесь: - http://www.kb.cert.org/vuls/id/739224 Пример: Исходные данные: '/bar/foo.asp' Результат: '/b%uFF61r/%uFF66oo.asp' rndParam Плагин добавляет в строку случайно сгенерированный параметр. Пример: Исходные данные: '/bar/foo.asp' Результат: '/bar/foo.asp?alsfkj=f09'
Attack-плагины sqlmap Плагин предназначен для эксплуатации SQL-инъекций (как простых, так и слепых). Программа sqlmap была написана Bernardo Damele и Daniele Bellucci, за что им большое спасибо. Плагин имеет 6 параметров: - url - method - data - injvar - equAlgorithm - equalLimit osCommandingShell Плагин использует уязвимость удалённого выполнения команд и возвращает командную строку на атакованном сервере. Имеет 7 параметров: - changeToPost - url - method - injvar - data - separator - generateOnlyOne xssBeef Плагин представляет из себя интерфейс для эксплуатации XSS-уязвимостей с использованием beEF. Имеет 2 опции: - beefURL - beefPasswd Пожалуйста, помните о том что плагин является всего лишь "вызывающим" beEF. Выполните следующие шаги: - Установите beEF - После запуска этого плагина заставьте пройти по опасной ссылке пользователя - Откройте браузер, обратитесь к beEF и управляйте атакованными браузерами. localFileReader Плагин использует уязвимость подключения локальных файлов и позволяет Вам читать любые данные с диска. Запомните, если читать какой-либо файл с помощью функции "include()", то Вы не сможете увидеть исходного кода скриптов, Вы увидите результат их работы. Вы можете использовать команду "list" для того что бы увидеть все файлы находящиеся в текущей директории. 6 опций плагина: - changeToPost - url - method - data - generateOnlyOne rfiProxy Плагин, используя уязвимость удалённого подключения файлов, создаёт на атакуемой машине прокси-сервер и позволяет создать туннель между Вашей машиной и целевой через атакованный хост. Плагин имеет 5 настроек: - listenAddress - proxyPort - httpdPort - proxyPublicIP - rfiConnGenerator remoteFileIncludeShell Плагин эксплуатирует подключение удалённых файлов и возвращает командную строку на атакованном сервере. Эксплуатация уязвимости может происходить двумя путями. Подключаемый файл с шеллом может находится на локальном сервере, где запущен плагин. Или формироваться на другом сайте страдающем XSS-уязвимостью. Оба варианта хорошо работают и возвращают командную строку. Только обратите внимание на то, что при использовании второго варианта доступ с удалённого сервера на уязвимый сайт может быть заблокирован файрволом. У плагина есть 4 опции: - listenAddress - listenPort - useXssBug - generateOnlyOne davShell Плагин использует неправильную настройку webDAV и возвращает командную строку на удалённом сервере. Осуществляется это обычным методом PUT. Плагин просто загружает на сервер шелл ( на языке php, asp и т.д.), проверяет его работоспособность и если всё хорошо возвращает пользователю командную строку. Единственный конфигурационный параметр: - URL (используется только в fastexploit) eval Плагин эксплуатирует уязвимость неправильного использования eval() и возвращает командную строку. Имеет 6 опций: - changeToPost - url - method - injvar - data - generateOnlyOne fileUploadShell Плагин эксплуатирует ошибку небезопасной загрузки файлов на сервер. Через специальную форму на сайте он пытается загрузить шелл (на языке php, asp и т.д.), проверяет работает ли шелл и возвращает пользователю командную строку. Не имеет конфигурационных параметров. sql_webshell Плагин использует SQL-инъекцию (обычную или слепую). Первая программа работающая таким методом была написана Bernardo Damele и Daniele Bellucci, за что им большое спасибо. Плагин имеет 7 конфигурационных параметров: - url - method - data - injvar - equAlgorithm - equalLimit
Output-плагины htmlFile Плагин пишет отчёт о работе фреймворка в HTML-файл. Имеется два параметра: - fileName - verbose Если Вы хотите записывать в отчёт HTTP-запросы/ответы в текстовый файл то Вам лучше использовать textFile. xmlFile Плагин пишет отчёт о работе фреймворка в XML-файл. Имеется один параметр: - fileName textFile Плагин пишет отчёт о работе фрейморка в текстовый файл. Имеется 4 опции: - fileName - httpFileName - verbose - showCaller console Этот плагин пишет отчёт о работе фреймворка в консоль. Плагин имеет одну опцию: - verbose gtkOutput Сохраняет сообщения фреймворка в kb.kb.getData('gtkOutput', 'queue'). Сообщения сохраняются в форме объектов. Этот плагин позволяет сообщаться с gtkUi. Mangle-плагины sed Этот плагин представляет из себя многопоточный редактор для web-запросов и ответов. Имеет 3 опции: - priority - expressions - fixContentLen Потоковое редактирование осуществляется с помощью регулярных выражений указывающих что искать и на что заменять. Вот пример регулярного выражения используемого Sed: - qh/User/NotLuser/ Это выражение указывает плагину на то, что нужно работать с запросом (re[q]uest), а именно - с заголовком ([h]eader). В нём требуется заменить строку "User" на "NotLuser". - sb/[fF]orm/form Здесь поиск будет производиться в ответе (reponse), а именно в его теле ([*b]ody). Заменяться будут слова "form" или "Form" на "form". Если Вы хотите указать много выражений то разделяйте их запятыми.
Discovery-плагины webDiff Смысл плагина в сравнении двух директорий - локальной и удалённой. Идея в том, что бы имитировать работу linux-команды "diff". Плагин имеет 4 параметра: - localDir - remotePath - banUrl - content Он будет считывать файлы внутри "localDir", и запрашивать их в удалённой директории "remotePath". Совпадения и ошибки записываются отдельно и сохраняются. Сравнение содержимого файлов происходит только если параметр "content" установлен в true и их расширение не находится в опции "banUrl". Параметр "banUrl" содержит список расширений, файлы с которыми не нужно проверять. Например, ASP, PHP, и т.д. файлы sitemapReader Плагин ищет файл sitemap.xml и обрабатывает его. Файл sitemap.xml используется администраторами для того чтобы дать поисковому пауку Google больше информации о сайте. При обработке этого файла плагин находит новые ссылки и дополнительную информацию. detectReverseProxy Плагин пытается определить, стоит ли исследуемый хост за прокси-сервером. Суть процедуры проверки состоит в посылке запроса удалённому серверу и анализе заголовков ответа. Если в них найден заголовок "Via" то плагин сообщает о наличие прокси-сервера. phpEggs Плагин пытается найти документированные "пасхальные яйца" в PHP и определить версию интерпритатора на основе их содержимого. Вот примеры "пасхальных яиц": - http://php.net/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 ( PHP Credits ) - http://php.net/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 ( PHP Logo ) - http://php.net/?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 ( Zend Logo ) - http://php.net/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 ( PHP Logo 2 ) spiderMan Плагин представляет из себя локальный прокси-сервер который может быть использован для передачи информации фреймворку о исследуемом приложении в том случае если на сайте много Flash-объектов или Java-апплетов. Когда Вам потребуется исследовать с помощью w3af такое приложение то запускайте этот плагин и используйте браузер, настроенный на работу с локальным прокси-сервером. Плагин будет извлекать информацию из данных передающихся между пользователем и сервером, и искать в них информацю которую можно передать на исследование audit-плагинам. Дополнительно spiderMan поддерживает функцию сохранения cookies приходящих от сервера для будущего использования их другими плагинами. Так что если Вы исследуйте приложение которое передаёт информацию о сессии в cookies то Вам нужно включить этот плагин, авторизоваться и потом уже запускать остальные плагины. Имеется 2 параметра: - listenAddress - listenPort urlFuzzer Плагин пытается найти новые ссылки основываясь на исходящих запросах. Например если исходящий запрос проходит по ссылке - http://a/a.html То плагин запросит: - http://a/a.html.tgz - http://a/a.tgz - http://a/a.zip ... и т.д. Если код ответа на запрос не 404 то плагин рапортует о нахождении архива. Вообщем он ищет резервные копии файлов, исходные коды и т.д. Имеет одну опцию: - fuzzImages userDir Плагин пытается найти домашние директории пользователей основываясь на информации полученной другими плагинами. Например, если запрашиваемый URL - http://test/ И другой плагин нашёл следующие email-аккаунты: - [email protected] - [email protected] То userDir произведёт следующие запросы: - http://test/~test/ - http://test/test/ - http://test/~f00b4r/ - http://test/f00b4r/ Если код ответа на них не 404 error то мы нашли новую ссылку и знаем что такой пользователь существует в системе атакуемого сервера. Так же плагин определяет операционную систему и установленные приложения проверяя особые имена пользователей. findvhost Плагин использует заголовок "Host" для того что бы найти дополнительные виртуальные хосты. Плагин пригодится в ситуации если на одном и том же сервере есть публичных хост и приватный. Тогда, если сервер настроен не правильно, плагин сможет раскрыть приватных хост. Пожалуйста, помните о том что данный плагин не использует никаких технологий связанных с DNS. fingerprint_os Плагин определяет семейство операционной системы через веб-сервер (Windows, Unix, и т.д.). На данный момент алгоритм работы этого плагина очень тривиален, потому что используется только один способ определения: разделитель директорий Windows. Например, если есть адрес http://host.tld/abc/def.html то плагин пробует запросить ссылку http://host.tld/abc\def.html и если ответы на обе из них совпали - на сервере стоит Windows. findBackdoor Плагин ищет веб-шеллы в директории сайта. Например запрашивается ссылка - http://host.tld/w3af/f00b4r.php Тогда плагин проверит следующие адреса: - http://host.tld/w3af/c99.php - http://host.tld/w3af/cmd.php - http://host.tld/w3af/webshell.php ... wordnet Плагин пытается найти новые ссылки с использованием WordNet. Рассмотрим следующий пример. Плагин отловил следующую ссылку: - http://a/index.asp?color=blue Он берёт значение параметра color (blue) и ищет связанные с ним по смыслу слова в базе данных WordNet. Находятся слова "black" и "white". Тогда плагин запрашивает два адреса: - http://a/index.asp?color=black - http://a/index.asp?color=white Если код ответа на эти запросы не 404, и они не имеют одного и того же содержимого, то считается что найдены новые ссылки. Более подробную информацию о WordNet Вы можете найти на http://wordnet.princeton.edu/ zone_h Плагин ищет сайт в базе дефейсов zone-h.org. Это может оказаться полезным т.к. в некоторых случаях, при дефейсе, взломщик сообщает какую уязвимость он использовал. Возможно, она ещё не закрыта. performance_testing К сожалению, описания этого плагина нет. robotsReader Плагин ищет файл robots.txt и обрабатывает его. Файл является разграничителем доступа поисковиков к разным частям сайта. Исследовав его Вы можете узнать много новой информации о сайте sharedHosting Плагин пытается найти дополнительную информацию если приложение установлено на хостинге. Плагин устраивает поиск по запросу "ip:1.2.3.4" где 1.2.3.4 это IP-адрес веб-сервера. Имеет одну опцию: - resultLimit Она указывает сколько ссылок надо обработать из результатов поиска MSN. afd Плагин посылает специальные запросы на удалённый веб-сервер для того что бы выяснить, защищена ли удалённая сеть IPS или WAF. afd определяет сброс TCP-соединений и различные http-фильтры. Например, если afd запрашивает определённую страницу через запрещённый метод, то запрос будет заблокирован фильтром. В случае с приложениями класса "Web Application Firewalls" (типа mod_security) всё немного сложнее. Сначала afd запрашивает страницу без добавления каких-либо параметров. После этого он обращается по тому же адресу, но с дополнительным случайным параметром. Если ответы на эти 2 запроса разные то возможно на стороне сервера находится какой-то фильтр. allowedMethods Плагин ищет доступные HTTP-методы передачи данных. Имеется 2 параметра: - execOneTime - reportDavOnly Если "execOneTime" установлен в true, то проверка осуществляется только обращаясь к корню сайта. Если "reportDavOnly" установлен в true, плагин сообщает только если найдены DAV-методы. Плагин сначала пытается использовать метод OPTIONS для того что бы перебрать все доступные методы. Если этого сделать не удаётся то он использует обычный перебор методов. phpinfo Плагин ищет файлы с "PHP Info" в директориях и под-директориях взятых из найденных ссылок. Файл "PHP Info" содержит информацию о PHP - версии, модулях, системе на которой он стоит и т.д. Например, если будет найден следующий адрес: - http://localhost/w3af/index.php То плагин попытается запросить: - http://localhost/w3af/phpinfo.php - http://localhost/phpinfo.php - ... - http://localhost/test.php?mode=phpinfo importResults Плагин импортирует результаты работы других программ которые ищут ссылки на сайтах. Он считывает указанный ему файл, в котором содержится информация о ссылках разделенная запятой, в формате HTTP-METHOD,URI,POSTDATA. У плагина существует всего один параметр: - input_file findCaptchas Плагин пытается найти различные CAPTCHA-изображения в HTML-документе. Суть его работы в том что бы запросить одну и ту же страницу два раза и сравнить контрольные суммы изображений. Если у какой-то картинки они разные то возможно что это CAPTCHA. serverStatus Плагин ищет "server-status"-файл используемый веб-сервером Apache, и обрабатывает его. После этого плагин может найти новые ссылки или ранее неизвестные домены на этом сервере. oracleDiscovery Плагин ищет некоторые ссылки используемые "Oracle Application Server" и обрабатывает информацию полученную по ним. yahooSiteExplorer Плагин ищет новые ссылки на сайте с помощью "Yahoo Site Explorer". Он производит поиск по фразе "domain.com" и делает запросы по всем найденным ссылкам. У плагина есть всего один параметр: - resultLimit frontpage_version Плагин ищет информационный файл о сервере FrontPage. Если находит, то пытается узнать версию сервера и установленные дополнения. Файл распологается внутри корневой директории. Пример: - http://localhost/_vti_inf.html detectTransparentProxy Плагин пытается обнаружить "прозрачный" прокси-сервер. Процедура обнаружения достаточно проста. Плагин пытается подключиться к диапазону IP-адресов и если все подключения возвращают открытый сокет то на той стороне работает "прозрачный" прокси-сервер. dnsWildcard Плагин запрашивает домены www.site.com и site.com и пытается сравнить результат. Выясняя при этом какой шаблон DNS-конфигураций используется на сайте. webSpider Плагин представляет из себя классического web-паука. Он бродит по сайту и извлекает все ссылки и адреса форм. Имеет 3 опции: - onlyForward - ignoreRegex - followRegex - urlParameter Параметры IgnoreRegex и followRegex могут использоваться для того чтобы показать пауку какие ссылки (не)нужно посещать (типа "logout" или "Перезагрузить устройство"). По умолчанию в опции ignoreRegex ничего не содержится, а followRegex содержит '.*' (следовать по всем ссылкам). Регулярное выражение должно быть совместимым с языком Python. fingerMSN Плагин ищет почтовые адреса в поисковике MSN. Плагин имеет один конфигурационный параметр: - resultLimit Он производит поиск по фразе "@domain.com", запрашивает все найденные ссылки и пытается найти в них почтовые адреса. googleSets Плагин ищет ссылки используя "Google Sets". Имеется 2 параметра: - resultLimit - setResults Вот самый простой пример который демонстрирует работу плагина. Допустим фреймворк нашёл ссылки: - http://a/index.asp?color=blue - http://a/index.asp?color=red Тогда плагин произведёт поиск слов в "Google Sets", связанных со словами "blue" и "red". Результатом этого поиска будет слова "black" и "white". И плагин осуществит следующие запросы: - http://a/index.asp?color=black - http://a/index.asp?color=white Если эти запросы не вернут ошибку с кодом 404 и не будут одинакового содержания, то ссылки добавятся в общую базу. digitSum Плагин пытается найти новые ссылки путём изменения номеров, идущих после основного имени файла. Имеется 2 параметра: - fuzzImages - maxDigitSections Для того чтобы лучше понять работу плагина приведу следующий пример. Возьмём следующую ссылку: - http://host.tld/index1.asp Тогда плагин запросит документы: - http://host.tld/index0.asp - http://host.tld/index2.asp Если сервер ответит не ошибкой с кодом 404, то ссылка подобрана правильно. halberd Плагин пытается обнаружить существование узла балансировки HTTP-нагрузки. domain_dot Плагин ищет неправильную настройку виртуальных хостов отправляя серверу специально сформированный запрос с точкой в конце доменного имени. Например, если сходный адрес http://host.tld/, то плагин запросит http://host.tld./ . В некоторых случаях при неправильной конфигурации сервера атакующий может прочитать исходные коды веб-приложения запрашивая некоторые файлы по такому адресу. Например: - http://host.tld./login.php MSNSpider Плагин ищет новые ссылки на сайте через поискового паука MSN. Имеет один конфигурационный параметр: - resultLimit Так же плагин производит поиск по запросу "@domain.com" и ищет все email адреса на сайте. fingerprint_WAF Плагин пытается опознать ПО класса "Web Application Firewall that". Помните о том что изначально эта программа должны быть обнаружена плагином discovery.afd serverHeader Плагин осуществляет GET-запрос к серверу и извлекает из ответа содержимое заголовка "Server". Затем он его помещает общую базу знаний. Ничего особенного плагин из себя не представляет. Для получения более детальной информации Вы можете использовать hmap-плагин. wsdlFinder Плагин ищет веб-сервисы на сайте запрашивая каждый существующий файл с добавлением "?WSDL" к его имени. pykto Плагин представляет из себя сканнер nikto, портированный на python. Он использует базу данных из nikto (scan_database) для поиска уязвимых ссылок. Плагин имеет семь параметров: - updateScandb - cgiDirs - adminDirs - nukeDirs - dbFile - extra_db_file - mutateTests - genericScan crossDomain Ищет файл crossdomain.xml, который используется Flash, и обрабатывает его. Этот файл представляет собой список доменов, которым разрешён доступ к атакуемому сайту. Исследовав его Вы можете получить больше представлений о взаимоотношении разных доменов с сайтом. fingerPKS Плагин ищет почтовые адреса в PGP PKS серверах. googleSpider Плагин ищет новые ссылки на сайте с помощью Google. Поиск происходит с помощью запроса "site:domain.com" и просмотра всех найденных ссылок. Существует два конфигурационных параметра: - resultLimit - key hmap Плагин опознаёт удалённый веб-сервер, его тип, версию и установленные исправления. Идентификация происходит не только через заголовок "Server". По сути плагин представляет из себя обёртку для hmap Dustin`a Lee Имеется один параметр: - genFpF Если genFpF установлен в true, то будет сгенерирован специальный опознавательный файл для проверяемого веб-сервера. Такие файлы используются для быстрого опознавания серверов. Если Вы сгенерировали новый файл то отправьте его пожалуйста нам на адрес [email protected] и мы добавим его в фреймворк. Обратите внимание на то что hmap самостоятельно соединяется с веб-сервером, не используя при этом настройки w3af (такие как прокси-сервер например). phishtank Плагин проверяет домен в базе phishtank. Если он там есть значит сайт взломан и используется для фишинга. Есть 2 конфигурационных параметра: - dbFile - updateDB fingerGoogle Данный плагин ищет почтовые адреса в Google. Имеется 2 опции: - key - resultLimit - fastSearch Если параметр fastSearch установлен в false, то плагин производит поиск по запросу "@domain.com", обрабатывая затем результат (запрашивая каждую найденную ссылку) и возвращая список найденных E-mail`ов. А если этот параметр установлен в true, то E-mail`ы берутся лишь со страницы результатов поиска. Найденные ссылки при этом не посещаются. dotNetErrors Плагин запрашивает специально сформированные ссылки которые могут вызвать сообщения об ошибках ASP.NET с интересной информацией типа ASP.NET-версии. Вот пара примеров при запросе которых должна быть сгенерирована ошибка. - default|.aspx - default~.aspx archiveDotOrg Данный плагин ищет исследуемый сайт на archive.org и обрабатывает результаты. Позволяет найти новые ссылки. Это машина времени! ghdb Плагин ищет в приложении уязвимости с помощью Google. Имеет 3 параметра: - resultLimit - updateGHDB - key Действие происходит с использованием "google hack database", автором которой является jhonny.