Атака на некоторые уязвимые веб-приложения Vulnhub. Взлом и эксплуатация уязвимостей

Всех приветствую читатели (и не только читали) хабра!
В моей сегодняшней статье я затрону анализ защищенности веб-приложений и некоторые способы атаки на них
Но для начала уточню пару моментов

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

Правовая информация:

Данная статья создана исключительно в ознакомительных/образовательных/развивающих целях.
Автор статьи не несет ответственности за ваши действия.
Автор статьи ни к чему не призывает, более того напоминаю о существовании некоторых статей в уголовном кодексе РФ, их никто не отменял:
УК РФ Статья 272. Неправомерный доступ к компьютерной информации
УК РФ Статья 273. Создание, использование и распространение вредоносных компьютерных программ
УК РФ Статья 274. Нарушение правил эксплуатации средств хранения, обработки или передачи компьютерной информации и информационно-телекоммуникационных сетей

Итак приступим
В своих примерах я буду использовать уязвимые веб-приложения на докер-контейнерах
Для начала необходимо установить сам докер. В линукс это можно введя в терминал команды:

sudo apt update; sudo apt install docker-compose

Докер — также является средой виртуализации, отличие его от например virtualbox лишь в том, что бокс поднимает полноценную операционную систему, докер же поднимает все програмное обеспечение (обычно это серверные программы) на сетевом интерфейсе

Теперь об уязвимых машинах
Скачать их можно здесь:
https://github.com/vulhub/vulhub

Это целый архив уязвимых машин для докер, я разберу лишь наиболее успешные примеры которые были выполнены мной (хотя примеры которые я затрону в статье не единственные, я смог проэксплуатировать уязвимости и в других машинах). Хочу сказать сразу, что для каждой уязвимой машины в папке (а они лежат в отдельных папках) лежат очень краткие инструкции взлома, файлы под названиями README.md. Правда зачастую эит инструкции настолько краткие и невнятные, что приходится сидеть иногда очень долго чтобы разобрать их. К тому же все инструкции написаны на анлийском (что естественно), а некоторые вообще на китайских иероглифах. Короче говоря очень непросто зачастую ими пользоваться.

Суть всех примеров (а их будет три в данной статье) сводится к следующему алгоритму:

  1. Запуск виртуальной машнины (уязвимого веб-приложения) в сетевом интерфейсе

  2. Поиск ip-адреса локального хоста, бриджа (бридж-сетевой мост, некоторые машины в примерах ниже будут на бриджах) в сетевом интерфейсе. Сканирование цели

  3. Энумерация. Перечисление всех файлов и папок на уязвимой машине, проще говоря перечесление всех возможных адресов. Данный пункт в приведенных примерах будет не везде, поэтому следующий

  4. Эксплуатация уязвимости. Либо ее обнаружение без эксплуатации. Тут примеров и техник как и программ масса

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

Теперь перейдем к практике

1 Первая машина назывется bash

Уязвимость CVE-2014–6271

Поясню: CVE (англ. Common Vulnerabilities and Exposures) — база данных общеизвестных уязвимостей информационной безопасности (https://ru.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures)

На сайте https://www.exploit-db.com/ как раз представлены различные уязвимости и эксплойты.

Вернемся к примеру. Заходим в папку где лежит докер контейнер (там находится файл docker-compose.yml), открываем в папке терминал, и собираем и запускаем уязвимую машину на докере командами:

sudo docker-compose build
sudo docker-compose up -d

e6c6e3dcad072cd40c7e504cf4fa3d15.png

Следующим делом проверяем что запущенно на интерфейсе командой

ifconfig

8875299037db14119b9ff3d952046215.png

Важно проверить все мосты и локалхост (127.0.0.1). В моем примере данная машина поднялась на сетевом мосту (далее бридж). Иногда машина поднимается на localhost — 127.0.0.1, но у меня произошла какая то ошибка при запуске машин которые я поднимал до этого и виртуальные машины стали подниматься на бриджах, хотя это мне и не помешало

Далее сканируем ip

nmap 172.24.0.1

21ab19adea05280406377b7db5674f56.png

Видим отфильтрованный порт 8080. Заходим в браузер по адресу 172.24.0.1:8080 (http://172.24.0.1:8080). Меня встретил интерфейс апаче на дебиан

e51f254c2db9cf04b5da54046aaa783d.png

После чего в данном примере я решил провести энумерацию по данному адресу. Хоть она не дала особых результатов, но для практики использования инструментов анализа веб-приложений я решил порактиковать (так сказать «набить руку»). Энумерация это процесс перечисления папок и файлов на адресе. В Kali Linux имеются инструменты энумерации такие как dirb, dirbuster и другие. Но я предпочитаю использовать инструмент dirsearch. В Kali Linux данный инструмент устанавливается командой

sudo apt install dirsearch

Преступим к энумерации

dirsearch -u http://172.24.0.1:8080

7124b758a3b02f15dbc2a73891e10541.png

Кстати говоря для энумерации хорошо подходит инстурмент zaproxy. Это аналог burp suite только с открытым исходным кодом. Чем хорош данный инструмент — он прост в использовании, достаточно только открыть программу зайти в «быструю атаку» ввести адрес домена и нажать «attack» как программа прошерстит практически весь адрес и создаст древо каталогов и файлов на машине. Запросто найдет куки администратора на машине, если таковые имеются. На одном изтасков CTF было именнотакое задание. Zaproxy мне помог решить задание указав на куки админа которая являлась строкой зашифрованной в base64 (которая и была флагом ответом к таску). Кроме того, программа автоматически ищет уязвимости и имеет множество встроенных модулей и векторов атаки. Но в русскоязычном сегменте интернета я нашел очень мало информации оданной программе. Установить ее в дебиан-подобные дистрибутивы так же легко:

sudo apt install zaproxy

Атакуем http://172.24.0.1:8080

c0c197b21384567c4466cc3c91eaf610.pngefcdebc911d73a83c24a8f4f0530007c.png010809398be7f782cb826879694bc3a1.pngfaa8d4f40419c378be36b3848a5db05b.pnge3866e675d694797329e33a353a34aae.png

Как я и говорил особого результата энумерация не дала. В первом случае с программой dirsearch 403, во втором случае нужных мне вайлов не получилось найти.

Далее я зашел в инструкцию уязвимой машины. Но домене есть два файла интересующие меня safe.cgi, victim.cgi. Проверяем при помощи curl

curl http://172.24.0.1:8080/safe.cgi
curl http://172.24.0.1:8080/victim.cgi

8f98e193f488cfc015aeb89c02080631.png

Видно что ответ сервера 200, а не 403, 404. Следовательно такие файлы есть и данный адрес существует. А далее идет процесс эксплуатации уязвимости. Эксплуатировать уязвимость можно при помощи инстумента burp suite

Запустим программу, перейдем во вкладку прокси, включим перехват пакетов intercept on и откроем браузер

d5afbecb8f27a9c08a34522a8934a24f.png

В браузере введем адрес http://172.24.0.1:8080/safe.cgi нажмем enter

b47492202ed44c8884398e4a1de66659.png

После чего возвращаемся в burp нажмем правой кнопкой мыши по перехваченному пакету и нажимаем скинуть в репитер (send to repeater)

23554694cb34d56e3cce8d2d18948f34.png

В репитере пробуем сменить юзер агент (user agent). В данном примере уязвимость эксплуатируется именно таким образом. Пробуем сменить юзер агент со значений версии браузера и ОС на команду, которая должна выполниться на уязимой машине:

() { foo; }; echo Content-Type: text/plain; echo; /usr/bin/id

a28ecb10dbdad1358bb51be943c1e4ac.png75ce6551ca2017bac7cc80788455a0de.png

Нажимаем скинуть send

21c04c6368ee70963565c5ccce888e6e.png

Для файла http://172.24.0.1:8080/safe.cgi изменений не наблюдается. Проделаем все тоже самое, но с http://172.24.0.1:8080/victim.cgi

ec853ac87bc00ce4e74ff2bfb1e2eb38.png5b1f38d5e305f45c3fb216dc7d0b2a25.png2b9bd0e4887c0a873838d636d140856a.png0ca635e99f864360f3b51440e3cfb1f9.png

Также в юзер агент вписываем () { foo; }; echo Content-Type: text/plain; echo; /usr/bin/id

6b21e3d2c3aa78b1a1dc133ef4e4c8f9.png

Отправляем

973910ecd3950c9db08dcb1e030c9b55.png

И видим ответ сервера

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

Это уязвимость типа «шеллшок» shellshock — позволяет выполнить на серевере некоторые команды злоумышленника.

2 Вторая машина openssl

Openssl — это библиотека которая позволяет безопасно соединятся серверу — клиенту через шифрование.

В предидущей папке (bash) остановим прежнюю виртуальную машину командой

sudo docker-compose down

И так необходимо делать с каждой машиной. Далее переходим в папку openssl и выполняем все те же действия в терминале:

sudo docker-compose build
sudo docker-compose up -d

В этом примере машина поднялась не на бридже, а на локальном хосте 127.0.0.1 сканируем его

nmap 127.0.0.1

d76c8e07e971614b63b8ab67ee2eecdb.png

Видим два открытых порта, заходим в браузер по адресу 127.0.0.1:8080 и 127.0.0.1:8443

c6167ef32956a41c394e10e30c1c89b5.pngfffb585578e900f6cb2cfc81b7b831f0.png

В папке где находится машина, есть скрипт на питоне ssltest.py. Запустим его

python3 ssltest.py -h

5c4a5b2045d1e78bccc27eef9696bdbd.png

Запустим скрипт, но запустим эксплоит на оба открытых порта сервера, которые указад нам nmap

python3 ssltest.py 127.0.0.1 -p 8443
python3 ssltest.py 127.0.0.1 -p 8080

cc78295036d1c6281d858134ae742ac5.pngc1bf1801798fb77a4e0d26a2706b333f.png303e1b12cee687688add40323900945b.png

Очевидно что с порта 8443 прилетел «хекс». И надпись выделенная на рисунке

a82e2318f22f51fd5b31d89b2ec3f1db.png


говорит сама за себя

Попробуем то же самое с гуглом google.com:

python3 ssltest.py google.com -p 80
python3 ssltest.py google.com -p 443

38749e92438e3dd81725b906fdf9dd2c.png

Как видно из вывода сервер защищен от уязвимости. Но в моем примере уязвимость обнаружена.

3 Третья папка и уязвимость rsync

Выполняем все те же действия — роняем предидущую машину, заходим в папку с новой, поднимаем все теми же командами sudo docker-compose build; sudo docker-compose up -d

Но эта уязвимость самая интересная из всех трех

13c6318013fc8a7e0197ebde0d9d80ea.png

В этом примере виртуальная машина поднялась на бридже с ip 172.23.0.1

f00a5daafa1f355ba4b090f4747ec454.png

Сканируем nmap

nmap 172.23.0.1

Видим фильтрованный порт 873/tcp с запущенной службой rsync. Rsync — утилита передачифайлов в linux/Unix-подобных системах

ecbb3c0c469ba325956f64f4d57aba62.png

Далее в терминале вводим следующее

rsync rsync://172.23.0.1:873

c9df223799555f086699ddaf02dc1301.png235b9c256c1e9a91f28d275eae84458f.png

Сервер вернул директории. Одна из них src

Далее я запросил помощьутилиты — rsync --help

bc6601bf4691b64d507ed0a9b0146632.png

Далее я зашел в директорию выполнив в терминале

rsync rsync://172.23.0.1:873/src
rsync rsync://172.23.0.1:873/src/etc
rsync rsync://172.23.0.1:873/src/etc/passwd

6fe062916f2b11a3958194724c342e6f.png3400528333abf800dda450c8931fb0aa.png

Далее я скопировал файл /etc/passwd уязвимой машины в текущую директорию «родной» ОС Kali Linux командой в файл passwd (в текущей директории).

rsync rsync://172.23.0.1:873/src/etc/passwd -k passwd

Проверил содержимое текущей директории командой ls и убедился что файл скопирован. Вывел содержимое файла

cat passwd

a3e95ac760a5f3047ad2098529613ba9.png

В терминале вывело содержимое файла passwd «родной» машины, который был скопирован с уязвимой машины с помощью rsync. Теперь о том что это за файл. /etc/passwd — файл, содержащий в текстовом формате список пользовательских учётных записей (аккаунтов). Является первым и основным источником информации о правах пользователя операционной системы. Существует в большинстве версий и вариантов UNIX-систем. Обязан присутствовать в POSIX-совместимой операционной системе. (https://wiki.ublinux.ru/ru/Использование/Настройка/Вводная_информация)

Этот файл должен находится под тремя замками за семью печатями.

Но я получил доступ к файлу благодаря уязвимости, эксплуатация прошла успешно. Таким образом, я подробно разобрал эксплуатацию уязвимостей трех машин.

Ну, а на сегодня все! До новых встреч!

© Habrahabr.ru