{"id":477,"date":"2023-04-17T12:55:12","date_gmt":"2023-04-17T12:55:12","guid":{"rendered":"https:\/\/blog.it-guru.at\/?p=477"},"modified":"2023-04-17T13:06:18","modified_gmt":"2023-04-17T13:06:18","slug":"bypass-powershell-constrained-language-mode","status":"publish","type":"post","link":"https:\/\/blog.it-guru.at\/?p=477","title":{"rendered":"Bypass Powershell Constrained Language Mode"},"content":{"rendered":"\n<p>In vielen Organisationen wird aus Sicherheitsgr\u00fcnden der Constrained Language Mode (kurz CLM) f\u00fcr Powershell aktiviert und ganz oft per GPO (Group Policy Objekt) unternehmensweit voreingestellt. Dadurch werden viele Powershell-Befehle die auch von Angreifern verwendet werden, deaktiviert und k\u00f6nnen nicht mehr verwendet werden. Durch das Anwenden der Policy wird die Umgebungsvariable &nbsp;__PSLockDownPolicy gesetzt. Es kann aber nicht verhindert werden, dass der Wert dieser Variable lokal \u00fcberschrieben wird.<\/p>\n\n\n\n<p>Dazu kommt jetzt noch zus\u00e4tzlich, dass alle Pfade die &#8222;system32&#8220; enthalten, im Unrestricted Language Mode ausgef\u00fchrt werden. Es reicht also aus das Powershell-Skript in system32.ps1 umzubenennen. Danach liefert der Aufruf von Get-ExecutionPolicy den Wert Unrestricted.<\/p>\n\n\n\n<p>Zum Testen dieses Verhaltens kann ein einfaches Powershell-Skript verwendet werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>check-mode.ps1\n\n$mode = $ExecutionContext.SessionState.LanguageMode\nWrite-Host $mode<\/code><\/pre>\n\n\n\n<p>Durch Aufruf dieses Skript-Datei von verschiedenen Speicherorten aus, kann schnell festgestellt werden, dass sobald &#8222;system32&#8220; im Pfad vorkommt, der Full Language Mode verwendet wird.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PS C:\\> .\\check-mode.ps1\nConstrainedLanguage\nPS C:\\> cd .\\system32\nPS C:\\system32> .\\check-mode.ps1\nFullLanguage <\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>In vielen Organisationen wird aus Sicherheitsgr\u00fcnden der Constrained Language Mode (kurz CLM) f\u00fcr Powershell aktiviert und ganz oft per GPO (Group Policy Objekt) unternehmensweit voreingestellt. Dadurch werden viele Powershell-Befehle die auch von Angreifern verwendet werden, deaktiviert und k\u00f6nnen nicht mehr verwendet werden. Durch das Anwenden der Policy wird die Umgebungsvariable &nbsp;__PSLockDownPolicy gesetzt. Es kann aber [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[16,12],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.it-guru.at\/index.php?rest_route=\/wp\/v2\/posts\/477"}],"collection":[{"href":"https:\/\/blog.it-guru.at\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.it-guru.at\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.it-guru.at\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.it-guru.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=477"}],"version-history":[{"count":3,"href":"https:\/\/blog.it-guru.at\/index.php?rest_route=\/wp\/v2\/posts\/477\/revisions"}],"predecessor-version":[{"id":480,"href":"https:\/\/blog.it-guru.at\/index.php?rest_route=\/wp\/v2\/posts\/477\/revisions\/480"}],"wp:attachment":[{"href":"https:\/\/blog.it-guru.at\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.it-guru.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.it-guru.at\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}