Содержание статьи
Подделать адрес отправителя в email
Решение
В первой задаче мы с тобой продолжим познавать различные атаки на электронную почту и обратим внимание на такой вектор, как подмена адреса отправителя в email’ах. Задача старая (еще бы, ведь электронная почта постарше www будет), но своей актуальности совсем не потеряла. Хотя когда-то и ходили разговорчики о том, что в скором времени мы откажемся от почты (да у нас в редакции каждый день ходят — по пять раз на дню отказываемся от этого архаизма :). — Прим. ред.), но, по мне, сейчас email — это один из основных методов «идентификации» пользователей. Хочешь где-то зарегиться — указывай email свой. О применении же подмены адреса я приведу ниже пару жизненных примеров.
WARNING
Вся информация предоставлена исключительно в ознакомительных целях. Лица, использующие данную информацию в противозаконных целях, могут быть привлечены к ответственности.
На самом деле решение этой задачи достаточно простое. Все, что нам понадобится, — это понимание протокола SMTP (TCP, 25-й порт), о котором мы начали говорить в прошлых номерах.
Напомню, что это протокол, который используется для пересылки email’ов. Когда ты отправляешь письмо, твой email-клиент подключается по SMTP к твоему почтовому серверу (MTA), а тот, в свою очередь, подключается к MTA-серверу получателя (из MX DNS записи имени домена).
Для того чтобы подменить адрес отправителя, мы можем обрезать эту схему и сами подключиться к серверу нашей жертвы (получателю). Можно, конечно, и по полной схеме, но тогда тебе нужен сервак и его настройка, а бонусов это никаких не дает.
Итак, сначала мы получаем MX DNS запись сервера нашего получателя. Берем то, что идет после @, и пишем в консоли «nslookup -type=mx target.com».
![Пример спуфинга отправителя для Yandex](https://xakep.ru/wp-content/uploads/2014/11/spoofing.png)
Потом подключаемся к 25-му порту полученного сервера. Для этого можно использовать ncat. После приветствия от сервера мы пишем:
HELO any_text
Это наше приветствие. Текст чаще всего может быть любой (помни, что он сохранится в заголовках).MAIL FROM: any_name@any_host.com
Здесь мы должны указать, от кого письмо. Указывать можно, по сути, любые значения. Но в зависимости от настроек сервера получателя мы можем столкнуться с некоторыми ограничениями. Так, некоторые серверы резолвят имя домена и если оно не существует, то не принимают его (то есть gmail.com подставишь, а asdijasdop.com — нет). Некоторые не разрешают, чтобы имя было эквивалентно имени домена получателя (например, target.com)RCPT TO: victim@target.com
Далее указываем поле, кому адресовано наше письмо.DATA
Указав сверху основные поля, далее мы переходим к телу сообщения, что и озаглавливает команда DATA. Но надо сказать, что она специфическая.Во-первых, здесь можно использовать переносы строк. Фактически, для того чтобы закончить команду DATA, а с ней и все письмо, необходимо чаще всего написать точку (.) и перенос строки (\r\n). Как только ты закрываешь эту команду, сервер прилепляет письму специальный идентификатор, и его можно считать отправленным.
Во-вторых, несмотря на то что DATA как бы определяет тело сообщения, в итоге все данные именно из него попадают в поля «От кого», «Кому» и прочие в почтовом клиенте получателя письма (неважно, веб или десктопное приложение). Поэтому далее мы указываем данные, которые фактически будут отображаться в почтовом клиенте.
To: victim@target.com
Поле «Кому» в почтовом клиенте. В зависимости от настроек сервера может быть и любым. Но для спуфинга, конечно, лучше написать email получателя (то же, что и в RCPT TO).From: any_name@any_host.com
Поле «От кого». Это главное поле, на которое мы хотим повлиять. По идее, значение может быть совсем любым. Также оно может не совпадать со значением в MAIL FROM, что отвязывает нас от привязки к существующим доменам для примера выше.Subject: blah-blah
Поле «Тема». Текст может быть любым.- Далее через строку (два переноса строки) мы пишем текст нашего сообщения, а в конце ставим точку и перенос для окончания команды DATA
Основная фишка заключается в том, что данные из тела письма попадают в почтовый клиент нашей жертвы. Заголовок MAIL FROM на отображение не влияет. Ну и кроме того, сама архитектура почты не дает возможности проверить отправителя.
Конечно, есть целый ряд технологий и методов (типа DMARC) для борьбы со спуфингом, но пока что это плохо работает (имхо). По этому поводу приведу ряд примеров. Я протестировал mail.ru, Yandex и Google на спуфинг по описанному выше методу. Только гугл помещал мои письма в папочку «Спам». С остальными можно было делать все что угодно. Кроме того, мы в Digital Security проводили ряд работ по социальной инженерии и спокойно спуфили адреса: письма всегда доходили и проблем не было. Причем письма можно отправлять и от внутренних адресов. Представь: приходит какому-нибудь бухгалтеру письмо от имени его директора с PDF’очкой — ведь, конечно, он и откроет, и запустит его. Да что там PDF — от «волнения» и экзешник запустит :).
Ну и еще пара примеров о полезности спуфинга. Так, этой осенью кто-то проспуфил пресс-релиз от одной компании в Швеции, что их покупает Samsung. Новостные порталы оперативно распространили информацию, что и отразилось на бирже резким ростом компании. К сожалению для атакующих, ситуацию быстро задетектили и торги аннулировали. Еще один пример будет приведен в следующей задаче.
Кстати, если совсем уж лень писать скрипт для отправки сообщений, то можно воспользоваться каким-нибудь из множества сервисов в интернете. Например, здесь.
![Проспуфленное письмо](https://xakep.ru/wp-content/uploads/2014/11/yandex.png)
Подделать отправителя в Facebook
Решение
Второй пример предыдущей задачи может быть полезен каждому из нас, хотя бы даже и в мирных целях. Итак, с помощью спуфинга в email мы можем отравить сообщение от (почти) любого пользователя любому другому пользователю фейсбука. Все, что нам надо для этого, — это вспомнить ряд его особенностей.
Во-первых, у каждого пользователя ФБ есть почтовый адрес в формате username@facebook.com. Причем username общеизвестен. Он есть в адресе страницы пользователя (facebook.com/username
). И конечно, на этот email можно слать ему сообщения. Они появятся у него во входящих.
Во-вторых, если послать письмо от почтового адреса, привязанного к какому-нибудь аккаунту в фейсбуке, то сообщение будет от имени этого аккаунта.
Таким образом, если мы хотим отправить пользователю аккаунта А сообщение от пользователя Б, то нам нужно только узнать почту пользователя Б (но не фейсбучную).
Все очень просто, как видишь. Фейсбук исправлять это не собирается (да и не особо может). За подробностями отправляю тебя к статье моего друга Сергея Белова.
![Подмена отправителя в Facebook](https://xakep.ru/wp-content/uploads/2014/11/facebook.png)
Определить антивирус через IE
Решение
В одном из последних выпусков «Хакера» я описывал в Easy Hack’е способ, как можно в Internet Explorer’е узнать о существовании какого-то файла в файловой системе с помощью JavaScript’а и встроенного XML-парсера, который поддерживает внешние entity (XXE). Вот, наткнулся на интересный скрипт, с помощью которого можно задетектить антивирус, установленный на компьютер-жертву. Скрипт работает для IE 10-й версии (и выше) и проверяет существование того или иного файла в системе. Но старый метод лучше, так как работает во всех версиях. Так что из этого скрипта можно вытянуть лишь пути по умолчанию для большинства актуальных версий Касперского.
Атаковать принтеры
Решение
Мы с тобой в Easy Hack’e обсуждали уже много различных методов атак на различные системы. Многие из них касались именно корпоративных сетей. Теперь дошел черед и до сетевых принтеров. Если компания становится хоть сколько-то крупной, без сетевых принтеров уже не обойтись. Но казалось бы, что можно сделать с этими глупыми железячками? На деле — достаточно многое.
Итак, для начала давай вспомним и изучим кое-какие особенности этих устройств. Во-первых, они не так глупы. Как и большинство современных девайсов, это устройство представляет собой миникомпьютер. То есть внутри может крутиться даже какая-то знакомая тебе ОС типа линукса, с полной поддержкой TCP/IP-стека. Далее, чаще всего данные девайсы имеют целый арсенал для удаленного их управления: SNMP, Telnet, SSH, веб-сервер для настройки через браузер. И конечно, по умолчанию они либо без пароля, либо с паролем стандартным. В-третьих, большинство из них можно еще и перепрошивать. Вроде ничего не забыл. Перейдем к тому, зачем же и как мы их можем атаковать.
Начнем с малого. С учетом первого пункта — поддержки TCP/IP-стека — мы можем использовать их для сканирования сети в Zombie mode Nmap’а. Напомню тебе, что эта техника представляет собой. У нас есть три хоста: атакующий, сканируемый хост (жертва), принтер. Атакующий отправляет от имени принтера запросы на подключение к портам жертвы. Жертва отвечает принтеру на запрос с теми или иными флагами в зависимости от открытости порта. В зависимости от выставленных флагов внутренние счетчики пакетов принтера меняются. Атакующий, подключаясь к принтеру, может узнать, изменились ли данные счетчики и насколько, и на основе этого сделать вывод: открыт порт или нет. Таким образом, атакующий может незаметно просканировать жертву, а все возможные подозрения будут падать на принтер. Задача еще больше затрудняется для жертвы, так как сканирование можно проводить со множества таких зомби-хостов (принтеров).
Далее. Теперь важно вспомнить, что представляет собой собственно печать на сетевом принтере. В самом обычном виде есть открытый порт у принтера: 9100 TCP. Все, что приходит на него, автоматически печатается на принтере. Таким образом, просто подключившись Ncat’ом к этому порту, мы можем напечатать любой текст. Но это так, для фана. Хотя на деле, когда печать идет с обычного компа, на этот порт посылаются данные в формате PJL или PostScript какой-нибудь, которые позволяют сделать правильную разметку страницы и вставить картинку. То есть тот же плейн-текст, но за счет команд PJL мы можем управлять поведением принтера при печати. Но для наших целей формат фактически не так важен, главное, что все идет плейн-текстом. Таким образом, все, что нам необходимо, — это произвести man-in-the-middle атаку, и мы сможем видеть все, что печатается на принтере. Казалось бы, что здесь такого? Но точно тебе скажу, что многие компании очень боятся утечек информации, а на принтерах печатается много всего конфиденциального. Так что принтер — прекрасное место для шпионажа.
Конечно, для проведения самой атаки мы можем, например, воспользоваться ARP-спуфингом, но есть метод лучше и проще. Так как чаще всего принтеры никто не настраивает и пароль по умолчанию к управляющим интерфейсам подходит, то мы можем подключиться к принтеру, сменить его IP на любой другой (все принтеры позволяют это сделать), а себе установить IP принтера. А с учетом того, что другие компы печатают данные просто подключаясь по определенному IP на 9100-й порт, подмены никто не заметит. Все, что нам надо, — принять эти данные и переслать их на итоговый принтер. И теперь можно сидеть и собирать материалы компании :). Просто, но мощно.
Крис Джон Райли (Chris John Riley) опубликовал небольшой Python-скрипт, который открывает 9100-й порт, сохраняет все задачи по печати (то есть документы) и перенаправляет их на любой другой принтер.
Ну и последнее — перепрошивка. Что это нам даст? Во-первых, можно организовать совсем незаметный шпионаж. Например, мы можем сделать так, что все распечатываемые документы на принтере также будут отправляться по электронной почте. Вообще, в каких-то принтерах вроде это можно сделать и просто настройками в веб-админке. Но самое интересное, что прецеденты такого вида шпионажа были. Раскусили его очень не скоро, при анализе логов почтового сервера. Во-вторых, мы можем получить полностью подконтрольный себе хост и производить все атаки с него.
Если тебя заинтересовала данная тема, то вот пара ссылочек: goo.gl/1wIqfB, goo.gl/8NH4vi.
Атаковать с использованием WebDAV
Решение
Веб — это большая-большая смесь различных технологий на самом деле. Их много-много, и неполоманного тоже много. А есть старое и почти забытое, но которое в определенных ситуациях дает отличный профит. Итак, WebDAV (Web Distributed Authoring and Versioning) — это относительно старая технология, позволяющая, если по-простому, работать с файлами на веб-сервере. Мы можем закачивать файлы, искать, перемещать их, используя возможность только веб-сервера. Получается некий аналог файловой системы. Хотя, с другой стороны, WebDAV — это не совсем доступ именно к файлам, так как это могут быть и «виртуальные» файлы и директории. Но для наших целей (атака) это не настолько важно.
Скорее здесь интересней то, что WebDAV — расширение протокола HTTP. То есть в том же виде HTTP-запросов, который мы знаем, передаются WebDAV-команды и их «параметры». Метод HTTP-запроса (GET) является командой, например PROPFIND, а параметры передаются в теле запроса чаще всего в XML-формате. По картинке будет понятно.
![Пример работы команд WebDAV](https://xakep.ru/wp-content/uploads/2014/11/propfind.png)
Думаю, необходимо отметить, что браузеры сами по себе не умеют работать с WebDAV’ом. В смысле там нет функционала для просмотра коллекций (файлов) или для их загрузки на сервер. Так что нужно пользоваться сторонним ПО. В винде есть поддержка проводником. Для этого надо зайти в меню «Сервис -> Подключить сетевой диск» и указать полный путь для веб-сервера (вроде http://host.com/webdav_here/
).
О’кей. Идейно разобрались. Что же до атаки? Ну, WebDAV нам сулит две вещи. Во-первых, это дисклоз информации. Так как мы можем производить поиск по файловой системе (не по всей, разумеется), то есть шанс найти что-то, что не должно быть нам доступно. Во-вторых, это возможность заливки файлов. И здесь все может быть очень аппетитно. Как минимум мы можем залить HTML’ку и поиметь хранимую XSS, как максимум (?) — мы можем залить туда шелл и получить полный доступ.
Как же нам это провернуть? Для этого надо понять ряд вещей: поддерживает ли сервер WebDAV и какой доступ у нас есть. Для того чтобы понять, есть ли поддержка, мы можем посмотреть заголовки веб-сервера. Тот же апач сообщает об этом. Кроме того, некоторые веб-серверы поддерживают его по умолчанию (IIS 5.x).
Но поддержка еще ничего нам не дает, потому что мы должны найти директорию веб-сервера, которая с WebDAV’ом. Для того чтобы ее искать, нам потребуется использовать HTTP-метод OPTIONS. Если мы запросим данным методом директорию с WebDAV’ом, то нам выползет список WebDAV-методов, доступных для нее. То есть отсутствие WebDAV-методов в ответе на OPTIONS-запрос к корню веб-сервера еще совсем не означает отсутствие поддержки WebDAV во всех директориях.
![Детектим поддержку WebDAV](https://xakep.ru/wp-content/uploads/2014/11/options.png)
Далее, если мы ее обнаружили, то мы можем использовать команду PROPFIND или SEARCH для поиска имеющихся файлов на сервере. Но тут нас может ждать первая преграда — аутентификация. К сожалению, очень на многих веб-серверах при настройке WebDAV это одно из необходимых условий. Брутфорс и пароли по умолчанию, конечно, в помощь. Когда мы найдем необходимый файл, то спокойно можем его качать (используется обычный GET).
А как же с загрузкой файлов? Здесь тоже все отчасти просто. Используется метод PUT для закачки файлов. Но есть два существенных ограничения. Во-первых, чаще всего мы не можем писать в любую директорию. На это у директории должны быть соответствующие права. Но главное, насколько я знаю, невозможно понять, для какой директории есть права на запись, а для какой — нет. То есть тот же OPTIONS будет един для всех. С другой стороны, мы просто можем потыкаться везде PUT’ом. Во-вторых, часто имеется список расширений, которые можно загружать. Да-да, не только мы умные :).
Так вот, чтобы четко протестить веб-сервер на предмет WebDAV, необходимо просканить все директории с помощью OPTIONS-метода (тлз отдельных не видел, а модуль в метасплоите проверяет лишь корень веб-сервера, так что рукописный скрипт или Burp тебе в помощь). А после этого каждую из найденных — на возможность загрузки в нее различных страшных файлов. Вот под это есть одна тулзенка — DAVTest. Она вполне удобна для тестирования. Создает рандомные имена файлам и папкам, загружает с различными расширениями, подчищает за собой. Кроме того, может проверить олдскульный трик: закачать файл с одним расширением, а потом его переименовать. Аналогичные модули есть и в Metasploit’е.
Надеюсь, прочтенное наполнило тебя энтузиазмом и жаждой жизни! Кстати, если тебя интересуют какие-то виды атак или технологии, о которых бы ты хотел узнать, — пиши на почту.
И успешных познаний нового!