विशेष HTTP हेडर

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

वर्डलिस्ट और उपकरण

स्थान बदलने के लिए हेडर

IP स्रोत को फिर से लिखें:

  • X-Originating-IP: 127.0.0.1
  • X-Forwarded-For: 127.0.0.1
  • X-Forwarded: 127.0.0.1
  • Forwarded-For: 127.0.0.1
  • X-Forwarded-Host: 127.0.0.1
  • X-Remote-IP: 127.0.0.1
  • X-Remote-Addr: 127.0.0.1
  • X-ProxyUser-Ip: 127.0.0.1
  • X-Original-URL: 127.0.0.1
  • Client-IP: 127.0.0.1
  • X-Client-IP: 127.0.0.1
  • X-Host: 127.0.0.1
  • True-Client-IP: 127.0.0.1
  • Cluster-Client-IP: 127.0.0.1
  • Via: 1.0 fred, 1.1 127.0.0.1
  • Connection: close, X-Forwarded-For (हॉप-बाय-हॉप हेडर की जांच करें)

स्थान को फिर से लिखें:

  • X-Original-URL: /admin/console
  • X-Rewrite-URL: /admin/console

हॉप-बाय-हॉप हेडर

एक हॉप-बाय-हॉप हेडर एक ऐसा हेडर है जिसे वर्तमान में अनुरोध को संभालने वाले प्रॉक्सी द्वारा संसाधित और उपभोग करने के लिए डिज़ाइन किया गया है, न कि एक एंड-टू-एंड हेडर।

  • Connection: close, X-Forwarded-For

