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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
wcfproxy — net.tcp-आधारित WCF ट्रैफ़िक के लिए एक प्रॉक्सी। | Kitploit
उपकरण/GitHubGitHub/syss-research/wcfproxy
वेब प्रॉक्सी और अवरोधनएपीआई सुरक्षा परीक्षणनेटवर्क सुरक्षापेनिट्रेशन टेस्टिंगबाइनरी विश्लेषणप्रमाणीकरण
GitHubsyss-research/wcfproxy

wcfproxy

net.tcp-आधारित WCF ट्रैफ़िक के लिए एक प्रॉक्सी।

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

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

सभी देखें →

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

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

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

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

निर्माण

आप या तो टूल को एक बार कंपाइल कर सकते हैं और फिर परिणामी बाइनरी का उपयोग कर सकते हैं, या आप इसे "स्क्रिप्ट की तरह" चला सकते हैं (Go टूलचेन इसे फ्लाई पर कंपाइल करेगा)। डेवलपमेंट के लिए, बाद वाला विकल्प सुविधाजनक है। उत्पादक उपयोग के लिए, इसे एक बार (cli निर्देशिका से) कंपाइल करने और परिणामी निष्पादन योग्य का उपयोग करने की अनुशंसा की जाती है। Go कंपाइलर के लिए धन्यवाद, आप Linux या Windows के लिए और उनसे बना सकते हैं। निर्माण के लिए Go के कम से कम संस्करण 1.18 की आवश्यकता है (Go 1.23 के साथ परीक्षण किया गया)।

Linux से निर्माण

Linux से Windows या Linux के लिए बनाने के लिए, बस GOOS को उचित रूप से सेट करें (cli निर्देशिका से निष्पादित करें):``` GOOS=windows GOARCH=amd64 go build -o wcfproxy.exe

root@kitploit:~
- **मुख्य विशेषताएँ**: सिस्टम निगरानी, अलर्ट, रिपोर्टिंग
- **एकीकरण**: Prometheus, Grafana, Slack के साथ काम करता है```
GOOS=linux GOARCH=amd64 go build -o wcfproxy

विंडोज़ पर बनाएँ

विंडोज़ पर निर्माण करने के लिए, समतुल्य कमांड चलाएँ, उदाहरण के लिए PowerShell से:``` $env:GOOS='windows'; $env:GOARCH='amd64'; go build -o wcfproxy.exe

root@kitploit:~
contribute to the project. Whether you are a beginner or an experienced developer, there are many ways to get involved.

- Reporting bugs
- Suggesting enhancements
- Writing code improvements
- Improving documentation
- Helping others in discussions

## Bug Reports and Feature Requests

If you encounter a bug or have an idea for a new feature, please search the [issue tracker](https://github.com/yourproject/issues) to check if it has already been reported. If not, feel free to [open a new issue](https://github.com/yourproject/issues/new). Provide as much detail as possible to help us understand and address the issue.

## Pull Requests

1. Fork the repository.
2. Create a new branch (`git checkout -b feature-branch`).
3. Make your changes.
4. Commit your changes (`git commit -m 'Add some feature'`).
5. Push to the branch (`git push origin feature-branch`).
6. Open a pull request.

Please ensure your code adheres to our coding standards and includes appropriate tests if applicable.

## Community

Join our [Discord](https://discord.gg/example) server to connect with other users and contribute to the discussion.```
$env:GOOS='linux'; $env:GOARCH='amd64'; go build -o wcfproxy

उपयोग

wcfproxy के लिए कॉन्फ़िगरेशन एक JSON फ़ाइल के माध्यम से प्रदान किया जाता है। डिफ़ॉल्ट रूप से, कॉन्फ़िगरेशन फ़ाइल config.json का उपयोग किया जाता है, लेकिन -config पैरामीटर के साथ कॉन्फ़िगरेशन फ़ाइल का पथ निर्दिष्ट किया जा सकता है। कॉन्फ़िगर फ़ाइल में मनमानी संख्या में नामित कॉन्फ़िगरेशन होते हैं, जैसे:

root@kitploit:~
{
  "example": {
    "enabled": true,
    "listen": "127.0.0.1:8080",
    "target": "https://example.com/ws"
  }
}
``````json
{
	"my-config": { 
        " ... ": " ... " 
    }
}

नामित कॉन्फ़िग ऑब्जेक्ट्स का मान Config struct से मेल खाना चाहिए (देखें Config संरचना)। यह स्रोत फ़ाइल इसमें शामिल टिप्पणियों के साथ wcfproxy के कॉन्फ़िगरेशन विकल्पों के लिए सबसे सटीक दस्तावेज़ीकरण के रूप में भी काम करती है। प्रदान किए गए सभी कॉन्फ़िगरेशन में से, जिसे उपयोग करना है, उसकी पहचान नाम से -enable कमांड लाइन विकल्प के माध्यम से की जाती है:``` wcfproxy.exe -config config.json -enable my-config

root@kitploit:~
## कॉन्फ़िग संरचना
प्रत्येक कॉन्फ़िग ऑब्जेक्ट की शीर्ष-स्तरीय संरचना निम्नलिखित है:```json
{
	"listen": "[::1]:8000",
	"connect": "[::1]:9000",
	"retarget": "net.tcp://127.0.0.1:8000/WCFLab/WCFDemoService/nettcp",
    "retarget-map": {
        "nettcps": "net.tcp://localhost:8210/WCFLab/WCFDemoService/nettcps",
        "winauth": "net.tcp://localhost:8220/WCFLab/WCFDemoService/nettcp-winauth"
    },
	"log-level": "debug|info|warn|error",
	"log-file": "path/to/log/file",
	"tls-server": {
        " ... ": " ... " 
    },
	"tls-client": {
         " ... ": " ... "
    },
	"ntlm": {
         " ... ": " ... "
    },
	"interceptor": {
         " ... ": " ... "
    },
	"ctrl": {
         " ... ": " ... "
    }
}

ध्यान दें कि यदि NTLM कॉन्फ़िगरेशन मौजूद है तो TLS कॉन्फ़िगरेशन (tls-server और/या tls-client) प्रदान नहीं किया जा सकता है।

कॉन्फ़िगरेशन विकल्प

  • listen - TCP-एंडपॉइंट जिस पर wcfproxy को सुनना चाहिए, उदा. 127.0.0.1:8000 या [::1]:8000
  • connect - अपस्ट्रीम WCF सर्वर का TCP-एंडपॉइंट, उदा. 127.0.0.1:9000 या [::1]:9000
  • retarget - मूल लक्ष्य विनिर्देश (और retarget-map के लिए फ़ॉलबैक); स्पष्टीकरण के लिए लक्ष्य पुनर्लेखन देखें
  • retarget-map - retarget का सामान्यीकरण; कई एंडपॉइंट के लिए लक्ष्य पुनर्लेखन करने की अनुमति देता है (केवल तब उपयोगी जब एक ही पोर्ट पर कई WCF सेवाओं के साथ काम कर रहे हों)
    • यदि retarget-map में कोई कुंजी वर्तमान लक्ष्य से मेल खाती है, तो लक्ष्य URI को अपस्ट्रीम संचार के लिए दिए गए मान से बदल दिया जाएगा।
    • यदि retarget-map की कोई कुंजी वर्तमान लक्ष्य से मेल नहीं खाती, तो इसके बजाय का उपयोग किया जाएगा।

TLS सर्वर कॉन्फ़िगरेशन

TLS सर्वर-साइड कॉन्फ़िगरेशन सबसे सामान्यतः प्रासंगिक TLS सर्वर सेटिंग्स पर नियंत्रण प्रदान करता है। इसकी निम्नलिखित संरचना है:```json { "cert-pem": "path/to/certificate", "cert-key": "path/to/certificate-key", "max-version": "1.0|1.1|1.2|1.3", "min-version": "1.0|1.1|1.2|1.3", "client-roots": "path/to/client-ca1,path/to/client-ca2", "client-auth": "none|request|require-any|verify-if-given|require-and-verify", "keylog": "path/to/keylog-file" }

root@kitploit:~
#### TLS सर्वर कॉन्फ़िगरेशन विकल्प
+ `cert-pem` - X.509 प्रमाणपत्र (PEM प्रारूप में) का पथ
+ `cert-key` - प्रमाणपत्र के लिए संबंधित कुंजी का पथ
+ `max-version` - अधिकतम स्वीकार्य TLS संस्करण; `1.0`, `1.1`, `1.2`, `1.3` (डिफ़ॉल्ट) में से एक
+ `min-version` - न्यूनतम स्वीकार्य TLS संस्करण; `1.0` (डिफ़ॉल्ट), `1.1`, `1.2`, `1.3` में से एक
+ `client-roots` - क्लाइंट प्रमाणीकरण के लिए स्वीकार्य रूट प्रमाणपत्रों (PEM) के पथों की अल्पविराम से अलग की गई सूची; वैकल्पिक
+ `client-auth` - क्लाइंट प्रमाणीकरण नीति; सबसे उपयोगी मान: `none` (डिफ़ॉल्ट), `require-and-verify`
+ `keylog` - NNS प्रारूप में TLS रहस्य लिखने के लिए फ़ाइल

### TLS क्लाइंट कॉन्फ़िगरेशन
TLS क्लाइंट साइड कॉन्फ़िगरेशन सबसे सामान्यतः प्रासंगिक TLS क्लाइंट सेटिंग्स पर नियंत्रण देता है।
इसकी निम्नलिखित संरचना है:```json
{
	"cert-pem": "path/to/certificate",
	"cert-key": "path/to/certificate-key",
	"max-version": "1.0|1.1|1.2|1.3",
	"min-version": "1.0|1.1|1.2|1.3",
	"roots": "path/to/root-ca1,path/to/root-ca2",
	"server-name": "therealone.local",
	"skip-verify": false
}

TLS क्लाइंट कॉन्फ़िगरेशन विकल्प

  • TLS सर्वर कॉन्फ़िगरेशन विकल्प के अनुरूप
  • roots - रूट-CAs (PEM) के पथों की अल्पविराम से अलग की गई सूची का पथ; skip-verify के साथ वैकल्पिक
  • server-name - सर्वर का नाम (SNI); वैकल्पिक
  • skip-verify - bool; क्या क्लाइंट को सर्वर प्रमाणपत्र के सत्यापन को छोड़ देना चाहिए (डिफ़ॉल्ट: false)

NTLM कॉन्फ़िगरेशन

NTLM कॉन्फ़िगरेशन डोमेन और सर्वर नाम के साथ-साथ उपयोगकर्ता क्रेडेंशियल्स निर्दिष्ट करता है। प्रत्येक उपयोगकर्ता के लिए जो प्रॉक्सी के विरुद्ध प्रमाणित करने में सक्षम होना चाहिए, वैध क्रेडेंशियल्स प्रदान किए जाने चाहिए।```json { "domain": "test.local", "server": "server.local", "credentials": [ { " ... ": " ... " } ] }

root@kitploit:~
#### NTLM कॉन्फ़िगरेशन विकल्प
+ `domain` - प्रमाणीकरण के लिए डोमेन, जैसे test.local; यदि खाली छोड़ा जाता है, तो सर्वर का नाम उपयोग किया जाएगा
+ `server` - प्रमाणीकरण के लिए सर्वर का नाम; यदि खाली छोड़ा जाता है, तो वर्तमान सिस्टम का होस्ट नाम उपयोग किया जाएगा
+ `credentials` - `NtlmCredential` का सरणी (नीचे देखें)

NTLM credentials को `NtlmCredential` ऑब्जेक्ट्स की एक सरणी के रूप में पास किया जाता है, जिनकी निम्नलिखित संरचना है:```json
{
	"name": "wcflab",
	"password": "Sup3rS3cr3t",
	"nt-hash": "a8fc07dede90b0ec10bc1ef355f99292",
	"lm-hash": "3e9cb63e11a812cbc467021088dc706f"
}
  • name - उपयोगकर्ता नाम
  • password - उपयोगकर्ता का पासवर्ड; इससे हैश प्राप्त किए जाएंगे; किसी उपयोगकर्ता के लिए दिए गए हैश को ओवरराइड करता है
  • nt-hash - उपयोगकर्ता पासवर्ड का NT हैश (हेक्स); पासवर्ड का विकल्प
  • lm-hash - उपयोगकर्ता पासवर्ड का LM हैश (हेक्स); पासवर्ड का विकल्प; अधिकांश मामलों में आवश्यक नहीं होना चाहिए

यदि पासवर्ड प्रदान किया जाता है, तो LM हैश (सभी पासवर्ड के लिए संभव नहीं) और NT हैश इससे गणना की जाती है। इस उपयोगकर्ता के लिए कोई भी दिए गए हैश मान गणना किए गए हैश द्वारा ओवरराइट कर दिए जाएंगे। केवल उपयोगकर्ता हैश प्रदान करना भी संभव है। LM हैश अधिकांश परिदृश्यों में आवश्यक नहीं होना चाहिए।

Interceptor कॉन्फ़िगरेशन

Interceptor कॉन्फ़िगरेशन उस interceptor (नाम से) को निर्दिष्ट करता है जिसका उपयोग किया जाना चाहिए और वैकल्पिक रूप से interceptor-विशिष्ट तर्क। Interceptor की व्याख्या के लिए Interceptors देखें।

Log interceptor

Log interceptor का उपयोग करने के लिए, बस निम्नलिखित interceptor कॉन्फ़िगरेशन का उपयोग करें। आउटपुट मुख्य लॉगिंग स्थान पर लिखा जाता है, जो log-file कॉन्फ़िगरेशन के आधार पर एक फ़ाइल या stdout हो सकता है।```json { "name": "log" }

root@kitploit:~
#### HTTP इंटरसेप्टर
HTTP इंटरसेप्टर का उपयोग करने के लिए, निम्नलिखित इंटरसेप्टर कॉन्फ़िगरेशन का उपयोग करें जिसमें `server-url` और `proxy-url` के लिए उपयुक्त विकल्प हों।```json
{
	"name": "http",
	"args": {
		"server-url": "http://127.0.0.1:9999/echo",
		"proxy-url": "http://127.0.0.1:8080"
	}
}
  • args.server-url - आपके HTTP सर्वर इंटरसेप्शन एंडपॉइंट का URL (जैसे एक सरल echo एंडपॉइंट); HTTP इंटरसेप्टर कैसे काम करता है, इसके विवरण के लिए देखें HTTP Interceptor
  • args.proxy-url - HTTP प्रॉक्सी का URL; वैकल्पिक

नियंत्रण सर्वर कॉन्फ़िगरेशन

wcfproxy एक अंतर्निहित वेब सर्वर के साथ आता है जो दो कार्य करता है। पहला, यह एक HTTP एंडपॉइंट प्रदान कर सकता है जो उस पर भेजी गई सभी सामग्री को प्रतिबिंबित करता है। यह HTTP interceptor के संयोजन में उपयोगी है।```json { "ctrl": { "listen": "127.0.0.1:9999", "enable-control": false, "enable-echo": true } }

root@kitploit:~
> [!चेतावनी]  
> जो कोई भी API तक पहुंच सकता है, वह प्रदान किए गए क्रेडेंशियल्स (NTLM या TLS क्लाइंट प्रमाणपत्र) का उपयोग करके प्रमाणित कर सकता है।
> साझा सिस्टम पर यह प्रासंगिक हो सकता है भले ही API केवल स्थानीय रूप से उपलब्ध हो।

### नियंत्रण सर्वर कॉन्फ़िगरेशन विकल्प
+ `listen` - वह TCP एंडपॉइंट जहां नियंत्रण सर्वर को सुनना चाहिए
+ `enable-contorl` - संदेश इंजेक्शन या कनेक्शन स्थापना जैसी नियंत्रण सुविधाओं को सक्षम करता है (देखें [संदेश इंजेक्शन](#message-injection))
+ `enable-echo` - `http://{listen}/echo` पर एक सरल HTTP इको सर्वर सक्षम करता है

# विवरण
निम्नलिखित अनुभाग कुछ पृष्ठभूमि जानकारी प्रदान करते हैं जो WCF और कुछ कॉन्फ़िगरेशन विकल्पों को बेहतर ढंग से समझने में मदद कर सकते हैं।

## लक्ष्य पुनर्लेखन
इच्छित WCF एंडपॉइंट net.tcp प्रस्तावना के साथ-साथ SOAP लिफाफों में परिवहन किए गए `To`-हेडर में एन्कोड किया गया है।
सर्वर जांच सकते हैं कि यह एंडपॉइंट विनिर्देश अपेक्षित से मेल खाता है या नहीं।
जब क्लाइंट को मूल सर्वर के बजाय प्रॉक्सी से कनेक्ट करने के लिए हेरफेर किया जाता है, तो यह एंडपॉइंट विनिर्देश संभवतः बदल जाएगा और सर्वर संचार को अस्वीकार कर सकता है।
इसलिए आमतौर पर सर्वर को आउटगोइंग ट्रैफ़िक में एंडपॉइंट विनिर्देश को सही करना समझदारी है।
ऐसा करने के लिए, कॉन्फ़िगरेशन फ़ाइल में `retarget` विकल्प में मूल एंडपॉइंट विनिर्देश (जैसे क्लाइंट कॉन्फ़िग से प्राप्त) प्रदान करें।
एंडपॉइंट विनिर्देश आमतौर पर इस प्रकार दिखता है: `net.tcp://some/endpoint`.

जब एक साथ कई WCF एंडपॉइंट के साथ काम कर रहे हों, तो सभी के लिए लक्ष्य पुनर्लेखन करना आवश्यक हो सकता है।
इस उद्देश्य के लिए `retarget-map` विकल्प मौजूद है जो लक्ष्य URI के बीच मैपिंग को परिभाषित करता है।
जब `retarget-map` में कोई मिलान नहीं मिलता है, तो लक्ष्य URI को `retarget` में दिए गए मान में बदल दिया जाएगा।

## प्रकार संकेत
बाइनरी XML, जैसा कि `MC-NBFX` द्वारा निर्दिष्ट है, बाइनरी प्रारूप (रिकॉर्ड प्रकार) में मूल प्रकार की जानकारी को एन्कोड करता है।
इस जानकारी का सभी कुछ बाइनरी XML दस्तावेज़ के (पाठ्य) XML प्रतिनिधित्व से आसानी से पुनर्प्राप्त नहीं किया जा सकता है।
इस कारण से, *wcfproxy* XML कैरेक्टर डेटा (और कुछ विशेषता) टोकन में प्रकार संकेत सम्मिलित करता है।
ये प्रकार संकेत `<h>:` का रूप लेते हैं जहाँ `<h>` एक छोटी स्ट्रिंग है जो कुछ प्रकार को एन्कोड करती है (उदा. `i` पूर्णांक के लिए, `ch` वर्णों के लिए)।
प्रकार संकेतों की पूरी सूची [typehint.go](https://github.com/syss-research/wcfproxy/blob/HEAD/binxml/typehint.go) में पाई जा सकती है।
प्रकार संकेतों के साथ छेड़छाड़ करने की सलाह नहीं दी जाती है।

## इंटरसेप्टर
इंटरसेप्टर निर्दिष्ट करते हैं कि प्राप्त ट्रैफ़िक को कैसे संभाला जाता है और [इंटरसेप्टर कॉन्फ़िगरेशन](#interceptor-configuration) के माध्यम से निर्दिष्ट किए जाते हैं।
वे दोनों दिशाओं (क्लाइंट -> सर्वर और सर्वर -> क्लाइंट) में भेजे गए ट्रैफ़िक को संभालते हैं।
वर्तमान में दो इंटरसेप्टर हैं: **log** और **http**।

### Log इंटरसेप्टर
**log** इंटरसेप्टर बाइनरी एन्कोडेड SOAP लिफाफों को नियमित टेक्स्ट-आधारित XML का उपयोग करके एन्कोड किए गए मानव-पठनीय समकक्षों में परिवर्तित करता है।
कोई सक्रिय हेरफेर (लक्ष्य विनिर्देश पुनर्लेखन को छोड़कर) नहीं किया जाता है।
आउटपुट निर्दिष्ट लॉग स्थान (डिफ़ॉल्ट रूप से `stdout`) पर भेजा जाता है।
लॉग स्तर को `info` (या `debug`) पर सेट करना सुनिश्चित करें, अन्यथा प्रासंगिक आउटपुट दबा दिया जाता है।

### HTTP इंटरसेप्टर
**http** इंटरसेप्टर बाइनरी SOAP लिफाफों को उनके टेक्स्ट-आधारित समकक्षों में परिवर्तित करता है और उन्हें `-http-url` द्वारा निर्दिष्ट HTTP एंडपॉइंट पर भेजता है।
डिकोड किए गए SOAP संदेश अनुरोध निकाय में भेजे जाते हैं।
HTTP सर्वर को आने वाले संदेशों के समान प्रारूप में एक मान्य SOAP लिफाफा लौटाना चाहिए।
इन संदेशों को फिर मूल बाइनरी प्रारूप में वापस रूपांतरित किया जाता है और अपस्ट्रीम सर्वर को भेजा जाता है।

मूल संदेश को प्रतिबिंबित करना HTTP सर्वर के लिए हमेशा एक मान्य विकल्प है।
हालांकि, संदेशों में प्रोग्रामेटिक हेरफेर एक कस्टम HTTP सर्वर प्रदान करके भी प्राप्त किया जा सकता है जो वांछित प्रतिस्थापन करता है।
SOAP संदेशों की संरचना को तोड़ने से बचने के लिए सावधानी बरतनी चाहिए।
जब तक आप यह नहीं जानते कि आप क्या कर रहे हैं, तब तक संदेशों के प्रारूप के साथ छेड़छाड़ न करने की सलाह दी जाती है।
इसके अलावा, *wcfproxy* द्वारा डाले गए प्रकार संकेतों के साथ छेड़छाड़ नहीं की जानी चाहिए, क्योंकि इससे टेक्स्ट-आधारित SOAP संदेशों को वापस बाइनरी समकक्षों में रूपांतरित करने या वैध एंडपॉइंट (क्लाइंट या सर्वर) पर संदेश पार्सिंग टूट सकती है।

*wcfproxy* एक तुच्छ HTTP सर्वर के साथ आता है जो प्राप्त HTTP अनुरोधों के निकाय को प्रतिबिंबित करता है।
यह सर्वर तब शुरू किया जाएगा जब [नियंत्रण सर्वर कॉन्फ़िगरेशन](#control-server-configuration) प्रदान किया जाता है और `enable-echo` विकल्प `true` पर सेट होता है।
वांछित HTTP सर्वर का URL [http इंटरसेप्टर कॉन्फ़िगरेशन](#http-interceptor) में `server-url` विकल्प के माध्यम से प्रदान किया जाता है।

इंटरैक्टिव हेरफेर की अनुमति देने के लिए, एक HTTP प्रॉक्सी (जैसे BurpSuite) को `proxy-url` विकल्प के माध्यम से निर्दिष्ट किया जा सकता है।
संदेश तब निर्दिष्ट HTTP प्रॉक्सी के माध्यम से HTTP सर्वर को भेजे जाएंगे।
ध्यान दें कि प्रत्येक WCF संदेश (जैसे क्लाइंट -> सर्वर) के लिए, एक HTTP अनुरोध-प्रतिक्रिया जोड़ी उत्पन्न होती है।

संदेशों को उस net.tcp कनेक्शन से सहसंबंधित करने के लिए जहां से वे उत्पन्न हुए, हेडर `X-Wcpf-Conn-Id` को **http** इंटरसेप्टर द्वारा उत्पन्न अनुरोधों में डाला जाता है।

निम्नलिखित छवि **http** इंटरसेप्टर के साथ डेटा प्रवाह को दर्शाती है।

![http-interceptor illustration](https://raw.githubusercontent.com/syss-research/wcfproxy/HEAD/doc/http-interceptor.svg)

## TLS विकल्प
WCF (net.tcp पर) परिवहन सुरक्षा के लिए TLS का उपयोग कर सकता है।
*wcfproxy* TLS कनेक्शनों (केवल TLS 1.0 - 1.3, SSL नहीं) के अवरोधन का समर्थन करता है।
सर्वर-साइड और क्लाइंट-साइड TLS सेटिंग्स को संबंधित TLS कॉन्फ़िगरेशन (देखें [TLS सर्वर कॉन्फ़िगरेशन](#tls-server-configuration) या [TLS क्लाइंट कॉन्फ़िगरेशन](#tls-client-configuration)) के साथ नियंत्रित किया जा सकता है।

## NTLM विकल्प
*wcfproxy* NTLM प्रमाणीकरण का समर्थन करता है।
वर्तमान में, प्रत्यक्ष NTLM प्रमाणीकरण या SPNEGO के माध्यम से बातचीत समर्थित है।
आपको प्रमाणित करने वाले उपयोगकर्ता(ओं) के क्रेडेंशियल्स प्रदान करने होंगे।
ये क्रेडेंशियल्स JSON प्रारूप में प्रदान किए जाते हैं, [NTLM कॉन्फ़िगरेशन](#ntlm-configuration) देखें।
हैश पास करना `nt-hash` गुण के माध्यम से हैश प्रदान करके समर्थित है।

## संदेश इंजेक्शन और कनेक्शन स्थापना
जब [नियंत्रण सर्वर](#control-server-configuration) सक्षम होता है, तो एक छोटा HTTP API प्रदान किया जाता है जिसका उपयोग कनेक्शन स्थापित करने या समाप्त करने और मौजूदा कनेक्शनों में संदेश इंजेक्ट करने के लिए किया जा सकता है।
निम्नलिखित एंडपॉइंट उपलब्ध हैं।

### GET `/connection`
वर्तमान में सक्रिय कनेक्शनों की सूची बनाएं।
केवल-सर्वर कनेक्शनों (POST /connection/new के माध्यम से बनाए गए) के लिए, क्लाइंट को `wcfproxy` के रूप में दिखाया जाएगा।

### POST `/connection/new`
एक नया कनेक्शन बनाएं।
बॉडी एक JSON ऑब्जेक्ट होना चाहिए जो इच्छित अपग्रेड (TLS या Negotiate (NTLM)) निर्दिष्ट करता हो, यदि कोई हो।
एंडपॉइंट URI `target-uri` गुण के माध्यम से प्रदान किया जाता है।

#### उदाहरण: कोई अपग्रेड नहीं
यदि किसी अपग्रेड की आवश्यकता नहीं है, तो `upgrade` गुण को छोड़ा जा सकता है।```json
{
    "target-uri":"net.tcp://127.0.0.1:9510/example/notes-nettcp"
}

उदाहरण: TLS अपग्रेड

TLS अपग्रेड शुरू करने के लिए, अपग्रेड मैकेनिज्म tls निर्दिष्ट करें।```json { "target-uri":"net.tcp://wcf-notes.local:9511/example/notes-nettcp-tls", "upgrade": { "mechanism":"tls" } }

root@kitploit:~
#### उदाहरण: NTLM अपग्रेड
`upgrade` ऑब्जेक्ट को तंत्र के रूप में `ntlm` और प्रमाणित करने के लिए उपयोगकर्ता निर्दिष्ट करना होगा।
उपयोगकर्ता के क्रेडेंशियल `ntlm` कॉन्फ़िगरेशन के साथ प्रदान किए जाने चाहिए।```json
{
    "target-uri":"net.tcp://localhost:8203/WCFLab/WCFDemoService/nettcp-winauth",
    "upgrade": {
		"mechanism": "ntlm",
		"ntlmuser": "wcflab"
	}
}

POST /connection/{id}/kill

{id} द्वारा पहचाने गए कनेक्शन को नष्ट करें।

POST /connection/{id}/inject

इस अनुरोध के बॉडी में दिए गए संदेश को {id} द्वारा पहचाने गए कनेक्शन में इंजेक्ट करें। बॉडी उसी प्रारूप में होना चाहिए जिसका उपयोग WCF संदेशों को HTTP इंटरसेप्टर्स को अग्रेषित करने के लिए किया जाता है। इसलिए सबसे अच्छा यह है कि किसी देखे गए संदेश को कॉपी करें, आवश्यकतानुसार संशोधित करें और फिर इस एंडपॉइंट के माध्यम से इंजेक्ट करें।

डिफ़ॉल्ट रूप से, इंजेक्ट किए गए संदेशों के उत्तर नहीं दिखाए जाते हैं। हालाँकि, यदि कोई इंटरसेप्टर सक्रिय है, तो उत्तर वहाँ दिखाई देने चाहिए। सुविधा के लिए, जब क्वेरी पैरामीटर retrieve=true प्रदान किया जाता है, तो wcfproxy इंजेक्ट किए गए संदेश के उत्तर की प्रतीक्षा करता है और उसे प्रदर्शित करता है।

Connection limit

समवर्ती रूप से सक्रिय कनेक्शनों की संख्या पर एक कृत्रिम ऊपरी सीमा लागू की जाती है। यह सीमा वर्तमान में 20 पर सेट है। यह नियंत्रण API के (दुर्-)उपयोग करने पर आकस्मिक संसाधन थकावट से बचने के लिए है (देखें संदेश इंजेक्शन और कनेक्शन स्थापना)। यह वैध WCF क्लाइंट के लिए शायद ही कभी समस्या उत्पन्न करता है। हालाँकि, ऐसे उपयोग मामले हो सकते हैं जिनमें अधिक समवर्ती कनेक्शनों की आवश्यकता होती है। इस मामले में आवश्यकतानुसार proxy.go में स्थिरांक maxConnections को संशोधित करें।

Examples

निम्नलिखित उदाहरण wcfproxy के कुछ बुनियादी उपयोग को दर्शाते हैं। सटीक आउटपुट बदल सकता है, लेकिन विचार स्पष्ट होना चाहिए।

Using the log interceptor

यह उदाहरण log इंटरसेप्टर का उपयोग करके net.tcp पर सादे WCF संचार के लिए WCF प्लेग्राउंड वातावरण में wcfproxy के उपयोग को दर्शाता है।```json { "wcflab-plain": { "listen": "127.0.0.1:7201", "connect": "127.0.0.1:8201", "retarget": "net.tcp://127.0.0.1:8201/WCFLab/WCFDemoService/nettcp", "log-level": "debug", "interceptor": { "name": "log" } } }

root@kitploit:~
उपरोक्त कॉन्फ़िगरेशन (`config.json` में रखा गया) के साथ, हम इसका उपयोग नीचे दिखाए अनुसार कर सकते हैं।
प्रॉक्सी पर ट्रैफ़िक तब कंसोल (`stdout`) पर डंप किया जाना चाहिए।```
> .\wcfproxy.exe -config .\config.json -enable wcflab-plain
2025/07/10 15:03:59 dbg: local time zone (for DateTime handling): CEST
INFO:  Listening on 127.0.0.1:7201 and connecting to 127.0.0.1:8201
INFO:  No server certificates given. TLS upgrade not supported.
INFO:  No client certificates given. TLS client authentication not supported.
INFO:  Retargeting to net.tcp://127.0.0.1:8201/WCFLab/WCFDemoService/nettcp
INFO:  [proxy] Handling new connection 0: 127.0.0.1:50216 <-> 127.0.0.1:8201
INFO:  [proxy] Connection 0 established (127.0.0.1:50216 <-> 127.0.0.1:8201)
INFO:  [proxy] Envelope (Connection 0, Client -> Server):
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
 <s:Header>
  <a:Action s:mustUnderstand="c:1">ch:http://tempuri.org/IWCFDemoService/AddInts</a:Action>
  <a:MessageID>uid:urn:uuid:b2d5fc85-4bcd-6442-b701-164655365198</a:MessageID>
  <a:ReplyTo>
   <a:Address>ch:http://www.w3.org/2005/08/addressing/anonymous</a:Address>
  </a:ReplyTo>
  <a:To s:mustUnderstand="c:1">ch:net.tcp://127.0.0.1:8201/WCFLab/WCFDemoService/nettcp</a:To>
 </s:Header>
 <s:Body>
  <AddInts xmlns="http://tempuri.org/">
   <a>i:1234</a>
   <b>i:37</b>
  </AddInts>
 </s:Body>
</s:Envelope>
INFO:  [proxy] Envelope (Connection 0, Server -> Client):
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
 <s:Header>
  <a:Action s:mustUnderstand="c:1">ch:http://tempuri.org/IWCFDemoService/AddIntsResponse</a:Action>
  <a:RelatesTo>uid:urn:uuid:b2d5fc85-4bcd-6442-b701-164655365198</a:RelatesTo>
  <a:To s:mustUnderstand="c:1">ch:http://www.w3.org/2005/08/addressing/anonymous</a:To>
 </s:Header>
 <s:Body>
  <AddIntsResponse xmlns="http://tempuri.org/">
   <AddIntsResult>i:1271</AddIntsResult>
  </AddIntsResponse>
 </s:Body>
</s:Envelope>
INFO:  [proxy] Connection 0 closed (127.0.0.1:50216 <-> 127.0.0.1:8201)
ERROR: [net.tcp] Error readEnvelopeOrFaultI2R: read tcp 127.0.0.1:50217->127.0.0.1:8201: i/o timeout. Entering fault state.
INFO:  [proxy] Done handling connection 0: 127.0.0.1:50216 <-> 127.0.0.1:8201

http इंटरसेप्टर का उपयोग करना

निम्नलिखित कॉन्फ़िगरेशन http इंटरसेप्टर का उपयोग करता है और एक HTTP प्रॉक्सी के साथ संयोजन में।```json { "wcflab-plain-http": { "listen": "127.0.0.1:7201", "connect": "127.0.0.1:8201", "retarget": "net.tcp://127.0.0.1:8201/WCFLab/WCFDemoService/nettcp", "log-level": "info", "ctrl": { "listen": "127.0.0.1:9999", "enable-echo": true }, "interceptor": { "name": "http", "args": { "proxy-url": "http://127.0.0.1:8080" } } } }

root@kitploit:~
इस कॉन्फ़िगरेशन के साथ, लॉग में कुछ भी दिलचस्प नहीं दिखता है।```
> go run ./ -config .\config.json -enable wcflab-plain-http
2025/07/10 18:06:02 dbg: local time zone (for DateTime handling): CEST
2025/07/10 18:06:02 DBG - configuring intercrptor: &{http map[proxy-url:http://127.0.0.1:8080]}
INFO:  Listening on 127.0.0.1:7201 and connecting to 127.0.0.1:8201
INFO:  No server certificates given. TLS upgrade not supported.
INFO:  No client certificates given. TLS client authentication not supported.
INFO:  Retargeting to net.tcp://127.0.0.1:8201/WCFLab/WCFDemoService/nettcp
INFO:  [proxy] Starting control server on 127.0.0.1:9999 (echo enabled: true, control enabled: false)
INFO:  [proxy] Handling new connection 0: 127.0.0.1:22664 <-> 127.0.0.1:8201
ERROR: [net.tcp] Error readEnvelopeOrFaultI2R: read tcp 127.0.0.1:22665->127.0.0.1:8201: i/o timeout. Entering fault state.
INFO:  [proxy] Done handling connection 0: 127.0.0.1:22664 <-> 127.0.0.1:8201

हालांकि, WCF ट्रैफ़िक को (लगभग) नियमित SOAP लिफ़ाफ़ों में परिवर्तित किया जाता है जो HTTP के माध्यम से भेजे जाते हैं। http interceptor example image

(m)TLS अवरोधन सेट अप करना

wcfproxy को mTLS-सुरक्षित WCF ट्रैफ़िक को इंटरसेप्ट करने के लिए सेट अप किया जा सकता है, बशर्ते उपयुक्त सर्वर और क्लाइंट प्रमाणपत्र उपलब्ध हों। क्लाइंट प्रमाणीकरण के बिना TLS के लिए कॉन्फ़िगरेशन समान है; इस मामले में क्लाइंट प्रमाणपत्रों की आवश्यकता नहीं है। निम्नलिखित कॉन्फ़िगरेशन इस उपयोग केस के लिए एक उदाहरण प्रदान करता है:```json { "wcflab-mtls": { "listen": "127.0.0.1:7203", "connect": "127.0.0.1:8203", "retarget": "net.tcp://localhost:8203/WCFLab/WCFDemoService/nettcps-mtls", "interceptor": { "name": "log" }, "tls-server": { "cert-pem": "../testdata/pki/server.pem", "cert-key": "../testdata/pki/server.key" }, "tls-client": { "cert-pem": "../testdata/pki/client.pem", "cert-key": "../testdata/pki/client.key", "skip-verify": true } }

root@kitploit:~
ध्यान दें कि क्लाइंट को सर्वर प्रमाणपत्र (`server.pem`) पर भरोसा करने की आवश्यकता है।
इसके अलावा, सर्वर को *wcfproxy* के क्लाइंट भाग द्वारा प्रस्तुत प्रमाणपत्र (`client.pem`) पर भरोसा करना चाहिए।```
> .\wcfproxy.exe -config .\config.json -enable wcflab-mtls
2025/07/10 15:01:32 dbg: local time zone (for DateTime handling): CEST
INFO:  Using client certificate client-01.local (SHA256-fingerprint: 9b258653a4d5f338f2be1dafe0caf892b01d271183e52f0821d80439de4b7564)
INFO:  Listening on 127.0.0.1:7203 and connecting to 127.0.0.1:8203
INFO:  Using server certificate wcflab.local (SHA256-fingerprint: 7286ff75d3bb6dc4d96c0c8ac08dbac2204af67e0b1814b3d8c59c24d5bd781a)
INFO:  Server supports TLS versions 1.0 - 1.3
INFO:  Using client certificate client-01.local (SHA256-fingerprint: 9b258653a4d5f338f2be1dafe0caf892b01d271183e52f0821d80439de4b7564)
INFO:  Client supports TLS versions 1.0 - 1.3
INFO:  Retargeting to net.tcp://localhost:8203/WCFLab/WCFDemoService/nettcps-mtls
INFO:  [proxy] Handling new connection 0: 127.0.0.1:50214 <-> 127.0.0.1:8203
INFO:  [proxy] Connection 0 established (127.0.0.1:50214 <-> 127.0.0.1:8203)
INFO:  [proxy] Initiating TLS upgrade
INFO:  [proxy] 127.0.0.1:50214 <-> 127.0.0.1:7203: negotiated TLS 1.2 (TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)
INFO:  [proxy] 127.0.0.1:50215 <-> 127.0.0.1:8203: negotiated TLS 1.2 (TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)
INFO:  [proxy] Upgrade done
INFO:  [proxy] Envelope (Connection 0, Client -> Server):
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
 <s:Header>
  <a:Action s:mustUnderstand="c:1">ch:http://tempuri.org/IWCFDemoService/AddInts</a:Action>
  <a:MessageID>uid:urn:uuid:d36e17be-2cc2-a94f-83a7-cd2442dba24e</a:MessageID>
  <a:ReplyTo>
   <a:Address>ch:http://www.w3.org/2005/08/addressing/anonymous</a:Address>
  </a:ReplyTo>
  <a:To s:mustUnderstand="c:1">ch:net.tcp://localhost:8203/WCFLab/WCFDemoService/nettcps-mtls</a:To>
 </s:Header>
 <s:Body>
  <AddInts xmlns="http://tempuri.org/">
   <a>i:1234</a>
   <b>i:37</b>
  </AddInts>
 </s:Body>
</s:Envelope>
INFO:  [proxy] Envelope (Connection 0, Server -> Client):
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
 <s:Header>
  <a:Action s:mustUnderstand="c:1">ch:http://tempuri.org/IWCFDemoService/AddIntsResponse</a:Action>
  <a:RelatesTo>uid:urn:uuid:d36e17be-2cc2-a94f-83a7-cd2442dba24e</a:RelatesTo>
  <a:To s:mustUnderstand="c:1">ch:http://www.w3.org/2005/08/addressing/anonymous</a:To>
 </s:Header>
 <s:Body>
  <AddIntsResponse xmlns="http://tempuri.org/">
   <AddIntsResult>i:1271</AddIntsResult>
  </AddIntsResponse>
 </s:Body>
</s:Envelope>
INFO:  [proxy] Connection 0 closed (127.0.0.1:50214 <-> 127.0.0.1:8203)
ERROR: [net.tcp] Error readEnvelopeOrFaultI2R: read tcp 127.0.0.1:50215->127.0.0.1:8203: i/o timeout. Entering fault state.
INFO:  [proxy] Done handling connection 0: 127.0.0.1:50214 <-> 127.0.0.1:8203

NTLM प्रमाणीकरण सेट करना

यह मानते हुए कि WCF सेवा प्रमाणीकरण के लिए NTLM पर निर्भर करती है (सीधे या SPNEGO के माध्यम से) निम्नलिखित कॉन्फ़िगरेशन का उपयोग ट्रैफ़िक को इंटरसेप्ट करने के लिए किया जा सकता है:```json { "wcflab-ntlm": { "listen": "[::1]:7204", "connect": "[::1]:8204", "retarget": "net.tcp://localhost:8204/WCFLab/WCFDemoService/nettcp-winauth", "interceptor": { "name": "log" }, "ntlm": { "domain": "DESKTOP-65ITJF5", "credentials": [ { "name": "", "password": "" } ] } } }

root@kitploit:~
ध्यान दें कि वर्तमान में स्वचालित कॉन्फ़िगरेशन पर निर्भर रहने की तुलना में `server` या `domain` फ़ील्ड के माध्यम से होस्ट नाम प्रदान करना अधिक विश्वसनीय है।
इसके अलावा, AD डोमेन संदर्भ में प्रमाणीकरण का परीक्षण नहीं किया गया है और इसलिए फ़िलहाल इसके कार्यशील न होने की संभावना है।
जब SPNEGO का उपयोग किया जाता है, तो वर्तमान में NTLM तंत्र को प्राथमिकता दी जानी चाहिए, अन्यथा वार्ता विफल हो जाएगी।```
> .\wcfproxy.exe -config .\config.json -enable wcflab-ntlm
2025/07/10 15:15:15 dbg: local time zone (for DateTime handling): CEST
INFO:  Listening on [::1]:7204 and connecting to [::1]:8204
INFO:  No server certificates given. TLS upgrade not supported.
INFO:  No client certificates given. TLS client authentication not supported.
INFO:  Retargeting to net.tcp://localhost:8204/WCFLab/WCFDemoService/nettcp-winauth
INFO:  [proxy] Handling new connection 0: [::1]:50247 <-> [::1]:8204
INFO:  [proxy] Connection 0 established ([::1]:50247 <-> [::1]:8204)
INFO:  [proxy] Initiating Negotiate upgrade
INFO:  [NTLM server] User wcflab authenticated successfully
INFO:  [proxy] [::1]:50247 <-> [::1]:7204: negotiated NTLM
INFO:  [proxy] [::1]:50248 <-> [::1]:8204: negotiated NTLM
INFO:  [proxy] Upgrade done
INFO:  [proxy] Envelope (Connection 0, Client -> Server):
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
 <s:Header>
  <a:Action s:mustUnderstand="c:1">ch:http://tempuri.org/IWCFDemoService/AddInts</a:Action>
  <a:MessageID>uid:urn:uuid:f9cc5af3-3930-9242-be3c-d36d2a0cb09e</a:MessageID>
  <a:ReplyTo>
   <a:Address>ch:http://www.w3.org/2005/08/addressing/anonymous</a:Address>
  </a:ReplyTo>
  <a:To s:mustUnderstand="c:1">ch:net.tcp://localhost:8204/WCFLab/WCFDemoService/nettcp-winauth</a:To>
 </s:Header>
 <s:Body>
  <AddInts xmlns="http://tempuri.org/">
   <a>i:1234</a>
   <b>i:37</b>
  </AddInts>
 </s:Body>
</s:Envelope>
INFO:  [proxy] Envelope (Connection 0, Server -> Client):
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
 <s:Header>
  <a:Action s:mustUnderstand="c:1">ch:http://tempuri.org/IWCFDemoService/AddIntsResponse</a:Action>
  <a:RelatesTo>uid:urn:uuid:f9cc5af3-3930-9242-be3c-d36d2a0cb09e</a:RelatesTo>
  <a:To s:mustUnderstand="c:1">ch:http://www.w3.org/2005/08/addressing/anonymous</a:To>
 </s:Header>
 <s:Body>
  <AddIntsResponse xmlns="http://tempuri.org/">
   <AddIntsResult>i:1271</AddIntsResult>
  </AddIntsResponse>
 </s:Body>
</s:Envelope>
INFO:  [proxy] Connection 0 closed ([::1]:50247 <-> [::1]:8204)
ERROR: [net.tcp] Error readEnvelopeOrFaultI2R: read tcp [::1]:50248->[::1]:8204: i/o timeout. Entering fault state.
INFO:  [proxy] Done handling connection 0: [::1]:50247 <-> [::1]:8204
टूल डाउनलोड करें
retarget
  • log-level - लॉग स्तर; उपलब्ध मान: debug, info (डिफ़ॉल्ट), warn, error
  • log-file - लॉग फ़ाइल का पथ; यदि कोई पथ प्रदान नहीं किया गया है, तो लॉग stdout पर लिखा जाता है
  • tls-server - TlsServerConfig का उदाहरण (देखें TLS सर्वर कॉन्फ़िगरेशन); केवल तब आवश्यक है जब TLS अपग्रेड समर्थित होना चाहिए
  • tls-client - TlsClientConfig का उदाहरण (देखें TLS क्लाइंट कॉन्फ़िगरेशन); केवल प्रासंगिक यदि TLS अपग्रेड समर्थित होना चाहिए
  • ntlm - NtlmConfig का उदाहरण (देखें NTLM कॉन्फ़िगरेशन); केवल तब आवश्यक है जब NTLM अपग्रेड (सीधे या SPNEGO के माध्यम से) समर्थित होना चाहिए
  • interceptor - InterceptorConfig का उदाहरण (देखें इंटरसेप्टर कॉन्फ़िगरेशन); आवश्यक
  • ctrl - ControlServerConfig का उदाहरण (देखें नियंत्रण सर्वर कॉन्फ़िगरेशन) जो एक डिफ़ॉल्ट HTTP इको सर्वर (HTTP इंटरसेप्टर के साथ उपयोगी) के साथ-साथ संदेश प्रवाह को नियंत्रित करने के लिए एक छोटा API प्रदान कर सकता है (अभी भी विकास में है)