aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Robertson <robertsonk@gmail.com>2017-01-22 18:36:08 -0500
committerKevin Robertson <robertsonk@gmail.com>2017-01-22 18:36:08 -0500
commit2ab10d82aa5e30495078ca8c53b56d43d277d49d (patch)
treefaf84b8451f2afada3e2b2c76cbf6969d40309c7
parent2318def4dbf419c31a088cf4a222d0ac9851b5d9 (diff)
downloadInvoke-TheHash-2ab10d82aa5e30495078ca8c53b56d43d277d49d.tar.gz
Invoke-TheHash-2ab10d82aa5e30495078ca8c53b56d43d277d49d.zip
WMI fix for 0x1C01000B error
Fix to prevent certain command lengths from triggering WMI error code 0x1C01000B. Thanks to @vysec for reporting the issue and testing.
-rw-r--r--Invoke-WMIExec.ps122
1 files changed, 19 insertions, 3 deletions
diff --git a/Invoke-WMIExec.ps1 b/Invoke-WMIExec.ps1
index ec14080..43943a8 100644
--- a/Invoke-WMIExec.ps1
+++ b/Invoke-WMIExec.ps1
@@ -1239,10 +1239,26 @@ if($WMI_client_init.Connected)
$command_length2 = $command_length2[0,1]
[Byte[]]$command_bytes = [System.Text.Encoding]::UTF8.GetBytes($Command)
- if([Bool]!($Command.Length % 2))
+
+ # thanks to @vysec for finding a bug with certain command lengths
+ [String]$command_padding_check = $Command.Length / 4
+
+ if($command_padding_check -like "*.75")
{
$command_bytes += 0x00
}
+ elseif($command_padding_check -like "*.5")
+ {
+ $command_bytes += 0x00,0x00
+ }
+ elseif($command_padding_check -like "*.25")
+ {
+ $command_bytes += 0x00,0x00,0x00
+ }
+ else
+ {
+ $command_bytes += 0x00,0x00,0x00,0x00
+ }
$stub_data = 0x05,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +
$causality_ID_bytes +
@@ -1361,8 +1377,8 @@ if($WMI_client_init.Connected)
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00
}