Skip to main content

Basic Usage

Getting Help

# Display help and available commands
Seatbelt.exe

# Show command list with remote capability indicators
Seatbelt.exe --help

Running Single Commands

# Run one command
Seatbelt.exe OSInfo

# Run multiple commands
Seatbelt.exe OSInfo LocalUsers AntiVirus

# Run command with full output (no filtering)
Seatbelt.exe Processes -full

Command Groups

System Enumeration

# Run all system checks
Seatbelt.exe -group=system

# System checks with full output
Seatbelt.exe -group=system -full

# System checks to file
Seatbelt.exe -group=system -outputfile="C:\Temp\system.txt"

User Enumeration

# Run all user checks (current user if not elevated)
Seatbelt.exe -group=user

# User checks for ALL users (requires elevation)
runas /user:Administrator "Seatbelt.exe -group=user"

# User checks with JSON output
Seatbelt.exe -group=user -outputfile="C:\Temp\user.json"

Comprehensive Enumeration

# Run ALL checks
Seatbelt.exe -group=all

# Run ALL checks with full output
Seatbelt.exe -group=all -full

# Quiet mode with JSON output
Seatbelt.exe -group=all -q -outputfile="C:\Temp\all.json"

Selective Group Execution

# Run all checks EXCEPT specific commands
Seatbelt.exe -group=all -AuditPolicies -Hotfixes

# Run system group except slow commands
Seatbelt.exe -group=system -ScheduledTasks -Services

Commands with Arguments

Many commands accept arguments to customize behavior:

Time-Based Commands

# Logon events for last 30 days
Seatbelt.exe "LogonEvents 30"

# Explicit logon events for last 14 days
Seatbelt.exe "ExplicitLogonEvents 14"

# PowerShell events for last 7 days
Seatbelt.exe "PowerShellEvents 7"

# Process creation events for last 3 days
Seatbelt.exe "ProcessCreationEvents 3"

Directory Listing

# List files in directory
Seatbelt.exe "dir C:\Users"

# Directory with max depth
Seatbelt.exe "dir C:\Users\Public 2"

# Directory with regex filter
Seatbelt.exe "dir C:\Users 3 .*password.*"

# Directory with depth, regex, and error handling
Seatbelt.exe "dir C:\\ 2 .*config.* false"

Registry Queries

# Query registry key
Seatbelt.exe "reg HKLM\Software"

# Query with depth
Seatbelt.exe "reg HKLM\Software 2"

# Query with depth and regex filter
Seatbelt.exe "reg \"HKLM\SOFTWARE\Microsoft\Windows Defender\" 3 .*defini.*"

# Query with all options
Seatbelt.exe "reg \"HKLM\SOFTWARE\Microsoft\" 2 .*security.* true"

File Information

# Get info about single file
Seatbelt.exe "FileInfo C:\Windows\System32\cmd.exe"

# Get info about multiple files
Seatbelt.exe "FileInfo C:\Windows\System32\cmd.exe C:\Windows\System32\powershell.exe"

Search Index

# Search with default term (password)
Seatbelt.exe SearchIndex

# Search with custom terms
Seatbelt.exe "SearchIndex C:\ password,credential,secret"

# Search specific location
Seatbelt.exe "SearchIndex C:\Users\Admin password,key,token"

Remote Enumeration

Basic Remote Execution

# Run single command remotely
Seatbelt.exe OSInfo -computername=192.168.1.100

# Run multiple commands remotely
Seatbelt.exe OSInfo LocalUsers -computername=WORKSTATION01

Authenticated Remote Execution

# With domain credentials
Seatbelt.exe -group=remote -computername=DC01.domain.com -username=DOMAIN\admin -password="P@ssw0rd"

# With local credentials
Seatbelt.exe LocalUsers -computername=WORKSTATION01 -username=.\Administrator -password="AdminPass123"

# Password with special characters (use quotes)
Seatbelt.exe OSInfo -computername=TARGET -username=DOMAIN\user -password="yum \"po-ta-toes\""

Remote Command Groups

# Run remote-optimized checks
Seatbelt.exe -group=remote -computername=192.168.230.209

# Remote system enumeration with credentials
Seatbelt.exe -group=remote -computername=SERVER01 -username=DOMAIN\svc_account -password="ServicePass"

# Remote with output file
Seatbelt.exe -group=remote -computername=TARGET -username=DOMAIN\user -password=PASS -outputfile="C:\Temp\remote.json"

Output Options

Console Output

# Default console output
Seatbelt.exe OSInfo

# Quiet mode (minimal console output)
Seatbelt.exe -group=user -q

Text File Output

# Output to text file
Seatbelt.exe -group=system -outputfile="C:\Temp\output.txt"

# Multiple groups to file
Seatbelt.exe -group=system -group=user -outputfile="C:\results.txt"

JSON Output

# JSON output (file extension must be .json)
Seatbelt.exe -group=all -outputfile="C:\Temp\results.json"

# Quiet JSON output
Seatbelt.exe -group=user -q -outputfile="C:\output.json"

# JSON for parsing
Seatbelt.exe OSInfo LocalUsers Processes -outputfile="C:\enum.json"

Practical Scenarios

Initial Compromise Enumeration

After gaining initial access, enumerate system context:
1

Basic System Info

Seatbelt.exe OSInfo
Determine OS version, domain membership, architecture
2

Current User Context

Seatbelt.exe TokenGroups TokenPrivileges
Understand current privileges and group membership
3

Quick Wins

Seatbelt.exe WindowsAutoLogon CredEnum WindowsVault
Look for easy credential wins
4

Defensive Products

Seatbelt.exe AntiVirus WindowsDefender Sysmon AMSIProviders
Identify defensive tools

Privilege Escalation Enumeration

Looking for privilege escalation vectors:
# User context and credentials
Seatbelt.exe TokenPrivileges LocalUsers LocalGroups WindowsAutoLogon

# Saved credentials
Seatbelt.exe CredEnum DpapiMasterKeys WindowsVault PowerShellHistory

# Configuration issues
Seatbelt.exe UAC LAPS RegistryAutoLogons Services ScheduledTasks

# Network and access
Seatbelt.exe NetworkShares MappedDrives RDPSessions LogonSessions

Post-Exploitation Enumeration

Comprehensive enumeration after privilege escalation:
# Full system enumeration
Seatbelt.exe -group=all -full -outputfile="C:\Windows\Temp\full_enum.json"

# Targeted high-value data
Seatbelt.exe ChromiumHistory FirefoxHistory PowerShellHistory OfficeMRUs

# Domain information
Seatbelt.exe OSInfo LocalUsers LocalGroups LogonSessions

# Credential hunting
Seatbelt.exe -group=user DpapiMasterKeys WindowsCredentialFiles

Network Enumeration

Understand network positioning:
# Network configuration
Seatbelt.exe OSInfo NetworkProfiles NetworkShares ARPTable

# Connections
Seatbelt.exe TcpConnections UdpConnections RDPSessions

# DNS and routing
Seatbelt.exe DNSCache ARPTable

Credential Hunting

Focused credential enumeration:
# Saved credentials
Seatbelt.exe CredEnum WindowsVault SecPackageCreds

# DPAPI
Seatbelt.exe DpapiMasterKeys WindowsCredentialFiles

# Browser credentials
Seatbelt.exe -group=chromium FirefoxPresence IEUrls

# Application credentials
Seatbelt.exe FileZilla PuttySessions SuperPutty RDCManFiles KeePass

# PowerShell history
Seatbelt.exe PowerShellHistory

# Registry autologon
Seatbelt.exe WindowsAutoLogon RegistryAutoLogons

Defensive Assessment

Security posture evaluation:
# Security products
Seatbelt.exe AntiVirus WindowsDefender Sysmon AMSIProviders

# Security configuration
Seatbelt.exe UAC AppLocker CredGuard SecureBoot LAPS

# Logging and monitoring
Seatbelt.exe AuditPolicies WindowsEventForwarding Sysmon

# Network security
Seatbelt.exe WindowsFirewall NTLMSettings

# Patch level
Seatbelt.exe Hotfixes OSInfo

Lateral Movement Planning

Identify lateral movement opportunities:
# Local accounts
Seatbelt.exe LocalUsers LocalGroups

# Network shares
Seatbelt.exe NetworkShares MappedDrives

# Sessions
Seatbelt.exe LogonSessions RDPSessions

# Credentials
Seatbelt.exe CredEnum WindowsVault

# Network connections
Seatbelt.exe TcpConnections RDPSessions

Remote System Triage

Quickly assess remote systems:
# Basic remote triage
Seatbelt.exe OSInfo LocalUsers AntiVirus -computername=TARGET -username=DOMAIN\user -password=PASS

# Remote credential hunt
Seatbelt.exe WindowsAutoLogon DpapiMasterKeys CredEnum -computername=TARGET -username=DOMAIN\user -password=PASS

# Remote defensive assessment
Seatbelt.exe AntiVirus WindowsDefender Sysmon AppLocker -computername=TARGET -username=DOMAIN\user -password=PASS

Automation and Integration

