Skip to content

Commit 37f159d

Browse files
committed
corrections based on feedback
1 parent 10713dd commit 37f159d

File tree

1 file changed

+31
-50
lines changed

1 file changed

+31
-50
lines changed

modules/post/windows/gather/enum_ad_users_to_wordlist.rb

Lines changed: 31 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -27,82 +27,63 @@ def initialize(info={})
2727
))
2828

2929
register_options([
30-
OptString.new('FIELDS', [true, 'Fields to retrieve.', 'sn,givenName,st,postalCode,physicalDeliveryOfficeName,telephoneNumber,mobile,facsimileTelephoneNumber,displayName,title,department,company, streetAddress,sAMAccountName,userAccountControl,comment,description']),
31-
OptString.new('FILTER', [true, 'Search filter.','(&(objectClass=organizationalPerson)(objectClass=user)(objectClass=person)(!(objectClass=computer)))']),
32-
], self.class)
30+
OptString.new('FIELDS', [false, 'Fields to retrieve (ie, sn, givenName, displayName, description, comment)', '']),
31+
], self.class)
3332
end
3433

3534
def run
36-
fields = datastore['FIELDS'].gsub(/\s+/,"").split(',')
37-
search_filter = datastore['FILTER']
35+
36+
fields = []
37+
if(datastore['FIELDS'] == '')
38+
field_str = 'sn,givenName,state,postalCode,physicalDeliveryOfficeName,telephoneNumber,mobile,facsimileTelephoneNumber,displayName,'
39+
field_str << 'title,department,company, streetAddress,sAMAccountName,userAccountControl,comment,description'
40+
fields = field_str.gsub!(/\s+/,'').split(',')
41+
else
42+
fields = datastore['FIELDS'].gsub(/\s+/,"").split(',')
43+
end
44+
search_filter = '(&(objectClass=organizationalPerson)(objectClass=user)(objectClass=person)(!(objectClass=computer)))'
3845
max_search = datastore['MAX_SEARCH']
3946
begin
4047
q = query(search_filter, max_search, fields)
41-
if q.nil? or q[:results].empty?
42-
return
43-
end
48+
return if !q or q[:results].empty?
49+
4450
rescue ::RuntimeError, ::Rex::Post::Meterpreter::RequestError => e
4551
# Can't bind or in a network w/ limited accounts
4652
print_error(e.message)
4753
return
4854
end
4955

50-
wordlist = Hash.new()
56+
wordlist = Hash.new(0)
5157
q[:results].each do |result|
5258
result.each do |field|
53-
next if field.nil?
59+
next unless field.present?
5460
next if field =~ /^\s*$/ or field == '-' or field == '' or field.length < 3
5561

5662
field.gsub!(/[\(\)\"]/, '') # clear up common punctuation in descriptions
57-
field.downcase! # clear up case
58-
add = 1
63+
field.downcase! # clear up case
5964

60-
tmp = Array.new()
61-
if(field =~ /\s+/)
62-
tmp.push(field.split(/\s+/))
63-
add=0
64-
end
65-
field.gsub!(/\s+/, '')
65+
tmp = []
66+
parts = field.split(/\s+/)
67+
tmp = tmp + parts + [ parts.join ] unless parts.empty?
68+
parts = field.split('-')
69+
tmp = tmp + parts + [ parts.join ] unless parts.empty?
70+
parts = field.split(',')
71+
tmp = tmp + parts + [ parts.join ] unless parts.empty?
72+
parts = field.split('+')
73+
tmp = tmp + parts + [ parts.join ] unless parts.empty?
6674

67-
if(field =~ /-/)
68-
tmp.push(field.split(/-/))
69-
tmp.push(field.gsub(/-/, ''))
70-
end
71-
field.gsub!(/-/, '')
72-
73-
if(field =~ /,/)
74-
tmp.push(field.split(/,/))
75-
add=0
76-
end
77-
field.gsub!(/,/, '')
78-
79-
if(field =~ /\+/)
80-
tmp.push(field.split(/\+/))
81-
end
82-
field.gsub!(/\+/, '')
83-
84-
if wordlist.has_key?(field) and field.length < 24 and add == 1
85-
wordlist[field] = wordlist[field]+1
86-
else
87-
wordlist[field] = 1
88-
end
75+
# add the entire field if its not too long
76+
wordlist[field] += 1 if field.length < 24
8977

9078
if tmp.length > 0
9179
tmp = tmp.flatten
9280
tmp.each do |r|
9381
next if r.length < 3 or r.length > 24
9482
# sub fields can still have unwanted characters due to not chained if (ie, it has dashes and commas)
95-
r.gsub!(/s/, '')
96-
r.gsub!(/,/, '')
97-
r.gsub!(/-/, '')
98-
r.gsub!(/\+/, '')
99-
if wordlist.has_key?(r) and r.length < 24
100-
wordlist[r] = wordlist[r]+1
101-
else
102-
wordlist[r] = 1
103-
end
83+
r.gsub!(/[\s\,\-\+]/, '')
84+
wordlist[r] += 1 if r.length < 24
10485
end
105-
end
86+
end
10687
end # result.each
10788
end # q.each
10889

0 commit comments

Comments
 (0)