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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
SSRF-CVE-2020-15002 — https://hackerone.com/reports/863553 | Kitploit
उपकरण/GitHubGitHub/skr0x1c0/ssrf-cve-2020-15002
ReconnaissanceVulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringPenetration Testing
GitHubskr0x1c0/ssrf-cve-2020-15002

SSRF-CVE-2020-15002

https://hackerone.com/reports/863553

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

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

सभी देखें →

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

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

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

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

सारांश

/appsuite/api/oxodocumentfilter&action=addfile को संभालते समय लागू की गई URL सत्यापन तर्क में तीन दोष हैं जिनका उपयोग टाइम ऑफ़ चेक टाइम ऑफ़ यूज़ (ToCToU) SSRF हमले को निष्पादित करने के लिए किया जा सकता है। यह समस्या दुर्भावनापूर्ण अभिनेताओं को आंतरिक नेटवर्क सेवाओं पर HTTP GET अनुरोध निष्पादित करने की अनुमति देती है और संरक्षित जानकारी के रिसाव का कारण बन सकती है।

दोष #1: टाइम ऑफ़ चेक टाइम ऑफ़ यूज़ (ToCToU) भेद्यता

URITools.getFinalURL विधि में URL सत्यापन तर्क यहाँ लागू किया गया है, ToCToU भेद्यता से ग्रस्त है

root@kitploit:~
URL u = new URL(url);
if (validator.isPresent()) {
    Optional<OXException> exception = validator.get().apply(u);
    if (exception.isPresent()) {
        throw exception.get();
    }
}

URLConnection urlConnnection = u.openConnection();

उपरोक्त कोड में, InetAddress.getByName विधि को कॉल करके जांच के समय (validator.get().apply(u)) और उपयोग के समय (u.openConnection()) दोनों पर इनपुट URL होस्टनाम का DNS रिज़ॉल्यूशन किया जाता है। इसलिए यदि कोई हमलावर जांच के समय और उपयोग के समय के बीच DNS रिज़ॉल्यूशन परिणाम को बदल सकता है, तो वह सत्यापक को बायपास कर सकता है। यह दोष अकेले निम्नलिखित सीमाओं के कारण शोषण करना अत्यंत कठिन है

  1. डिफ़ॉल्ट रूप से, InetAddress.getByName DNS रिज़ॉल्यूशन सफल होने पर 30 सेकंड के लिए और DNS रिज़ॉल्यूशन विफल होने पर 10 सेकंड के लिए DNS रिज़ॉल्यूशन परिणामों को कैश करता है।
  2. validator.get().apply(u) और u.openConnection() के बीच समय अंतराल अत्यंत छोटा है (सामान्य URL के लिए एक मिलीसेकंड से भी कम)। इस सीमा को बायपास करने के लिए दोष #2 का उपयोग किया जाता है

दोष #2: इनपुट URL की लंबाई सीमित नहीं है

AddFileAction.validator URL सत्यापक यहाँ लागू किया गया है, इनपुट URL की लंबाई को मान्य नहीं करता है। बड़े आकार का URL प्रदान करके, हमलावर जांच के समय और उपयोग के समय InetAddress.getByName विधि कॉल के बीच समय अंतराल बढ़ा सकता है। बड़ा समय अंतराल हमलावर को दोष #1 का आसानी से शोषण करने की अनुमति देता है

दोष #3: URL सत्यापक इनपुट URL को अनुमति देता है यदि उसका DNS रिज़ॉल्यूशन विफल होता है

HostList.contains विधि यहाँ लागू की गई है, यदि इनपुट URL होस्टनाम का DNS रिज़ॉल्यूशन विफल होता है तो गलत (false) लौटाती है

root@kitploit:~
// Need to resolve as last resort
try {
    return contains(InetAddress.getByName(toCheck), false);
} catch (UnknownHostException e) {
    // Cannot be resolved
    return false;
}

