121 lines
4.2 KiB
PowerShell
121 lines
4.2 KiB
PowerShell
##################################################
|
|
## ____ ___ ____ _____ _ _ _____ _____ ##
|
|
## / ___/ _ \| _ \| ____| | \ | | ____|_ _| ##
|
|
## | | | | | | |_) | _| | \| | _| | | ##
|
|
## | |__| |_| | _ <| |___ _| |\ | |___ | | ##
|
|
## \____\__\_\_| \_\_____(_)_| \_|_____| |_| ##
|
|
##################################################
|
|
## Project: Elysium ##
|
|
## File: Elysium.ps1 ##
|
|
## Version: 1.2.0 ##
|
|
## Support: support@cqre.net ##
|
|
##################################################
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
This is the main script for the Elysium tool for testing weak AD passwords.
|
|
|
|
.DESCRIPTION
|
|
Elysium.ps1 offers a menu to perform various actions:
|
|
1. Download/Update Known-Hashes Database (KHDB)
|
|
2. Test Weak AD Passwords
|
|
3. Extract and Send Current Hashes for KHDB Update
|
|
4. Uninstall the tool
|
|
5. Exit
|
|
#>
|
|
|
|
# Safer defaults
|
|
$ErrorActionPreference = 'Stop'
|
|
Set-StrictMode -Version Latest
|
|
|
|
# Define the path to the settings file
|
|
$settingsFilePath = Join-Path -Path $PSScriptRoot -ChildPath "ElysiumSettings.txt"
|
|
|
|
# Check if the settings file exists
|
|
if (-Not (Test-Path $settingsFilePath)) {
|
|
Write-Host "ElysiumSettings.txt does not exist. Please ensure your settings file is in the correct location."
|
|
exit
|
|
} else {
|
|
Write-Host "ElysiumSettings.txt found."
|
|
}
|
|
|
|
# Attempt to retrieve the passphrase from the environment variable
|
|
$passphrase = [System.Environment]::GetEnvironmentVariable("ELYSIUM_PASSPHRASE", [System.EnvironmentVariableTarget]::User)
|
|
|
|
if ([string]::IsNullOrEmpty($passphrase)) {
|
|
Write-Host "No passphrase found in environment variables."
|
|
$passphrase = Read-Host "Please enter your passphrase."
|
|
# Here you could choose to set the environment variable or simply use the passphrase for the current session
|
|
[System.Environment]::SetEnvironmentVariable("ELYSIUM_PASSPHRASE", $passphrase, [System.EnvironmentVariableTarget]::User)
|
|
Write-Host "Passphrase stored as environment variable 'ELYSIUM_PASSPHRASE'."
|
|
} else {
|
|
Write-Host "Passphrase found in environment variables."
|
|
}
|
|
|
|
# Continue with the rest of your script...
|
|
|
|
function Start-OrchestratorTranscript {
|
|
param([string]$BasePath)
|
|
try {
|
|
$logsDir = Join-Path -Path $BasePath -ChildPath 'Reports/logs'
|
|
if (-not (Test-Path $logsDir)) { New-Item -Path $logsDir -ItemType Directory -Force | Out-Null }
|
|
$ts = Get-Date -Format 'yyyyMMdd-HHmmss'
|
|
$logPath = Join-Path -Path $logsDir -ChildPath "orchestrator-$ts.log"
|
|
Start-Transcript -Path $logPath -Force | Out-Null
|
|
} catch {
|
|
Write-Warning "Could not start transcript: $($_.Exception.Message)"
|
|
}
|
|
}
|
|
|
|
function Stop-OrchestratorTranscript { try { Stop-Transcript | Out-Null } catch {} }
|
|
|
|
function Show-Menu {
|
|
param (
|
|
[string]$Title = 'Elysium Tool Main Menu'
|
|
)
|
|
Clear-Host
|
|
Write-Host "================ $Title ================"
|
|
Write-Host "1: Download/Update Known-Hashes Database (KHDB)"
|
|
Write-Host "2: Test Weak AD Passwords"
|
|
Write-Host "3: Extract and Send Current Hashes for KHDB Update"
|
|
Write-Host "4: Uninstall"
|
|
Write-Host "5: Exit"
|
|
}
|
|
|
|
Start-OrchestratorTranscript -BasePath $PSScriptRoot
|
|
try {
|
|
do {
|
|
Show-Menu
|
|
$userSelection = Read-Host "Please make a selection"
|
|
switch ($userSelection) {
|
|
'1' {
|
|
Write-Host "Downloading KHDB..."
|
|
& (Join-Path -Path $PSScriptRoot -ChildPath 'Update-KHDB.ps1')
|
|
}
|
|
'2' {
|
|
Write-Host "Testing Weak AD Passwords..."
|
|
& (Join-Path -Path $PSScriptRoot -ChildPath 'Test-WeakADPasswords.ps1')
|
|
}
|
|
'3' {
|
|
Write-Host "Extracting and Sending Current Hashes..."
|
|
& (Join-Path -Path $PSScriptRoot -ChildPath 'Extract-NTHashes.ps1')
|
|
}
|
|
'4' {
|
|
Write-Host "Uninstalling..."
|
|
& (Join-Path -Path $PSScriptRoot -ChildPath 'Uninstall.ps1')
|
|
}
|
|
'5' {
|
|
Write-Host "Exiting..."
|
|
# end loop; transcript will be stopped after the loop
|
|
$userSelection = '5'
|
|
}
|
|
default {
|
|
Write-Host "Invalid selection, please try again."
|
|
}
|
|
}
|
|
pause
|
|
} while ($userSelection -ne '5')
|
|
} finally {
|
|
Stop-OrchestratorTranscript
|
|
}
|