2023-12-23 13:52:52 -05:00
|
|
|
require 'yaml'
|
|
|
|
|
|
|
|
|
|
module Msf
|
2023-12-24 11:54:22 -05:00
|
|
|
module Exploit::Local::Saltstack
|
|
|
|
|
#
|
|
|
|
|
# lists minions using the salt-key command.
|
|
|
|
|
#
|
|
|
|
|
# @param salt_key_exe [String] The name location of the salt-key executable
|
|
|
|
|
# @return [YAML] YAML document with the minions listed
|
|
|
|
|
#
|
|
|
|
|
def list_minions(salt_key_exe = 'salt-key')
|
|
|
|
|
# pull minions from a master, returns hash of lists of the output
|
|
|
|
|
print_status('Attempting to list minions')
|
|
|
|
|
unless command_exists?(salt_key_exe)
|
|
|
|
|
print_error('salt-key not present on system')
|
|
|
|
|
return
|
|
|
|
|
end
|
2023-12-23 13:52:52 -05:00
|
|
|
|
2023-12-24 11:54:22 -05:00
|
|
|
begin
|
|
|
|
|
out = cmd_exec(salt_key_exe, '-L --output=yaml', datastore['TIMEOUT'])
|
|
|
|
|
vprint_status(out)
|
|
|
|
|
minions = YAML.safe_load(out)
|
|
|
|
|
rescue Psych::SyntaxError
|
|
|
|
|
print_error('Unable to load salt-key -L data')
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
store_path = store_loot('saltstack_minions', 'application/x-yaml', session, minions.to_yaml, 'minions.yaml', 'SaltStack Salt salt-key list')
|
|
|
|
|
print_good("#{peer} - minion file successfully retrieved and saved to #{store_path}")
|
|
|
|
|
minions
|
2023-12-23 13:52:52 -05:00
|
|
|
end
|
2023-12-24 11:54:22 -05:00
|
|
|
end
|
|
|
|
|
end
|