alphasec
PowerShell protip 007f
in 𝕏

Add-Type -t 'public class Foo { public static void Main(){ System.Console.WriteLine("Ciekawe te protipy!");}}';[Foo]::Main() - uruchom kod C# prosto z PowerShella

tty1 · powershell
PS> Add-Type -t 'public class Foo { public static void Main(){ System.Console.WriteLine("Ciekawe te protipy!");}}';[Foo]::Main()
#PowerShell#CSharp#RedTeam#Magic

Cmdlet Add-Type pozwala nam zdefiniować klasę .NET (lub .NET Core) dla bieżącej sesji PowerShella, którą następnie możemy wykorzystywać. Domyślnym językiem programowania dla klasy jest C#, jednak można to zmienić za pomocą parametru -Language. Kod źródłowy podajemy w parametrze -TypeDefinition (co możemy skrócić do -t). W wyniku uruchomienia tego onelinera, otrzymamy:

PS C:\Users\drg> Add-Type -t 'public class Foo { public static void Main(){ System.Console.WriteLine("Ciekawe te protipy!");}}';[Foo]::Main()
Ciekawe te protipy!
PS C:\Users\drg>

Oczywiście możemy to zapisać w bardziej czytelny sposób:

$code = @"
public class Foo {
    public static void Main() {
        System.Console.WriteLine("Ciekawe te protipy!");
    }
}
"@

Add-Type -TypeDefinition $code -Language CSharp
[Foo]::Main()

Przydatne linki

learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/add-type dokumentacja cmdletu Add-Type web ↗ https://lolbas-project.github.io/lolbas/Binaries/Csc/ spojrzenie na csc.exe z punktu widzenia LOLBAS (Living Off The Land Binaries, Scripts and Librariess web ↗
← poprzedni protip 007e ••• Wszystkie protipy następny → protip 0080
// subskrybuj

Nowe protipy prosto na maila.

Mięsiste jednolinijkowce i triki z prawdziwych zleceń. Zero spamu, zero teorii. Wypisujesz się jednym kliknięciem.

wersja newslettera: