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

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


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


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

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

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

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


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

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

Было:


Стало:


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


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


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


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

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


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


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


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

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


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


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

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

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


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

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

Комментарии (3)



  1. Tyrauriel
    29.04.2019 16:28

    про 7-zip не забудьте написать.

    P.S.
    1) Это нормально что дистрибутив 7-zip не подписан цифровой подписью?
    2) Чем отличаются дистрибутивы 7-zip скачанные с 7-zip.org и с sourceforge.net/projects/sevenzip


    1. Mur81
      29.04.2019 17:38

      Вы так про различия написали, что я аж напрягся. Но нет, проверил — нет различий (в .msi по крайней мере).
      Отсутствие ЭЦП конечно напрягает, это да.