mirror of
https://github.com/nettitude/PoshC2
synced 2026-06-08 16:22:47 +00:00
286 lines
7.3 KiB
PowerShell
286 lines
7.3 KiB
PowerShell
|
|
$PoshC2DockerImage="m0rv4i/poshc2"
|
|
|
|
Function Build-PoshC2DockerImage {
|
|
<#
|
|
.SYNOPSIS
|
|
|
|
Builds the PoshC2 Docker image from the PoshC2 installation at the provided path.
|
|
|
|
Author: @m0rv4i
|
|
License: BSD 3-Clause
|
|
Required Dependencies: Docker Install
|
|
Optional Dependencies: None
|
|
|
|
.DESCRIPTION
|
|
|
|
A simple wrapper around the docker build command which specifies the tag name.
|
|
|
|
.PARAMETER PoshC2Dir
|
|
|
|
Specifies the path to the PoshC2 installation which will be built.
|
|
|
|
.PARAMETER NoCache
|
|
|
|
A switch which specifices that the image should be built without using any cached layers in Docker.
|
|
|
|
.EXAMPLE
|
|
|
|
Build-PoshC2DockerImage -PoshC2Dir C:\PoshC2 -NoCache
|
|
#>
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$PoshC2Dir,
|
|
[switch]$NoCache
|
|
)
|
|
|
|
Write-Verbose "[+] Ensure .sh files use LF instead of CRLF"
|
|
Get-ChildItem -Path $PoshC2Dir -File -Recurse | Where-Object {$_.Extension -eq '.sh'} | ForEach-Object {
|
|
$Content = Get-Content -Raw -Path $_.FullName
|
|
$Content -Replace "`r`n","`n" | Set-Content -Path $_.FullName -NoNewline -Force
|
|
}
|
|
|
|
If($NoCache) {
|
|
docker build -t $PoshC2DockerImage $PoshC2Dir --no-cache
|
|
} Else {
|
|
docker build -t $PoshC2DockerImage $PoshC2Dir
|
|
}
|
|
}; Set-Alias posh-docker-build Build-PoshC2DockerImage
|
|
|
|
Function Clean-PoshC2DockerState {
|
|
<#
|
|
.SYNOPSIS
|
|
|
|
Cleans the Docker cache to free space.
|
|
|
|
Author: @m0rv4i
|
|
License: BSD 3-Clause
|
|
Required Dependencies: Docker Install
|
|
Optional Dependencies: None
|
|
|
|
.DESCRIPTION
|
|
|
|
A simple wrapper around the Docker system prune command which prints a message and prompts for
|
|
confirmation before cleaning all images & containers in the Docker cache - including none PoshC2 items.
|
|
|
|
The Force flag can be added to skip the check.
|
|
|
|
.PARAMETER Force
|
|
|
|
A switch which skips the confirmation prompt.
|
|
|
|
.EXAMPLE
|
|
|
|
Clean-PoshC2DockerState
|
|
#>
|
|
[CmdletBinding()]
|
|
Param(
|
|
[switch]$Force
|
|
)
|
|
|
|
If($Force){
|
|
docker system prune -f
|
|
Return
|
|
}
|
|
|
|
Write-Output "Do a full docker system prune, cleaning up all unused images & containers?"
|
|
Write-Output "*** This includes anything none-PoshC2 related. ***"
|
|
|
|
$confirmation = Read-Host "Would you like to do a clean? y/N"
|
|
|
|
if ($confirmation -eq 'y' -or $confirmation -eq 'Y') {
|
|
docker system prune -f
|
|
}
|
|
}; Set-Alias posh-docker-clean Clean-PoshC2DockerState
|
|
|
|
Function Start-PoshC2DockerServer {
|
|
<#
|
|
.SYNOPSIS
|
|
|
|
Runs the PoshC2 C2 Server in Docker.
|
|
|
|
Author: @m0rv4i
|
|
License: BSD 3-Clause
|
|
Required Dependencies: Docker Install
|
|
Optional Dependencies: None
|
|
|
|
.DESCRIPTION
|
|
|
|
Runs the PoshC2 C2 Server in Docker.
|
|
|
|
.PARAMETER PoshC2Dir
|
|
|
|
Specifies the path to the PoshC2 installation which will be built.
|
|
|
|
.PARAMETER LocalPoshC2ProjectDir
|
|
|
|
The local path that is/will be used as the Project Directory for PoshC2.
|
|
|
|
.PARAMETER PoshC2Port
|
|
|
|
The Port that the PoshC2 server binds to, defaults to 443.
|
|
|
|
.PARAMETER DockerTag
|
|
|
|
The tag of the Docker container to use, defaults to 'latest' (master)
|
|
|
|
.EXAMPLE
|
|
|
|
Start-PoshC2DockerServer -PoshC2Dir "C:\PoshC2" -LocalPoshC2ProjectDir "C:\PoshC2_Project"
|
|
#>
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$PoshC2Dir,
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$LocalPoshC2ProjectDir,
|
|
[int]$PoshC2Port = 443,
|
|
[string]$DockerTag = "latest"
|
|
|
|
)
|
|
|
|
docker run --rm -p "$("$($PoshC2Port):$($PoshC2Port)")" -v "$("$($LocalPoshC2ProjectDir):/var/poshc2")" "$($PoshC2DockerImage):$($DockerTag)" /usr/local/bin/posh-server
|
|
}; Set-Alias posh-server Start-PoshC2DockerServer
|
|
|
|
Function Start-PoshC2DockerHandler {
|
|
<#
|
|
.SYNOPSIS
|
|
|
|
Runs the PoshC2 ImplantHandler in Docker.
|
|
|
|
Author: @m0rv4i
|
|
License: BSD 3-Clause
|
|
Required Dependencies: Docker Install
|
|
Optional Dependencies: None
|
|
|
|
.DESCRIPTION
|
|
|
|
Runs the PoshC2 ImplantHandler in Docker.
|
|
|
|
.PARAMETER PoshC2Dir
|
|
|
|
Specifies the path to the PoshC2 installation which will be built.
|
|
|
|
.PARAMETER LocalPoshC2ProjectDir
|
|
|
|
The local path that is/will be used as the Project Directory for PoshC2.
|
|
|
|
.PARAMETER User
|
|
|
|
The user to login as in the ImplantHandler.
|
|
|
|
.PARAMETER DockerTag
|
|
|
|
The tag of the Docker container to use, defaults to 'latest' (master)
|
|
|
|
.EXAMPLE
|
|
|
|
Start-PoshC2DockerHandler -PoshC2Dir "C:\PoshC2" -PoshC2ProjectDir "C:\PoshC2_Project" -User CrashOverride
|
|
#>
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$PoshC2Dir,
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$LocalPoshC2ProjectDir,
|
|
[string]$User = "",
|
|
[string]$DockerTag = "latest"
|
|
)
|
|
|
|
docker run -ti --rm -v "$("$($LocalPoshC2ProjectDir):/var/poshc2")" "$($PoshC2DockerImage):$($DockerTag)" /usr/local/bin/posh -u "$User"
|
|
|
|
}; Set-Alias posh Start-PoshC2DockerHandler
|
|
|
|
|
|
Function Start-PoshC2DockerProject {
|
|
<#
|
|
.SYNOPSIS
|
|
|
|
Runs the PoshC2 Project Script in Docker.
|
|
|
|
Author: @m0rv4i
|
|
License: BSD 3-Clause
|
|
Required Dependencies: Docker Install
|
|
Optional Dependencies: None
|
|
|
|
.DESCRIPTION
|
|
|
|
Runs the PoshC2 Project Script in Docker.
|
|
|
|
.PARAMETER PoshC2Dir
|
|
|
|
Specifies the path to the PoshC2 installation which will be built.
|
|
|
|
.PARAMETER LocalPoshC2ProjectDir
|
|
|
|
The local path that is/will be used as the Project Directory for PoshC2.
|
|
|
|
.PARAMETER DockerTag
|
|
|
|
The tag of the Docker container to use, defaults to 'latest' (master)
|
|
|
|
.EXAMPLE
|
|
|
|
Start-PoshC2DockerProject -PoshC2Dir "C:\PoshC2" -PoshC2ProjectDir "C:\PoshC2_Project" -Arg1 "-n" -Arg2 "newproject"
|
|
#>
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$PoshC2Dir,
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$LocalPoshC2ProjectDir,
|
|
[string]$DockerTag = "latest",
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$Arg1 = "",
|
|
[string]$Arg2 = ""
|
|
)
|
|
|
|
docker run -ti --rm -v "$("$($LocalPoshC2ProjectDir):/var/poshc2")" "$($PoshC2DockerImage):$($DockerTag)" /usr/local/bin/posh-project $($Arg1) $($Arg2)
|
|
|
|
}; Set-Alias posh-project Start-PoshC2DockerProject
|
|
|
|
|
|
Function Start-PoshC2DockerConfig {
|
|
<#
|
|
.SYNOPSIS
|
|
|
|
Runs the PoshC2 Project Config in Docker.
|
|
|
|
Author: @m0rv4i
|
|
License: BSD 3-Clause
|
|
Required Dependencies: Docker Install
|
|
Optional Dependencies: None
|
|
|
|
.DESCRIPTION
|
|
|
|
Runs the PoshC2 Project Config in Docker.
|
|
|
|
.PARAMETER PoshC2Dir
|
|
|
|
Specifies the path to the PoshC2 installation which will be built.
|
|
|
|
.PARAMETER LocalPoshC2ProjectDir
|
|
|
|
The local path that is/will be used as the Project Directory for PoshC2.
|
|
|
|
.PARAMETER DockerTag
|
|
|
|
The tag of the Docker container to use, defaults to 'latest' (master)
|
|
|
|
.EXAMPLE
|
|
|
|
Start-PoshC2DockerConfig -PoshC2Dir "C:\PoshC2" -PoshC2ProjectDir "C:\PoshC2_Project"
|
|
#>
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$PoshC2Dir,
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$LocalPoshC2ProjectDir,
|
|
[string]$DockerTag = "latest"
|
|
)
|
|
|
|
docker run -ti --rm -v "$("$($LocalPoshC2ProjectDir):/var/poshc2")" "$($PoshC2DockerImage):$($DockerTag)" /usr/local/bin/posh-config
|
|
|
|
}; Set-Alias posh-config Start-PoshC2DockerConfig |