Skip to content

Commit e2e577f

Browse files
committed
minor tweaks to config object
1 parent 186fce6 commit e2e577f

File tree

9 files changed

+57
-65
lines changed

9 files changed

+57
-65
lines changed

lib/ufuzz/command_line.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,6 @@ def parse_options(cmd_line)
5959
opts.on('--reverse-log', 'Fuzz proxy log in reverse order') do
6060
options[:reverse_log] = true
6161
end
62-
63-
opts.on('--encoding STR', 'Encodings to use for fuzzing wordlists (default url, optional b64,hex)') do |o|
64-
options[:fuzz_encoding] = o.split(',').inject({}) do |r,e|
65-
r[e.downcase.strip.to_sym] = true; r
66-
end
67-
end
6862

6963
opts.on('-v', '--verbose NUM', 'Enabled verbose output, from 0 (fail) to 4 (trace), default 2 (info)') do |v|
7064
options[:verbose] = v.to_i

lib/ufuzz/config.rb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,17 @@ def default_options
1717
:chunk_size => UFuzz::DEFAULT_CHUNK_SIZE,
1818
:retry_limit => UFuzz::DEFAULT_RETRY_LIMIT,
1919
:traversal_match => UFuzz::DEFAULT_TRAVERSAL_MATCH,
20-
:extra_param => 't',
21-
:csrf_token_regex => /csrfmiddlewaretoken/,
20+
:csrf_token_regex => nil,
2221
:detect_delay => 5,
23-
#:fuzz_encoding => { :url => true },
24-
:thread_count => 1
22+
:thread_count => 1,
23+
:encoders => [ proc { |f| f.to_s }, proc { |f| f.to_s.urlenc } ],
24+
:extra_param => { 't' => '1' },
25+
:fuzzable_headers => {
26+
'Host' => 'localhost',
27+
'Cookie' => '0',
28+
'User-Agent' => 'Mozilla',
29+
'Referer' => 'localhost'
30+
},
2531
}
2632
end
2733

lib/ufuzz/http/fuzzer.rb

Lines changed: 39 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@ def new_session
7373
end
7474

7575
def header_fuzzer
76-
headers = partial_http_request_headers.merge(@request.headers)
76+
headers = @config.fuzzable_headers.merge(@request.headers)
7777
headers = headers.merge({ 'User-Agent' => 'Mozilla/5.0' }) # speed fix
7878

79-
partial_http_request_headers.each_key do |header|
79+
@config.fuzzable_headers.each_key do |header|
8080
value = headers[header]
8181
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|
8383
req = Request.new(@request.to_s)
8484
req.set_header(header, fuzz_header)
8585
do_fuzz_case(req, i, fuzz)
@@ -95,27 +95,10 @@ def header_fuzzer
9595
end
9696
end
9797

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-
11598
def param_fuzzer
11699
@request.url_variables.each_pair do |k,v|
117100
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|
119102
req = Request.new(@request.to_s)
120103
req.query_string = @request.url_variables.merge({k => fuzz_param})
121104
do_fuzz_case(req, i, fuzz)
@@ -125,35 +108,39 @@ def param_fuzzer
125108
@request.url_variables.each_pair do |k,v|
126109
testcase.rewind
127110
while(testcase.next?)
128-
req = Request.new(@request.to_s)
129111
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
132118
end
133119
end
134120

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
141129
end
142130
end
143131

144132
testcase.rewind
145133
while(testcase.next?)
146-
req = Request.new(@request.to_s)
147134
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
150141
end
151142
end
152143

153-
def extra_param
154-
{'t' => '1'}
155-
end
156-
157144
def post_fuzzer
158145
if @request.post?
159146
if @config.soap
@@ -165,9 +152,9 @@ def post_fuzzer
165152
end
166153
else
167154
@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
169156
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|
171158
req = Request.new(@request.to_s)
172159
req.body = req.body_variables.merge({k => fuzz_var})
173160
do_fuzz_case(req, i, fuzz)
@@ -177,19 +164,25 @@ def post_fuzzer
177164
@request.body_variables.each_pair do |k,v|
178165
testcase.rewind
179166
while(testcase.next?)
180-
req = Request.new(@request.to_s)
181167
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
184174
end
185175
end
186176

187177
testcase.rewind
188178
while(testcase.next?)
189-
req = Request.new(@request.to_s)
190179
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
193186
end
194187
end
195188
end
@@ -206,7 +199,7 @@ def rest_fuzzer
206199

207200
def token_fuzzer
208201
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|
210203
do_fuzz_case(Request.new(r).update_content_length, i, f)
211204
end
212205
end

lib/ufuzz/testcase/cmd_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def threadable?
1515

1616
def test(content)
1717
delay = Time.now.to_f - @time
18-
if content && content.to_s.length > 20 && delay > 5.0
18+
if content && content.to_s.length > 20 && delay > Config.instance.detect_delay
1919
Fault.new('cmd injection', "possible cmd injection - #{@current.inspect}: delay #{delay}")
2020
else
2121
nil

lib/ufuzz/testcase/path_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def threadable?
1414
end
1515

1616
def test(content)
17-
[/xterm/, /root:/].each do |regex|
17+
Config.instance.traversal_match.each do |regex|
1818
if content.to_s =~ regex
1919
return Fault.new('path traversal', "possible path traversal - #{@current.inspect}: found #{regex.inspect}")
2020
end

lib/ufuzz/testcase/sqli_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def threadable?
1515

1616
def test(content)
1717
delay = Time.now.to_f - @time
18-
if delay >= 5
18+
if delay >= Config.instance.detect_delay
1919
Fault.new('sql injection', "possible sql injection - #{@current.inspect}: delay #{delay}")
2020
else
2121
nil

lib/ufuzz/testcase/xxe_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def threadable?
1414
end
1515

1616
def test(content)
17-
[/xterm/, /root:/].each do |regex|
17+
Config.instance.traversal_match.each do |regex|
1818
if content.to_s =~ regex
1919
return Fault.new('xml external entity injection', "possible xxe injection - #{@current.inspect}: found #{regex.inspect}")
2020
end

lib/ufuzz/tokenizer.rb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,7 @@ def to_s
4242
end
4343

4444
def fuzz_positions(tok, i, fuzz, opts)
45-
encoder = [ proc { |a| a.to_s } ]
46-
encoder += opts[:encoder] if opts[:encoder]
47-
48-
encoder.each do |encode|
45+
Config.instance.encoders.each do |encode|
4946
fuzz_val = encode.call(fuzz)
5047
["#{fuzz_val}", "#{tok}#{fuzz_val}", "#{fuzz_val}#{tok}"].each do |f|
5148
t = @tokens.dup

modules/generic/config.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ def options
44
platform: 'Generic',
55
use_ssl: false,
66
use_session: false,
7-
#skip_urls: /firmwareupdate1|UpdateWeeklyCalendar/,
7+
encoders: [ proc { |f| f.to_s } ],
8+
#skip_urls: /firmwareupdate1|UpdateWeeklyCalendar|ChangeFriendlyName/,
9+
#delay: 1,
810
}
911
end
1012
end

0 commit comments

Comments
 (0)