{{#ref}} ../../pentesting-web/abusing-hop-by-hop-headers.md {{#endref}}

HTTP अनुरोध स्मगलिंग

  • Content-Length: 30
  • Transfer-Encoding: chunked

{{#ref}} ../../pentesting-web/http-request-smuggling/ {{#endref}}

कैश हेडर

सर्वर कैश हेडर:

  • X-Cache में प्रतिक्रिया का मान miss हो सकता है जब अनुरोध कैश नहीं किया गया था और मान hit हो सकता है जब इसे कैश किया गया है
  • हेडर Cf-Cache-Status में समान व्यवहार
  • Cache-Control यह संकेत करता है कि क्या एक संसाधन कैश किया जा रहा है और अगली बार कब संसाधन फिर से कैश किया जाएगा: Cache-Control: public, max-age=1800
  • Vary अक्सर प्रतिक्रिया में अतिरिक्त हेडर को कैश कुंजी का हिस्सा के रूप में संकेत करने के लिए उपयोग किया जाता है, भले ही वे सामान्यतः अनकीड न हों।
  • Age उस समय को परिभाषित करता है जो वस्तु प्रॉक्सी कैश में रही है।
  • Server-Timing: cdn-cache; desc=HIT यह भी संकेत करता है कि एक संसाधन कैश किया गया था

{{#ref}} ../../pentesting-web/cache-deception/ {{#endref}}

स्थानीय कैश हेडर:

  • Clear-Site-Data: हेडर जो संकेत करता है कि कैश को हटाया जाना चाहिए: Clear-Site-Data: "cache", "cookies"
  • Expires: उस दिनांक/समय को शामिल करता है जब प्रतिक्रिया समाप्त होनी चाहिए: Expires: Wed, 21 Oct 2015 07:28:00 GMT
  • Pragma: no-cache Cache-Control: no-cache के समान
  • Warning: सामान्य HTTP हेडर Warning संदेश की स्थिति के साथ संभावित समस्याओं के बारे में जानकारी प्रदान करता है। एक प्रतिक्रिया में एक से अधिक Warning हेडर दिखाई दे सकते हैं। Warning: 110 anderson/1.3.37 "Response is stale"

शर्तें

  • इन हेडरों का उपयोग करने वाले अनुरोध: If-Modified-Since और If-Unmodified-Since केवल तब डेटा के साथ उत्तर दिया जाएगा जब प्रतिक्रिया हेडर Last-Modified में एक अलग समय हो।
  • If-Match और If-None-Match का उपयोग करने वाले शर्तीय अनुरोध एक Etag मान का उपयोग करते हैं ताकि वेब सर्वर प्रतिक्रिया की सामग्री भेजे यदि डेटा (Etag) बदल गया है। Etag HTTP प्रतिक्रिया से लिया जाता है।
  • Etag मान आमतौर पर प्रतिक्रिया की सामग्री के आधार पर गणना की जाती है। उदाहरण के लिए, ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI" यह संकेत करता है कि Etag 37 बाइट्स का Sha1 है।

रेंज अनुरोध

  • Accept-Ranges: संकेत करता है कि क्या सर्वर रेंज अनुरोधों का समर्थन करता है, और यदि हां, तो रेंज को किस इकाई में व्यक्त किया जा सकता है। Accept-Ranges: <range-unit>
  • Range: उस दस्तावेज़ के भाग को इंगित करता है जिसे सर्वर को लौटाना चाहिए। उदाहरण के लिए, Range:80-100 मूल प्रतिक्रिया के 80 से 100 बाइट्स को 206 Partial Content स्थिति कोड के साथ लौटाएगा। अनुरोध से Accept-Encoding हेडर को हटाना भी याद रखें।
  • यह एक प्रतिक्रिया प्राप्त करने के लिए उपयोगी हो सकता है जिसमें मनमाने रूप से परावर्तित जावास्क्रिप्ट कोड हो जो अन्यथा बचाया जा सकता है। लेकिन इसका दुरुपयोग करने के लिए आपको अनुरोध में ये हेडर इंजेक्ट करने की आवश्यकता होगी।
  • If-Range: एक शर्तीय रेंज अनुरोध बनाता है जो केवल तब पूरा होता है जब दिया गया etag या तिथि दूरस्थ संसाधन से मेल खाती है। असंगत संसाधन के संस्करणों से दो रेंज डाउनलोड करने से रोकने के लिए उपयोग किया जाता है।
  • Content-Range: यह इंगित करता है कि एक पूर्ण शरीर संदेश में एक आंशिक संदेश कहाँ संबंधित है।

संदेश शरीर की जानकारी

  • Content-Length: संसाधन का आकार, दशमलव संख्या में बाइट्स।
  • Content-Type: संसाधन के मीडिया प्रकार को इंगित करता है
  • Content-Encoding: संकुचन एल्गोरिदम को निर्दिष्ट करने के लिए उपयोग किया जाता है।
  • Content-Language: मानव भाषा(ओं) का वर्णन करता है जो दर्शकों के लिए लक्षित है, ताकि यह उपयोगकर्ता को उनके अपने पसंदीदा भाषा के अनुसार भेद करने की अनुमति दे।
  • Content-Location: लौटाए गए डेटा के लिए एक वैकल्पिक स्थान को इंगित करता है।

पेंटेस्ट के दृष्टिकोण से यह जानकारी आमतौर पर "व्यर्थ" होती है, लेकिन यदि संसाधन 401 या 403 द्वारा संरक्षित है और आप इस जानकारी को प्राप्त करने का कोई तरीका खोज सकते हैं, तो यह दिलचस्प हो सकता है।
उदाहरण के लिए, एक HEAD अनुरोध में Range और Etag का संयोजन पृष्ठ की सामग्री को HEAD अनुरोधों के माध्यम से लीक कर सकता है:

  • Range: bytes=20-20 हेडर के साथ एक अनुरोध और एक प्रतिक्रिया जिसमें ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y" है, यह लीक कर रहा है कि बाइट 20 का SHA1 ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y है

सर्वर जानकारी

  • Server: Apache/2.4.1 (Unix)
  • X-Powered-By: PHP/5.3.3

नियंत्रण

  • Allow: यह हेडर यह संप्रेषित करने के लिए उपयोग किया जाता है कि एक संसाधन कौन से HTTP विधियों को संभाल सकता है। उदाहरण के लिए, इसे Allow: GET, POST, HEAD के रूप में निर्दिष्ट किया जा सकता है, जो इंगित करता है कि संसाधन इन विधियों का समर्थन करता है।
  • Expect: क्लाइंट द्वारा उपयोग किया जाता है ताकि अनुरोध को सफलतापूर्वक संसाधित करने के लिए सर्वर को जो अपेक्षाएँ पूरी करनी चाहिए, उन्हें संप्रेषित किया जा सके। एक सामान्य उपयोग मामला Expect: 100-continue हेडर से संबंधित है, जो संकेत करता है कि क्लाइंट एक बड़ा डेटा पेलोड भेजने का इरादा रखता है। क्लाइंट ट्रांसमिशन के आगे बढ़ने से पहले 100 (Continue) प्रतिक्रिया की प्रतीक्षा करता है। यह तंत्र नेटवर्क उपयोग को अनुकूलित करने में मदद करता है क्योंकि यह सर्वर की पुष्टि की प्रतीक्षा करता है।

डाउनलोड

  • HTTP प्रतिक्रियाओं में Content-Disposition हेडर यह निर्देशित करता है कि क्या एक फ़ाइल को inline (वेबपृष्ठ के भीतर) प्रदर्शित किया जाना चाहिए या एक संलग्नक (डाउनलोड किया गया) के रूप में माना जाना चाहिए। उदाहरण के लिए:
Content-Disposition: attachment; filename="filename.jpg"

यह मतलब है कि "filename.jpg" नामक फ़ाइल को डाउनलोड और सहेजने के लिए बनाया गया है।

सुरक्षा हेडर

सामग्री सुरक्षा नीति (CSP)

{{#ref}} ../../pentesting-web/content-security-policy-csp-bypass/ {{#endref}}

विश्वसनीय प्रकार

CSP के माध्यम से विश्वसनीय प्रकारों को लागू करके, अनुप्रयोगों को DOM XSS हमलों से सुरक्षित रखा जा सकता है। विश्वसनीय प्रकार यह सुनिश्चित करते हैं कि केवल विशेष रूप से तैयार किए गए ऑब्जेक्ट्स, जो स्थापित सुरक्षा नीतियों के अनुरूप हैं, खतरनाक वेब API कॉल में उपयोग किए जा सकते हैं, इस प्रकार डिफ़ॉल्ट रूप से JavaScript कोड को सुरक्षित करते हैं।

javascript
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
}
javascript
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = "some string" // Throws an exception.
const escaped = policy.createHTML("<img src=x onerror=alert(1)>")
el.innerHTML = escaped // Results in safe assignment.

X-Content-Type-Options

यह हेडर MIME प्रकार की स्निफ़िंग को रोकता है, एक प्रथा जो XSS कमजोरियों की ओर ले जा सकती है। यह सुनिश्चित करता है कि ब्राउज़र सर्वर द्वारा निर्दिष्ट MIME प्रकारों का सम्मान करें।

X-Content-Type-Options: nosniff

X-Frame-Options

क्लिकजैकिंग से लड़ने के लिए, यह हेडर यह सीमित करता है कि दस्तावेज़ों को <frame>, <iframe>, <embed>, या <object> टैग में कैसे एम्बेड किया जा सकता है, सभी दस्तावेज़ों को उनकी एम्बेडिंग अनुमतियों को स्पष्ट रूप से निर्दिष्ट करने की सिफारिश करता है।

X-Frame-Options: DENY

Cross-Origin Resource Policy (CORP) और Cross-Origin Resource Sharing (CORS)

CORP यह निर्दिष्ट करने के लिए महत्वपूर्ण है कि कौन से संसाधन वेबसाइटों द्वारा लोड किए जा सकते हैं, क्रॉस-साइट लीक को कम करते हुए। दूसरी ओर, CORS एक अधिक लचीला क्रॉस-ओरिजिन संसाधन साझा करने का तंत्र प्रदान करता है, कुछ शर्तों के तहत समान-उत्पत्ति नीति को ढीला करते हुए।

Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

Cross-Origin Embedder Policy (COEP) और Cross-Origin Opener Policy (COOP)

COEP और COOP क्रॉस-ओरिजिन आइसोलेशन को सक्षम करने के लिए आवश्यक हैं, जो स्पेक्ट्रे-जैसे हमलों के जोखिम को काफी कम करते हैं। वे क्रमशः क्रॉस-ओरिजिन संसाधनों के लोडिंग और क्रॉस-ओरिजिन विंडोज के साथ इंटरैक्शन को नियंत्रित करते हैं।

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups

HTTP Strict Transport Security (HSTS)

अंत में, HSTS एक सुरक्षा विशेषता है जो ब्राउज़रों को केवल सुरक्षित HTTPS कनेक्शनों के माध्यम से सर्वरों के साथ संवाद करने के लिए मजबूर करती है, इस प्रकार गोपनीयता और सुरक्षा को बढ़ाती है।

Strict-Transport-Security: max-age=3153600

Header Name Casing Bypass

HTTP/1.1 header field-नामों को केस-इंसेंसिटिव के रूप में परिभाषित करता है (RFC 9110 §5.1)। फिर भी, यह बहुत सामान्य है कि कस्टम मिडलवेयर, सुरक्षा फ़िल्टर, या व्यावसायिक लॉजिक जो शाब्दिक हेडर नाम की तुलना करते हैं, पहले केस को सामान्य किए बिना (जैसे header.equals("CamelExecCommandExecutable"))। यदि ये जांचें केस-सेंसिटिवली की जाती हैं, तो एक हमलावर उन्हें बस एक अलग पूंजीकरण के साथ वही हेडर भेजकर बायपास कर सकता है।

इस गलती के प्रकट होने वाली सामान्य स्थितियाँ:

  • कस्टम अनुमति/निषेध सूचियाँ जो संवेदनशील घटक तक पहुँचने से पहले "खतरनाक" आंतरिक हेडर को ब्लॉक करने की कोशिश करती हैं।
  • इन-हाउस रिवर्स-प्रॉक्सी pseudo-headers (जैसे X-Forwarded-For की सफाई) का कार्यान्वयन।
  • फ्रेमवर्क जो प्रबंधन / डिबग एंडपॉइंट्स को उजागर करते हैं और प्रमाणीकरण या कमांड चयन के लिए हेडर नामों पर निर्भर करते हैं।

Abusing the bypass

  1. एक हेडर की पहचान करें जो सर्वर-साइड पर फ़िल्टर या मान्य किया जाता है (उदाहरण के लिए, स्रोत कोड, दस्तावेज़, या त्रुटि संदेश पढ़कर)।
  2. विभिन्न केस के साथ वही हेडर भेजें (मिश्रित-केस या अपर-केस)। क्योंकि HTTP स्टैक्स आमतौर पर हेडर को केवल उपयोगकर्ता कोड चलने के बाद मानकीकरण करते हैं, कमजोर जांच को छोड़ दिया जा सकता है।
  3. यदि डाउनस्ट्रीम घटक हेडर को केस-इंसेंसिटिव तरीके से मानता है (अधिकतर ऐसा ही होता है), तो यह हमलावर-नियंत्रित मान को स्वीकार करेगा।

Example: Apache Camel exec RCE (CVE-2025-27636)

Apache Camel के कमजोर संस्करणों में Command Center रूट्स अविश्वसनीय अनुरोधों को ब्लॉक करने की कोशिश करते हैं, हेडर CamelExecCommandExecutable और CamelExecCommandArgs को हटा कर। तुलना equals() के साथ की गई थी, इसलिए केवल सटीक लोअरकेस नामों को हटाया गया।

bash
# Bypass the filter by using mixed-case header names and execute `ls /` on the host
curl "http://<IP>/command-center" \
-H "CAmelExecCommandExecutable: ls" \
-H "CAmelExecCommandArgs: /"

हेडर exec घटक तक बिना फ़िल्टर किए पहुँचते हैं, जिसके परिणामस्वरूप कैमेल प्रक्रिया के विशेषाधिकारों के साथ दूरस्थ कमांड निष्पादन होता है।

पहचान और शमन

  • सभी हेडर नामों को एकल केस (आमतौर पर लोअरकेस) में सामान्यीकृत करें पहले अनुमति/अस्वीकृति तुलना करने से।
  • संदिग्ध डुप्लिकेट्स को अस्वीकार करें: यदि दोनों Header: और HeAdEr: मौजूद हैं, तो इसे एक विसंगति के रूप में मानें।
  • सकारात्मक अनुमति-सूची का उपयोग करें जो कैनोनिकलाइजेशन के बाद लागू की जाती है।
  • प्रबंधन अंत बिंदुओं को प्रमाणीकरण और नेटवर्क विभाजन के साथ सुरक्षित करें।

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें