@@ -73,13 +73,13 @@ def new_session
73
73
end
74
74
75
75
def header_fuzzer
76
- headers = partial_http_request_headers . merge ( @request . headers )
76
+ headers = @config . fuzzable_headers . merge ( @request . headers )
77
77
headers = headers . merge ( { 'User-Agent' => 'Mozilla/5.0' } ) # speed fix
78
78
79
- partial_http_request_headers . each_key do |header |
79
+ @config . fuzzable_headers . each_key do |header |
80
80
value = headers [ header ]
81
81
t = Tokenizer . new ( value )
82
- t . fuzz_each_token ( testcase , encoder : [ proc { | f | f . to_s . urlenc } ] ) do |fuzz_header , i , fuzz |
82
+ t . fuzz_each_token ( testcase ) do |fuzz_header , i , fuzz |
83
83
req = Request . new ( @request . to_s )
84
84
req . set_header ( header , fuzz_header )
85
85
do_fuzz_case ( req , i , fuzz )
@@ -95,27 +95,10 @@ def header_fuzzer
95
95
end
96
96
end
97
97
98
- def default_fuzz_headers
99
- {
100
- 'Cookie' => 'A=1' ,
101
- 'Referer' => 'http://www.example.com' ,
102
- 'User-Agent' => 'Mozilla/5.0' ,
103
- }
104
- end
105
-
106
- def partial_http_request_headers
107
- {
108
- 'Host' => 'localhost' ,
109
- 'Cookie' => '0' ,
110
- 'User-Agent' => 'Mozilla' ,
111
- 'Referer' => 'localhost'
112
- }
113
- end
114
-
115
98
def param_fuzzer
116
99
@request . url_variables . each_pair do |k , v |
117
100
t = Tokenizer . new ( v )
118
- t . fuzz_each_token ( testcase , encoder : [ proc { | f | f . to_s . urlenc } ] ) do |fuzz_param , i , fuzz |
101
+ t . fuzz_each_token ( testcase ) do |fuzz_param , i , fuzz |
119
102
req = Request . new ( @request . to_s )
120
103
req . query_string = @request . url_variables . merge ( { k => fuzz_param } )
121
104
do_fuzz_case ( req , i , fuzz )
@@ -125,35 +108,39 @@ def param_fuzzer
125
108
@request . url_variables . each_pair do |k , v |
126
109
testcase . rewind
127
110
while ( testcase . next? )
128
- req = Request . new ( @request . to_s )
129
111
fuzz = testcase . next
130
- req . query_string = @request . url_variables . merge ( { k => fuzz . to_s . urlenc } )
131
- do_fuzz_case ( req , req . first_line . index ( fuzz . to_s . urlenc ) , fuzz )
112
+ @config . encoders . each do |encoder |
113
+ encoded_fuzz = encoder . call ( fuzz )
114
+ req = Request . new ( @request . to_s )
115
+ req . query_string = @request . url_variables . merge ( { k => encoded_fuzz } )
116
+ do_fuzz_case ( req , req . first_line . index ( encoded_fuzz ) , fuzz )
117
+ end
132
118
end
133
119
end
134
120
135
- extra_param . each_pair do |k , v |
136
- t = Tokenizer . new ( v )
137
- t . fuzz_each_token ( testcase , encoder : [ proc { |f | f . to_s . urlenc } ] ) do |fuzz_param , i , fuzz |
138
- req = Request . new ( @request . to_s )
139
- req . query_string = @request . url_variables . merge ( { k => fuzz_param } )
140
- do_fuzz_case ( req , i , fuzz )
121
+ if @config . extra_param
122
+ @config . extra_param . each_pair do |k , v |
123
+ t = Tokenizer . new ( v )
124
+ t . fuzz_each_token ( testcase ) do |fuzz_param , i , fuzz |
125
+ req = Request . new ( @request . to_s )
126
+ req . query_string = @request . url_variables . merge ( { k => fuzz_param } )
127
+ do_fuzz_case ( req , i , fuzz )
128
+ end
141
129
end
142
130
end
143
131
144
132
testcase . rewind
145
133
while ( testcase . next? )
146
- req = Request . new ( @request . to_s )
147
134
fuzz = testcase . next
148
- req . query_string = @request . url_variables . merge ( { fuzz . to_s . urlenc => '1' } )
149
- do_fuzz_case ( req , req . first_line . index ( fuzz . to_s . urlenc ) , fuzz )
135
+ @config . encoders . each do |encoder |
136
+ encoded_fuzz = encoder . call ( fuzz )
137
+ req = Request . new ( @request . to_s )
138
+ req . query_string = @request . url_variables . merge ( { encoded_fuzz => '1' } )
139
+ do_fuzz_case ( req , req . first_line . index ( encoded_fuzz ) , fuzz )
140
+ end
150
141
end
151
142
end
152
143
153
- def extra_param
154
- { 't' => '1' }
155
- end
156
-
157
144
def post_fuzzer
158
145
if @request . post?
159
146
if @config . soap
@@ -165,9 +152,9 @@ def post_fuzzer
165
152
end
166
153
else
167
154
@request . body_variables . each_pair do |k , v |
168
- # next if @config.csrf_token_regex && k =~ @config.csrf_token_regex
155
+ next if @config . csrf_token_regex && k =~ @config . csrf_token_regex
169
156
t = Tokenizer . new ( v )
170
- t . fuzz_each_token ( testcase , encoder : [ proc { | f | f . to_s . urlenc } ] ) do |fuzz_var , i , fuzz |
157
+ t . fuzz_each_token ( testcase ) do |fuzz_var , i , fuzz |
171
158
req = Request . new ( @request . to_s )
172
159
req . body = req . body_variables . merge ( { k => fuzz_var } )
173
160
do_fuzz_case ( req , i , fuzz )
@@ -177,19 +164,25 @@ def post_fuzzer
177
164
@request . body_variables . each_pair do |k , v |
178
165
testcase . rewind
179
166
while ( testcase . next? )
180
- req = Request . new ( @request . to_s )
181
167
fuzz = testcase . next
182
- req . body = @request . body_variables . merge ( { k => fuzz . to_s . urlenc } )
183
- do_fuzz_case ( req , req . first_line . index ( fuzz . to_s . urlenc ) , fuzz )
168
+ @config . encoders . each do |encoder |
169
+ encoded_fuzz = encoder . call ( fuzz )
170
+ req = Request . new ( @request . to_s )
171
+ req . body = @request . body_variables . merge ( { k => encoded_fuzz } )
172
+ do_fuzz_case ( req , req . first_line . index ( encoded_fuzz ) , fuzz )
173
+ end
184
174
end
185
175
end
186
176
187
177
testcase . rewind
188
178
while ( testcase . next? )
189
- req = Request . new ( @request . to_s )
190
179
fuzz = testcase . next
191
- req . body = req . body_variables . merge ( { fuzz . to_s . urlenc => '1' } )
192
- do_fuzz_case ( req , req . body . index ( fuzz . to_s . urlenc ) , fuzz )
180
+ @config . encoders . each do |encoder |
181
+ encoded_fuzz = encoder . call ( fuzz )
182
+ req = Request . new ( @request . to_s )
183
+ req . body = req . body_variables . merge ( { encoded_fuzz => '1' } )
184
+ do_fuzz_case ( req , req . body . index ( encoded_fuzz ) , fuzz )
185
+ end
193
186
end
194
187
end
195
188
end
@@ -206,7 +199,7 @@ def rest_fuzzer
206
199
207
200
def token_fuzzer
208
201
t = Tokenizer . new ( request . to_s )
209
- t . fuzz_each_token ( testcase , encoder : [ proc { | f | f . to_s . urlenc } ] ) do |r , i , f |
202
+ t . fuzz_each_token ( testcase ) do |r , i , f |
210
203
do_fuzz_case ( Request . new ( r ) . update_content_length , i , f )
211
204
end
212
205
end
0 commit comments