Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019

в 9:18, , рубрики: ctf, neoquest, neoquest2019, vulnerability, winrar, Блог компании НеоБИТ, Занимательные задачки, информационная безопасность
Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 1

Как часто нам на помощь приходит старый добрый WinRAR! Из раза в раз он заботливо и бескорыстно распаковывает наши архивы, и запаковывает их обратно. Но мы стали старше, и теперь хочется попробовать что-то поинтереснее, правда? А тут как раз нашли 19-летнюю уязвимость, позволяющую сохранять извлеченное из архива вредоносное ПО в произвольное место. Посмотрим, каким образом это можно осуществить, на примере задания №9 из online-этапа NeoQUEST-2019.

По легенде у нас есть два сервера. Первый сервер (http://213.170.100.213:800/) позволяет отправить подарок Пандоре, которая обожает распаковывать все неопознанные предметы, попавшиеся ей на глаза. Формат «подарка» известен: сервер загружает только rar-архивы. Загружаем произвольный rar-архив. В ответ видим следующее:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 2

Пока не очень похоже, чтобы Пандору наш архив заинтересовал. Попробуем узнать чуть больше о сервере с помощью nmap:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 3

Теперь нам известно, что первый сервер:

  • позволяет загружать rar-архивы;
  • поднят на ОС Windows.

Win + rar = WinRar! Вероятно, архивы обрабатываются именно этим архиватором, в котором (точнее – в библиотеке UNACEV2.DLL) нашли уязвимость, существующую уже 19 лет. Эта «дырка» позволяет распаковать содержимое архива в произвольную директорию, независимо от того, куда извлекает файлы пользователь. Находим подробное описание механизма эксплуатации уязвимости здесь. Приступаем к изготовлению архива, который гуляет сам по себе решает сам, куда ему распаковаться.

Первым делом обзаводимся утилитой WinAceArchiver. По инструкции, приведенной по ссылке выше, создаем примитивный архив, содержащий файл hello.txt. В WinAceArchiver нажимаем на кнопку «Create», на вкладке «Options» выставляем «Compression» в значение «Store», затем возвращаемся на вкладку «Selection», выбираем файл hello.txt, указываем путь сохранения нашего архива и — самое главное! — выставляем опцию «store full path»:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 4

Далее нажимаем на кнопку «Add» и получаем архив Hello.ace. Осталось немного подкорректировать путь и подправить контрольную сумму. В этом нам поможет любой бинарный редактор и скрипт acefile.py, который услужливо сам посчитает актуальные значения.

Чтобы проэксплуатировать уязвимость, необходимо перед абсолютным путем файла добавить метку тома, которая будет отброшена архиватором. Тогда остальной путь будет принят за «безопасный» относительный. Итак, открываем редактор и модифицируем путь таким образом, чтобы он начинался с C:C:.

Было:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 5

Стало:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 6

Теперь сверим контрольные суммы с помощью скрипта acefile.py:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 7

Исправим значение на актуальное:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 8

Осталось только переименовать наш архив в Hello.rar. Готово. Проверим, как Пандоре такой подарок?

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 9

Отлично! Ожидания совпали с действительностью, и WinRar обработал архив именно так, как нам нужно. Осталось выяснить одно: какой именно путь нам необходим?

По легенде мы знаем, что сокровища можно «посмотреть» на втором сервере (http://213.170.100.213:900/). Каким образом это сделать легче всего? Конечно, запустив свой php-скрипт, который произведет, например, листинг корневой директории сервера. Подтверждаем свою догадку:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 10

Прекрасно, сервер готов исполнить наш php-скрипт! Пришло время разбираться, куда именно необходимо этот скрипт положить. Пока мы знаем, что сервер поднят на Windows — следовательно, скорее всего путь начинается с C:. А дальше? Узнаем немного больше про сервер с сокровищами.

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 11

На сервере поднят nginx. Наверняка окружение Пандоры следует последнему слову технического прогресса (во всем, что не касается архиваторов) и использует последнюю версию nginx, то есть 1.15.9 (проверить можно здесь). Осталось добавить рутовую директорию сервера, указанную в дефолтном конфигурационном файле nginx:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 12

Результат выглядит следующим образом: C:nginx-1.15.9html. Что ответит Пандора в этот раз?

Доступ к директории запрещен… Но ведь мы не могли ошибиться! Мы точно на верном пути, так как доступ запрещен, но директория-то существует. Вероятно, есть что-то, о чем мы пока не знаем. Продолжим собирать информацию о сервере с помощью сканера директорий:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 13

Ага, вот оно. Директория admin/ звучит многообещающе. Попробуем отправить Пандоре ace-архив, в котором в роли абсолютного пути выступает C:nginx-1.15.9htmladmin:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 14

Успех! Наконец-то исполняем наш скрипт, в котором осуществляется листинг корневой директории сервера: 213.170.100.213:800/admin/ test34852ED2-8996-4F81-A919-30B6FE9F03AB.php. Скрипт может иметь примерно такой вид:

<?php 
if ($handle = opendir('C:nginx-1.15.9html')) 
{
    while (false !== ($entry = readdir($handle))) 
    {
        if ($entry != "." && $entry != "..") 
        {
            echo "$entry <br>";
        }
    }
    closedir($handle);
}
?>

Результат выглядит следующим образом:

Ящик Пандоры: разбираем эксплуатацию уязвимости WinRAR на примере задания NeoQUEST-2019 - 15

Эврика! Пандорика! Аналогичным образом посмотрим, какое «сокровище» таит в себе pandorica/ и увидим долгожданный key.txt, прочитать который уже не составляет никакого труда. Done!

В ближайшем будущем выйдут статьи с разборами оставшихся нескольких заданий. А еще совсем скоро состоится «Очная ставка» NeoQUEST 2019! Все новости — на сайте мероприятия https://neoconf.ru/, не пропустите!

Автор: NWOcs

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js