PowerShell Wrapper

# Run Seatbelt and parse JSON output
function Invoke-SeatbeltEnum {
    param(
        [string]$Group = "all",
        [string]$OutputPath = "$env:TEMP\seatbelt_$(Get-Date -Format 'yyyyMMdd_HHmmss').json"
    )

    & .\Seatbelt.exe -group=$Group -q -outputfile=$OutputPath

    if (Test-Path $OutputPath) {
        $results = Get-Content $OutputPath | ConvertFrom-Json
        return $results
    }
}

# Use the function
$enumResults = Invoke-SeatbeltEnum -Group "system"

Batch Script

@echo off
REM Automated Seatbelt enumeration script

set TIMESTAMP=%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set OUTPUT_DIR=C:\Temp\Seatbelt_%TIMESTAMP%

mkdir %OUTPUT_DIR%

echo Running system checks...
Seatbelt.exe -group=system -outputfile="%OUTPUT_DIR%\system.json"

echo Running user checks...
Seatbelt.exe -group=user -outputfile="%OUTPUT_DIR%\user.json"

echo Running misc checks...
Seatbelt.exe -group=misc -outputfile="%OUTPUT_DIR%\misc.json"

echo Enumeration complete! Results in %OUTPUT_DIR%

Python Parser

import json
import subprocess

def run_seatbelt(group="all", output_file="output.json"):
    """Run Seatbelt and return parsed results"""
    cmd = f'Seatbelt.exe -group={group} -q -outputfile={output_file}'
    subprocess.run(cmd, shell=True, check=True)

    with open(output_file, 'r') as f:
        return json.load(f)

# Usage
results = run_seatbelt(group="system")
print(f"Found {len(results)} results")

Performance Considerations

Fast Enumeration

For quick checks, avoid time-intensive commands:
# Fast system checks (avoid LOLBAS, InterestingFiles, SearchIndex)
Seatbelt.exe OSInfo LocalUsers LocalGroups AntiVirus WindowsDefender

# Quick user enum
Seatbelt.exe CredEnum DpapiMasterKeys TokenGroups

Time-Intensive Commands

Commands that take significant time:
  • InterestingFiles - Searches entire file system
  • LOLBAS - Searches for Living Off The Land binaries
  • SearchIndex - Queries Windows Search index
  • ScheduledTasks -full - Enumerates all scheduled tasks
  • Services -full - Enumerates all services
  • Processes -full - Detailed process enumeration
Use -full flag sparingly in operational environments as it increases runtime and output volume significantly.

OPSEC Considerations

Stealthy Enumeration

Rename the executable:
copy Seatbelt.exe C:\Windows\Temp\update.exe
C:\Windows\Temp\update.exe OSInfo
Run only necessary commands to reduce noise:
# Instead of -group=all
Seatbelt.exe OSInfo TokenPrivileges WindowsAutoLogon
Write to disk instead of console:
Seatbelt.exe -group=system -q -outputfile="C:\Windows\Temp\log.txt"
Execute remotely to avoid local logging:
# From different system
Seatbelt.exe -group=remote -computername=TARGET -username=USER -password=PASS

Detection Risk by Command

Low Risk:
  • OSInfo, TokenGroups, TokenPrivileges (normal system calls)
Medium Risk:
  • LocalUsers, LocalGroups, Processes (standard enumeration)
High Risk:
  • LOLBAS, InterestingFiles (extensive file system access)
  • Event log queries (security log access may be monitored)
  • Credential commands (accessing sensitive resources)

Troubleshooting

Symptoms: Commands fail with “Access Denied”Solutions:
  • Run with elevated privileges
  • Check user permissions for specific resources
  • Use appropriate credentials for remote execution
Symptoms: Remote commands timeout or failSolutions:
  • Verify network connectivity (test WMI access)
  • Check Windows Firewall on target
  • Ensure WMI service is running
  • Verify credentials have appropriate permissions
Symptoms: Specific command doesn’t existSolutions:
  • Check Seatbelt version (some commands added in newer versions)
  • Verify command name spelling
  • Run without arguments to see available commands
Symptoms: Output files are unexpectedly largeSolutions:
  • Avoid -full flag unless necessary
  • Use selective commands instead of groups
  • Filter output after generation
  • Use text output instead of JSON for human reading

Best Practices

1

Start Small

Begin with basic commands before running full groups
2

Document Version

Track which Seatbelt version was used for reproducibility
3

Save Output

Always save results to file for offline analysis
4

Use JSON for Automation

JSON output enables programmatic parsing and integration
5

Clean Up

Remove output files and binaries after use

Next Steps