Здравствуйте. Изучая 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" указывает на завершение подбора как только будет подобран пароль к первому аккаунту.