Added a Windows Script for sending payloads over PowerShell

This commit is contained in:
LightningMods
2025-02-15 15:00:02 -05:00
parent 9c6a7e858f
commit 475b61824e
2 changed files with 124 additions and 3 deletions

102
send_payload.ps1 Normal file
View File

@@ -0,0 +1,102 @@
<#
.SYNOPSIS
Sends the contents of a file to a specified IP address and port using PowerShell.
.DESCRIPTION
This script reads the contents of a file and sends it over a TCP connection
to a specified IP address and port. It handles potential errors and
provides basic feedback, including connection failure detection.
.PARAMETER Payload
The path to the file whose contents will be sent.
.PARAMETER IP
The IP address to send the data to.
.PARAMETER Port
The port number to connect to.
.EXAMPLE
.\send_payload.ps1 -Payload "C:\xxx\xxx\payload.elf" -IP "192.168.x.xxx" -Port 9021
.NOTES
- Requires PowerShell 3.0 or later.
- Handles potential exceptions during socket creation and data transmission.
- Consider error handling and security implications in production environments.
#>
param (
[Parameter(Mandatory = $true, HelpMessage = "The path to the payload to send.")]
[string]$Payload,
[Parameter(Mandatory = $true, HelpMessage = "The IP address to send the data to.")]
[string]$IP,
[Parameter(Mandatory = $true, HelpMessage = "The port number to connect to.")]
[int]$Port
)
# Check if the file exists before proceeding
if (!(Test-Path -Path $Payload -PathType Leaf)) {
Write-Host "The specified payload file '$Payload' does not exist, Press any key to exit..." -ForegroundColor Red
exit
}
try {
# Create a TCP client object
$tcpClient = New-Object System.Net.Sockets.TcpClient
Write-Host "Connecting to ${IP}:$Port...."
# Attempt to connect with a timeout
$connectTimeoutMs = 5000 # 5 seconds timeout
$connectResult = $tcpClient.BeginConnect($IP, $Port, $null, $null)
$connected = $connectResult.AsyncWaitHandle.WaitOne($connectTimeoutMs)
if (!$connected) {
# Connection timed out
Write-Host "Failed to connect to ${IP}:$Port within $connectTimeoutMs ms. Connection timed out, Press any key to exit..." -ForegroundColor Red
$tcpClient.Close() # Ensure the client is closed
exit # Exit the script if connection fails
}
else {
$tcpClient.EndConnect($connectResult) # Complete the connection
}
# Get the network stream
$stream = $tcpClient.GetStream()
# Read the file content as a byte array
Write-Verbose "Reading file content from $Payload..."
$fileContent = [System.IO.File]::ReadAllBytes($Payload)
# Send the data
Write-Verbose "Sending data..."
$stream.Write($fileContent, 0, $fileContent.Length)
# Flush the stream to ensure all data is sent
$stream.Flush()
Write-Host "Successfully sent file '$Payload' to ${IP}:$Port, press any key to exit"
# Shutdown and close the connection
$stream.Close()
$tcpClient.Close()
}
catch {
Write-Error "An error occurred: $($_.Exception.Message), press any key to exit"
Write-Error $_.Exception.StackTrace
[System.Console]::ReadKey() | Out-Null
}
finally {
# Ensure resources are cleaned up even if an error occurs
if ($stream) {
try { $stream.Dispose() } catch {} # Handle potential disposal errors
}
if ($tcpClient) {
try { $tcpClient.Close() } catch {} # Handle potential close errors
}
[System.Console]::ReadKey() | Out-Null
}