Россия, Москва, Московский Государственный Открытый Университет, 2007 |
Средства взлома Web-приложений Hacking Tools
Пример из жизни. Альтернатива 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.