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

Чтобы добиться результатов следует прибегнуть к приемам НЛП. Согласитесь, вероятнее всего человек быстрее нажмет на ссылку ведущую к web страничке, нежели на файл. Наша с вами задача придумать способ загрузить и исполнить приложение на его компьютере. Что, оказывается, весьма несложно сделать...

Многие не имеют опыта такого проникновения на целевой компьютер. Хотя он является, пожалуй, одним из лучших. Это связано с тем, что пользователю не нужно будет подтверждать никакой загрузки файла, а потом еще и вручную его запускать. За него все сделает Internet Explorer.

Как это работает?
Пример действует по достаточно интересной схеме:

загружается как HTML файл
загружает себя как MHTML
Сам HTML файл состоит из двух блоков: первый указывает на наличие некого файла согласно стандартам MHTML и MIME, а второй блок - это HTML. Первый блок для второго является простым текстом, хотя в действительности это файл, зашифрованный в base64. Поэтому при открытии файла срабатывает блок HTML:

<BODY>
<SCRIPT>
function Execute()
{
path=unescape(document.URL.substr(-0,document.URL.lastIndexOf("\")));

document.write( '<body><object style="visibility:hidden" classid="clsid:66666666-6666-6666-6666"
CODEBASE="mhtml:'+path+'\main.html!file:///InternetExplorer.exe"></object>')
}
Execute();
</SCRIPT>

Немного поясню, что именно происходит. При обработке данного документа исполняется скрипт, устанавливающий новый компонент с CLSID(ClassID) 66666666-6666-6666-6666. Исполняемый код для компоненты берется из этого же файла и именно поэтому происходит определение его местоположения (переменная path). Вся разница в том, что открывается он уже как MHTML. Поэтому мы можем обращаться к любому ресурсу, хранящемуся в нем (в данном случае это приложение). Его указание происходит согласно следующей форме записи:

mhtml:имя_html_файла!имя_ресурса

Что касается первого блока, то его заголовок должен выглядеть примерно следующим образом:

MIME-Version: 1.0
Content-Location:file:///InternetExplorer.exe
Content-Transfer-Encoding: base64

В качестве значения Content-Location желательно указать что-нибуть приличное. Эта переменная потом появится в строке состояния Internet Explorer как окончание к тексту "Установка компонента...". Тем более, что именно ее необходимо указывать как имя желаемого ресурса. Далее должен идти бинарный код приложения в формате base64.

Как можно автоматизировать процесс?

Для построения полнофункциональной универсальной утилиты необходимо создать следующую систему:

1 HTML файл, посылающий запрос на сервер с формой хранящей такие данные как:
- атакуемая почта
- содержание письма
- исполняемый файл (используйте <INPUT type=file>)
- содержание HTML файла хранящего исполняемый

2 PERL скрипт, создающий на сервере специально сформированный HTML файл, хранящий исполняемое ПО в base64 и то, что пользователь увидит в броузере. В base64 обычный EXE файл можно конвертировать использовав модуль MIME::Base64:

$encoded=encode_base64($decoded);
$decoded=decode_base64($encoded);

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

Что это нам дает?

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

Вдобавок хочу написать, что человеческая фантазия не имееет границ. Так, совсем недавно мне попалось сообщение о том, что направив пользователя по ссылке hcp://system/DFS/uplddrvinfo.htm?file://c:main.txt можно удалить у него файл c:main.txt, если такой действительно существует. Это значит, что всегда необходимо искать что-то новое, поверьте оно найдется :)