AddFileAction.validator यह जांचने के लिए blackImageUrlHostlist.contains विधि को कॉल करता है कि इनपुट URL होस्टनाम या वह IP पता जिसे वह हल करता है, ब्लैकलिस्ट में है या नहीं। यदि कोई हमलावर होस्टनाम के DNS रिज़ॉल्यूशन को विफल कर देता है, तो IP पते की जाँच छोड़ दी जाती है और URL स्वीकार कर लिया जाता है।

हमले की रणनीति

एक होस्टनाम randomid.dns.pointer.pw पर विचार करें जिसका आधिकारिक नेमसर्वर हमलावर द्वारा नियंत्रित है। हमले की रणनीति randomid.dns.pointer.pw के DNS रिज़ॉल्यूशन को जांच के समय (validator.get().apply(u);) विफल करना और उपयोग के समय (u.openConnection()) सफल करना है। यह हमलावर को IP पता ब्लैकलिस्ट फ़िल्टर को बायपास करने और किसी भी ब्लैकलिस्टेड IP पते पर HTTP GET अनुरोध निष्पादित करने की अनुमति देता है। हमलावर इस हमले को निष्पादित करने के लिए निम्नलिखित चरणों का पालन कर सकता है

  1. अनुरोध डेटा {"add_imageurl": "http://randomid.dns.pointer.pw"} के साथ addfile क्रिया निष्पादित करके सर्वर पर InetAddress.getByName कैश को ट्रिगर करें। इस समय, आधिकारिक DNS सर्वर SERVFAIL स्थिति लौटाकर randomid.dns.pointer.pw के DNS रिज़ॉल्यूशन को विफल करने के लिए सेट किया जाएगा। InetAddress.getByName इस विफलता परिणाम को 10 सेकंड के लिए कैश करेगा
  2. उस समय को नोट करें जब उपरोक्त अनुरोध प्रतिक्रिया प्राप्त हुई थी। यह कैश प्रारंभ समय है
  3. डोमेन pointer.pw के आधिकारिक नेम सर्वर को बताएं कि होस्टनाम randomid.dns.pointer.pw के टाइप A DNS अनुरोधों के लिए 127.0.0.1 लौटाए
  4. कैश प्रारंभ समय से निर्दिष्ट अवधि के लिए प्रतीक्षा करें ताकि अगले चरण में InetAddress.getByName जांच के समय कैश्ड प्रतिक्रिया (SERVFAIL) लौटाए और उपयोग के समय (url.openConnection()) 127.0.0.1 लौटाए
  5. add_imageurl मान को http://u{25MB}:[email protected]/path/to/internal/resource.png प्रारूप पर सेट करके SSRF अनुरोध निष्पादित करें। यहाँ u{25MB} का अर्थ है कि उपयोगकर्ता नाम भाग 25 x 1024 x 1024 वर्णों की एक स्ट्रिंग है

पुनरुत्पादन के चरण

  1. https://golang.org/dl/ से golang स्थापित करें

  2. कम से कम 4GB RAM वाली वर्चुअल मशीन में गाइड https://oxpedia.org/wiki/index.php?title=AppSuite:Open-Xchange_Installation_Guide_for_Debian_9.0 और https://oxpedia.org/wiki/index.php?title=AppSuite:Documents_Installation_ Guide#Debian_GNU.2FLinux_9.0_.28valid_from_v7.10.29 का पालन करके Open-Xchange और Documents स्थापित करें

  3. poc.zip फ़ाइल डाउनलोड और निकालें

  4. टर्मिनल / कमांड लाइन खोलें और वर्तमान निर्देशिका को निकाले गए poc.zip फ़ोल्डर पर सेट करें

  5. कमांड चलाएँ

    root@kitploit:~
     go run . -serverRoot="http://172.16.66.130" -username="testuser" -password="secret" -targetPath="appsuite/v=7.10.3-9.20200409.083030/apps/themes/logo.png" -targetPort="80" -payloadSize=25 -startSleepDuration=6600
    

    जहाँ 172.16.66.130 VM का IP पता है

टूल डाउनलोड करें