@@ -27,82 +27,63 @@ def initialize(info={})
27
27
) )
28
28
29
29
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 )
33
32
end
34
33
35
34
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)))'
38
45
max_search = datastore [ 'MAX_SEARCH' ]
39
46
begin
40
47
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
+
44
50
rescue ::RuntimeError , ::Rex ::Post ::Meterpreter ::RequestError => e
45
51
# Can't bind or in a network w/ limited accounts
46
52
print_error ( e . message )
47
53
return
48
54
end
49
55
50
- wordlist = Hash . new ( )
56
+ wordlist = Hash . new ( 0 )
51
57
q [ :results ] . each do |result |
52
58
result . each do |field |
53
- next if field . nil ?
59
+ next unless field . present ?
54
60
next if field =~ /^\s *$/ or field == '-' or field == '' or field . length < 3
55
61
56
62
field . gsub! ( /[\( \) \" ]/ , '' ) # clear up common punctuation in descriptions
57
- field . downcase! # clear up case
58
- add = 1
63
+ field . downcase! # clear up case
59
64
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?
66
74
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
89
77
90
78
if tmp . length > 0
91
79
tmp = tmp . flatten
92
80
tmp . each do |r |
93
81
next if r . length < 3 or r . length > 24
94
82
# 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
104
85
end
105
- end
86
+ end
106
87
end # result.each
107
88
end # q.each
108
89
0 commit comments