RDP monster-in-the-middle (mitm) और Python के लिए लाइब्रेरी जिसमें कनेक्शनों को लाइव या बाद में देखने की क्षमता है
PyRDP एक Python रिमोट डेस्कटॉप प्रोटोकॉल (RDP) मॉन्स्टर-इन-द-मिडल (MITM) उपकरण और लाइब्रेरी है।
इसमें कुछ उपकरण शामिल हैं:
PyRDP को 2018 में पेश किया गया था जिसमें हमने प्रदर्शित किया कि हम एक वास्तविक खतरे वाले अभिनेता को कार्रवाई में पकड़ सकते हैं। यह उपकरण पेंटेस्ट और मैलवेयर अनुसंधान उपयोग मामलों दोनों को ध्यान में रखकर विकसित किया जा रहा है।

PyRDP को Python 3.7 और उससे ऊपर के संस्करणों पर x86-64, ARM और ARM64 प्लेटफार्मों पर काम करना चाहिए।
इस उपकरण का परीक्षण Linux (Ubuntu 20.04, 22.04), Raspberry Pi और Windows पर Python 3.7 पर काम करने के लिए किया गया है। macOS पर इसका परीक्षण नहीं किया गया है।
दो स्थापना तकनीकों की सिफारिश की जाती है: pipx के माध्यम से या Docker कंटेनरों का उपयोग करके। स्रोत से स्थापित करना या स्वयं Docker कंटेनर बनाना विकास दस्तावेज़ीकरण में शामिल है।
पहले, सुनिश्चित करें कि आवश्यक पैकेज स्थापित हैं (ये Ubuntu 22.04 के लिए सूचीबद्ध हैं, आपको अन्य डिस्ट्रो के लिए समायोजित करने की आवश्यकता हो सकती है)। हम दो प्रकार की स्थापना प्रदान करते हैं: एक पूर्ण और एक स्लिम। अपने उपयोग के अनुसार निर्भरताएँ स्थापित करें।```sh
sudo apt install python3 python3-pip python3-venv
build-essential python3-dev openssl
libegl1 libxcb-cursor0 libxkbcommon-x11-0 libxcb-icccm4 libxcb-keysyms1
libnotify-bin
libavcodec58 libavdevice58
sudo apt install python3 python3-pip python3-venv
build-essential python3-dev git openssl
यह PyRDP चलाने के लिए आवश्यक निर्भरताओं को स्थापित करना चाहिए। यदि आप GUI या वीडियो रूपांतरण निर्भरताओं के बिना स्थापित करना चुनते हैं, तो हेडलेस मोड (`--headless`) के बिना `pyrdp-player` का उपयोग करना या वीडियो आउटपुट उत्पन्न करने के लिए `pyrdp-convert` का उपयोग करना संभव नहीं होगा।
सुनिश्चित करें कि आपके पास `pipx` स्थापित है। Ubuntu 22.04 पर:```sh
python3 -m pip install --user pipx
python3 -m pipx ensurepath
सुनिश्चित करें कि आपने Python स्थापित किया है। Windows Store Python ने Windows 11 पर मेरे लिए काम नहीं किया। हम Scoop के माध्यम से Python स्थापित करने की सलाह देते हैं।```sh scoop install python # if not installed already scoop install pipx pipx ensurepath
लॉग आउट करें और फिर से लॉग इन करें (अपने PATH को अपडेट करने के लिए).
##### अन्य ऑपरेटिंग सिस्टम
अन्य ऑपरेटिंग सिस्टम पर `pipx` स्थापित करने के लिए यहाँ देखें: <https://github.com/pypa/pipx#install-pipx>
#### स्थापना
QT GUI और कैप्चर को वीडियो में बदलने की क्षमता के साथ पूर्ण PyRDP अनुभव के लिए:```sh
pipx install pyrdp-mitm[full]
हेडलेस वातावरण (सर्वर, RaspberryPi) में चलाने के लिए बनाए गए कॉम्पैक्ट संस्करण के लिए:```sh pipx install pyrdp-mitm
आप जाने के लिए तैयार हैं! [उपयोग निर्देश](#using-pyrdp) देखें।
### Docker इमेज का उपयोग करना
यदि आपके पास docker स्थापित और कार्यशील है तो यह सबसे आसान इंस्टॉलेशन विधि है।```sh
docker pull gosecure/pyrdp:latest
एक विकल्प के रूप में, हमारे पास GUI और ffmpeg निर्भरताओं के बिना एक पतला इमेज है। ARM प्लेटफार्मों पर यह एकमात्र प्रदान की गई इमेज है।```sh docker pull gosecure/pyrdp:latest-slim
आप सभी Docker इमेजों की सूची [gosecure/pyrdp DockerHub पृष्ठ](https://hub.docker.com/r/gosecure/pyrdp/tags) पर पा सकते हैं।
`latest` टैग नवीनतम संस्करण को संदर्भित करता है जबकि `devel` टैग हमारी `main` शाखा से निर्मित Docker इमेज है।
## PyRDP का उपयोग करना
### PyRDP Monster-in-the-Middle का उपयोग करना
MITM चलाने के लिए `pyrdp-mitm <ServerIP>` या `pyrdp-mitm <ServerIP>:<ServerPort>` का उपयोग करें।
मान लीजिए कि आपके पास `192.168.1.10` पर चल रहा एक RDP सर्वर है जो पोर्ट 3389 पर सुन रहा है, तो आप चलाएंगे:```sh
pyrdp-mitm 192.168.1.10
पहली बार MITM चलाने पर वर्तमान कार्यशील निर्देशिका के सापेक्ष pyrdp_output/ नामक एक निर्देशिका बनाई जाएगी। उस निर्देशिका का एक उदाहरण लेआउट निम्नलिखित है:```sh
pyrdp_output/
├── certs
│ ├── WinDev2108Eval.crt
│ └── WinDev2108Eval.pem
├── files
│ ├── e91c6a5eb3ca15df5a5cb4cf4ebb6f33b2d379a3a12d7d6de8c412d4323feb4c
│ ├── b14b26b7d02c85e74ab4f0d847553b2fdfaf8bc616f7c3efcc4771aeddd55700
├── filesystems
│ ├── romantic_kalam_8214773
│ │ └── device1
│ │ └── clipboard
| └── priv-esc.exe -> ../../../files/b14b26b7d02c85e74ab4f0d847553b2fdfaf8bc616f7c3efcc4771aeddd55700
│ └── happy_stonebraker_1992243
│ ├── device1
│ └── device2
| └── Users/User/3D Objects/desktop.ini -> ../../../../../../e91c6a5eb3ca15df5a5cb4cf4ebb6f33b2d379a3a12d7d6de8c412d4323feb4c
├── logs
│ ├── crawl.json
│ ├── crawl.log
│ ├── mitm.json
│ ├── mitm.log
│ ├── mitm.log.2021-08-26
│ ├── ntlmssp.log
│ ├── player.log
│ └── ssl.log
└── replays
├── rdp_replay_20231214_01-20-28_965_happy_stonebraker_1992243.pyrdp
└── rdp_replay_20231214_00-42-24_295_romantic_kalam_8214773.pyrdp
* `certs/` में प्रमाणपत्र शामिल हैं जो प्रमाणपत्र के `CN` का उपयोग करके फ़ाइल नाम के रूप में संग्रहीत किए गए हैं
* `files/` में कैप्चर की गई सभी फ़ाइलें शामिल हैं और सामग्री के SHA-256 हैश को फ़ाइल नाम के रूप में उपयोग करके उन्हें सहेज कर नकल हटाई जाती हैं
* `filesystems/` में सत्र आईडी द्वारा वर्गीकृत लक्ष्यों के फ़ाइलसिस्टम का पुनर्निर्माण शामिल है।
समान सत्रों पर स्थान बचाने के लिए, फ़ाइलें `files/` के अंतर्गत वास्तविक फ़ाइलों के प्रतीकात्मक लिंक हैं।
* `logs/` में सभी विभिन्न लॉग शामिल हैं जिनमें से अधिकांश JSON और प्लेनटेक्स्ट दोनों प्रारूपों में हैं:
* `crawl`: फ़ाइल क्रॉलर लॉग
* `mitm`: मुख्य MITM लॉग
* `ntlmssp.log`: कैप्चर किए गए NetNTLM हैश
* `player.log`: प्लेयर लॉग
* `ssl.log`: TLS मास्टर सीक्रेट्स जो Wireshark के अनुकूल प्रारूप में संग्रहीत हैं
* `replays/` में फ़ाइल नाम में टाइमस्टैम्प और सत्र आईडी के साथ पहले से रिकॉर्ड किए गए सभी PyRDP सत्र शामिल हैं
#### निजी कुंजी और प्रमाणपत्र निर्दिष्ट करना
यदि कुंजी जनरेशन काम नहीं करता है या आप एक कस्टम कुंजी और प्रमाणपत्र का उपयोग करना चाहते हैं, तो आप उन्हें `-c` और `-k` तर्कों का उपयोग करके निर्दिष्ट कर सकते हैं:```sh
pyrdp-mitm 192.168.1.10 -k private_key.pem -c certificate.pem
नेटवर्क स्तर प्रमाणीकरण (NLA) एक सुरक्षा सुविधा है जो विंडोज विस्टा से उपलब्ध है, जो RDP कनेक्शनों में सुरक्षा जोड़ती है।
NLA नए सुरक्षा समर्थन प्रदाता CredSSP पर निर्भर करता है और कभी-कभी इसे उसी नाम से संदर्भित किया जाता है।
NLA लागू करने वाले सर्वर पर हमला करना अधिक कठिन होता है।
तीन अलग-अलग रणनीतियाँ उपयोग की जा सकती हैं:
यदि हमारे पास सर्वर के प्रमाणपत्र और निजी कुंजी तक पहुंच है, तो हम NLA लागू होने पर भी सफलतापूर्वक MITM RDP कर सकते हैं।
हमने इस हमले का दस्तावेज़ीकरण अपने 1.0 रिलीज़ ब्लॉग पोस्ट में किया है।
RDP प्रमाणपत्र और निजी कुंजी निकालने के निर्देश हमारे GitHub पर उपलब्ध हैं।
प्रमाणपत्र और निजी कुंजी सुलभ होने पर, आपको बस pyrdp-mitm कमांड-लाइन पर यह जोड़कर प्रमाणीकरण को ssp पर सेट करना होगा:```sh
--auth ssp -c <certificate.pem> -k <private-key.pem>
यह NLA-लागू कनेक्शनों को इंटरसेप्ट करने की संभावना को सक्षम करेगा।
###### जब सर्वर द्वारा NLA लागू किया गया हो तो वैकल्पिक होस्ट रीडायरेक्शन

जब PyRDP गंतव्य RDP सर्वर (1) से कनेक्ट होता है, यदि वह सर्वर NLA लागू करता है, तो PyRDP (2) कनेक्शन को बदलकर आपकी पसंद के किसी अन्य होस्ट (3) पर ले जाएगा, इसके बजाय।
उदाहरण के लिए, इसका उपयोग ऐसे सर्वर पर रीडायरेक्ट करने के लिए किया जा सकता है जो NLA लागू नहीं करता है, या यह किसी हमलावर के नियंत्रण में किसी VM पर भी रीडायरेक्ट कर सकता है।
इस सुविधा को सक्षम करने के लिए वैकल्पिक होस्ट का पता और पोर्ट इस प्रकार निर्दिष्ट करें:```sh
--nla-redirection-host 192.168.1.12 --nla-redirection-port 3389
यह सुविधा PyRDP 1.1.0 में शुरू की गई थी।
NetNTLMv2 हैश एक हमलावर के लिए उपयोगी होते हैं क्योंकि उन्हें अपेक्षाकृत आसानी से क्रैक किया जा सकता है, जिससे हमलावर वैध RDP पहुंच का लाभ उठा सकते हैं या क्रेडेंशियल स्टफिंग का प्रयास कर सकते हैं।
संस्करण 1.1.0 से शुरू करके, PyRDP में NLA (CredSSP) कनेक्शन के माध्यम से क्लाइंट के NetNTLMv2 हैश को कैप्चर करने की क्षमता है, जो बातचीत को आगे बढ़ाकर और NTLMSSP प्रमाणीकरण संदेशों को कैप्चर करके काम करता है।
संस्करण 1.2.0 में उस समर्थन को बढ़ाया गया ताकि यह तब भी काम करे जब हमारे पास सर्वर का प्रमाणपत्र और निजी कुंजी न हो, जिसका अर्थ है कि कनेक्शन सफलतापूर्वक MITM नहीं किया जाएगा।
यह उसी प्रकार का है जो Responder RDP के साथ करता है।
कैप्चर किया गया NetNTLMv2 हैश ntlmssp.log लॉग फ़ाइल में पाया जा सकता है और इसे इस प्रकार स्वरूपित किया गया है कि क्रैकिंग टूल जैसे John The Ripper या hashcat इसे ग्रहण कर सकें।
इस तकनीक का एक ब्लॉग पोस्ट में विस्तार से वर्णन किया गया है: Capturing RDP NetNTLMv2 Hashes: Attack details and a Technical How-To Guide
यह सुविधा --auth ssp के साथ संगत है लेकिन --nla-redirection-host के साथ असंगत है।
यदि आप PyRDP प्लेयर के माध्यम से लाइव RDP कनेक्शन देखना चाहते हैं, तो आपको -i और -d आर्गुमेंट्स का उपयोग करके प्लेयर जिस IP पते और पोर्ट पर सुन रहा है, उसे निर्दिष्ट करना होगा। नोट: पोर्ट आर्गुमेंट वैकल्पिक है, डिफ़ॉल्ट पोर्ट 3000 है।```sh
pyrdp-mitm 192.168.1.10 -i 127.0.0.1 -d 3000
##### जब MITM सर्वर पर चल रहा हो तो PyRDP प्लेयर से कनेक्ट करना
यदि आप MITM को सर्वर पर चला रहे हैं और फिर भी लाइव RDP कनेक्शन देखना चाहते हैं, तो आपको अपने सर्वर पर एक पोर्ट को अपनी मशीन के प्लेयर पोर्ट पर अग्रेषित करने के लिए
[SSH रिमोट पोर्ट फ़ॉरवर्डिंग](https://www.booleanworld.com/guide-ssh-port-forwarding-tunnelling/)
का उपयोग करना चाहिए। एक बार ऐसा करने के बाद, आप `127.0.0.1` और अग्रेषित पोर्ट को MITM को तर्क के रूप में पास करते हैं। उदाहरण के लिए, यदि सर्वर पर पोर्ट 4000 आपकी मशीन के प्लेयर पोर्ट पर अग्रेषित है, तो यह उपयोग करने का आदेश होगा:```sh
pyrdp-mitm 192.168.1.10 -i 127.0.0.1 -d 4000
PyRDP नए कनेक्शन बनने पर स्वचालित रूप से कंसोल कमांड या PowerShell पेलोड चलाने का समर्थन करता है। RDP की प्रकृति के कारण, यह प्रक्रिया थोड़ी हैकिश है और हमेशा 100% विश्वसनीय नहीं होती। यह इस प्रकार काम करता है:
cmd.exe चलाएं।powershell -enc <PAYLOAD> के साथ चलाया जाता है।इसे काम करने के लिए, आपको 3 तर्क सेट करने होंगे:
आप चलाने के लिए पेलोड सेट करने के लिए निम्नलिखित तर्कों में से एक का उपयोग कर सकते हैं:
--payload, एक स्ट्रिंग जिसमें कंसोल कमांड हैं--payload-powershell, एक स्ट्रिंग जिसमें PowerShell कमांड हैं--payload-powershell-file, PowerShell स्क्रिप्ट का पथफिलहाल, PyRDP यह पता नहीं लगाता कि उपयोगकर्ता लॉग ऑन है या नहीं।
आपको पेलोड चलाने से पहले प्रतीक्षा करने के लिए एक समय अवधि देनी होगी।
इस समय अवधि के बीत जाने के बाद, यह नकली कुंजी अनुक्रम भेजेगा और पेलोड के ठीक से चलने की उम्मीद करेगा।
ऐसा करने के लिए, आप --payload-delay तर्क का उपयोग करते हैं। देरी मिलीसेकंड में होती है।
उदाहरण के लिए, यदि आप उम्मीद करते हैं कि उपयोगकर्ता पहले 5 सेकंड के भीतर लॉग इन हो जाएगा, तो आप निम्नलिखित तर्कों का उपयोग करेंगे:```sh
--payload-delay 5000
इसे RDPDR आरंभीकरण के दौरान आदान-प्रदान किए गए कुछ संदेशों का लाभ उठाकर और अधिक सटीक बनाया जा सकता है।
यदि आप इसे बेहतर बनाने में रुचि रखते हैं, तो [यह मुद्दा](https://github.com/GoSecure/pyrdp/issues/98) देखें।
##### सामान्य गतिविधि फिर से शुरू करने का समय चुनना
चूंकि यह जानने का कोई सीधा तरीका नहीं है कि कंसोल ने चलना बंद कर दिया है, इसलिए आपको PyRDP को बताना होगा कि आप क्लाइंट के इनपुट/आउटपुट को कितने समय तक ब्लॉक करना चाहते हैं। हम अनुशंसा करते हैं कि आप इसे उस अधिकतम समय पर सेट करें जिसके दौरान आप उम्मीद करते हैं कि आपका पेलोड चलाने वाला कंसोल दिखाई देगा। दूसरे शब्दों में, आपके पेलोड को पूरा होने में लगने वाला समय।
पेलोड अवधि सेट करने के लिए, आप `--payload-duration` तर्क का उपयोग मिलीसेकंड में समय की मात्रा के साथ करते हैं।
उदाहरण के लिए, यदि आप उम्मीद करते हैं कि आपके पेलोड को पूरा होने में 5 सेकंड तक का समय लगेगा, तो आप निम्नलिखित तर्क का उपयोग करेंगे:```sh
--payload-duration 5000
यह क्लाइंट के इनपुट/आउटपुट को 5 सेकंड के लिए ब्लॉक कर देगा, ताकि कंसोल छिपा रहे और हस्तक्षेप को रोका जा सके। 5 सेकंड के बाद, इनपुट/आउटपुट सामान्य रूप से बहाल हो जाता है।
तर्कों की पूरी सूची के लिए pyrdp-mitm --help चलाएँ।
--no-downgradeयह तर्क पायरेडीपी को हनीपॉट परिदृश्यों में चलाते समय स्कैनर फिंगरप्रिंटिंग से बचने के लिए उपयोगी है। जब स्विच सक्षम होता है, पायरेडीपी असमर्थित एक्सटेंशन को डाउनग्रेड नहीं करेगा और ट्रैफिक को पारदर्शी रूप से गुजरने देगा। प्लेयर संभवतः वीडियो ट्रैफिक को सफलतापूर्वक रीप्ले नहीं कर पाएगा, लेकिन निम्नलिखित समर्थित चैनल अभी भी सुलभ होने चाहिए:
यह सुविधा अभी भी चालू है और कनेक्शन स्थापित करने के लिए कुछ डाउनग्रेडिंग वर्तमान में अपरिहार्य है। निम्नलिखित वर्तमान में इस स्विच से प्रभावित नहीं हैं और अभी भी अक्षम रहेंगे:
नोट: यदि अंततः पूरे सत्र को रीप्ले करने में सक्षम होना महत्वपूर्ण है, तो एक अच्छा समाधान वायरशार्क का उपयोग करके कच्चे आरडीपी ट्रैफिक को रिकॉर्ड करना और टीएलएस मास्टर सीक्रेट्स को रखना है। जब भी पायरेडीपी अतिरिक्त एक्सटेंशन के लिए समर्थन जोड़ता है, तो कच्चे नेटवर्क कैप्चर से एक मान्य आरडीपी रीप्ले फ़ाइल निकालना संभव हो जाएगा।
--transparentपायरेडीपी को क्लाइंट के स्रोत आईपी पते को स्पूफ करने का प्रयास करने का निर्देश देता है ताकि सर्वर MITM पते के बजाय वास्तविक आईपी पता देखे। यह विकल्प केवल कुछ परिदृश्यों में उपयोगी है जहां MITM शारीरिक रूप से क्लाइंट और सर्वर के बीच एक गेटवे है और सभी ट्रैफिक देखता है। विशिष्ट उदाहरण यहां पाए जा सकते हैं।
नोट: इसके लिए रूट विशेषाधिकारों की आवश्यकता है, केवल लिनक्स पर काम करता है, और ट्रैफिक को सही ढंग से रूट करने के लिए मैनुअल फ़ायरवॉल कॉन्फ़िगरेशन की आवश्यकता है।
--no-gdi: त्वरित ग्राफिक्स पाइपलाइन अक्षम करेंपायरेडीपी वीडियो को सबसे हाल की ग्राफिक्स पाइपलाइन में डाउनग्रेड करता है जिसका वह समर्थन करता है। यह स्विच MITM को स्पष्ट रूप से वीडियो स्ट्रीम करने के लिए ग्राफिक्स डिवाइस इंटरफ़ेस त्वरण एक्सटेंशन का उपयोग न करने का निर्देश देता है। इस मोड का लाभ उच्च रिज़ॉल्यूशन कनेक्शन के लिए आवश्यक बैंडविड्थ में महत्वपूर्ण कमी है।
ध्यान दें कि कुछ GDI ड्रॉइंग ऑर्डर वर्तमान में लागू नहीं हैं क्योंकि वे अप्रयुक्त प्रतीत होते हैं। यदि आपके पास एक रीप्ले है जिसमें कोई असमर्थित या अनियंत्रित ऑर्डर है, तो परियोजना के अनुरक्षकों के साथ साझा करने में संकोच न करें ताकि आवश्यकतानुसार समर्थन जोड़ा जा सके। (सुनिश्चित करें कि ट्रेस में संवेदनशील जानकारी नहीं है)
प्लेयर चलाने के लिए pyrdp-player का उपयोग करें।
आप एक नई रीप्ले फ़ाइल खोलने के लिए मेनू का उपयोग कर सकते हैं: File > Open।
आप प्लेयर लॉन्च करते समय भी रीप्ले फ़ाइलें खोल सकते हैं:```sh pyrdp-player ...
#### लाइव कनेक्शन के लिए सुनना (Listening for live connections)
प्लेयर हमेशा लाइव कनेक्शन के लिए सुनता है। डिफ़ॉल्ट रूप से, सुनने का पोर्ट 3000 है, लेकिन इसे बदला जा सकता है:```sh
pyrdp-player -p <PORT>
डिफ़ॉल्ट रूप से, प्लेयर केवल स्थानीय मशीन से आने वाले कनेक्शनों को सुनता है। हम प्लेयर को अन्य मशीनों के लिए खोलने की अनुशंसा नहीं करते हैं। यदि आप फिर भी सुनने का पता बदलना चाहते हैं, तो आप इसे -b के साथ कर सकते हैं:```sh
pyrdp-player -b
#### अन्य प्लेयर तर्क
पूर्ण तर्क सूची के लिए `pyrdp-player --help` चलाएँ।
### PyRDP प्रमाणपत्र क्लोनर का उपयोग करना
नोट: इस उपकरण का उपयोग वैकल्पिक है।
संस्करण 1.0 से, PyRDP प्रमाणपत्रों को तुरंत उत्पन्न करता है ठीक वैसे ही जैसे यह उपकरण करेगा।
PyRDP प्रमाणपत्र क्लोनर एक मौजूदा RDP सर्वर के प्रमाणपत्र के मानों का उपयोग करके एक बिल्कुल नया X509 प्रमाणपत्र बनाता है। यह एक RDP सर्वर से जुड़ता है, उसका प्रमाणपत्र डाउनलोड करता है, एक नई निजी कुंजी उत्पन्न करता है और नई निजी कुंजी का उपयोग करके प्रमाणपत्र की सार्वजनिक कुंजी और हस्ताक्षर को बदल देता है। इसका उपयोग पेंटेस्ट में किया जा सकता है, उदाहरण के लिए, जब आप किसी वैध उपयोगकर्ता को अपने MITM के माध्यम से जाने के लिए धोखा देने का प्रयास कर रहे हों। एक प्रमाणपत्र का उपयोग करना जो एक वैध प्रमाणपत्र जैसा दिखता है, आपकी सफलता दर बढ़ा सकता है।
#### एक प्रमाणपत्र क्लोन करना
आप `pyrdp-clonecert` का उपयोग करके एक प्रमाणपत्र क्लोन कर सकते हैं:```sh
pyrdp-clonecert 192.168.1.10 cert.pem -o key.pem
The -o पैरामीटर जनरेट की गई प्राइवेट कुंजी के लिए उपयोग करने हेतु पथ नाम को परिभाषित करता है।
यदि आप नई प्राइवेट कुंजी जनरेट करने के बजाय अपनी खुद की प्राइवेट कुंजी का उपयोग करना चाहते हैं:```sh pyrdp-clonecert 192.168.1.10 cert.pem -i input_key.pem
#### अन्य क्लोनर तर्क
तर्कों की पूरी सूची के लिए `pyrdp-clonecert --help` चलाएँ।
### PyRDP कन्वर्ट का उपयोग करना
`pyrdp-convert` एक सहायक स्क्रिप्ट है जो विभिन्न इनपुट स्वरूपों से विभिन्न आउटपुट स्वरूपों में कई उपयोगी रूपांतरण करती है।
यह स्क्रिप्ट PyRDP द्वारा कैप्चर किए गए ट्रैफ़िक पर सबसे अच्छा काम करती है क्योंकि गैर-अवरोधित कनेक्शन में असमर्थित RDP प्रोटोकॉल सुविधाओं का उपयोग हो सकता है।
निम्नलिखित इनपुट समर्थित हैं:
- TLS मास्टर सीक्रेट के साथ नेटवर्क कैप्चर (PCAP) (कम विश्वसनीय)
- एक्सपोर्टेड PDU लेयर 7 फॉर्मेट में नेटवर्क कैप्चर (PCAP) (अधिक विश्वसनीय)
- PyRDP द्वारा उत्पन्न रीप्ले फ़ाइल
निम्नलिखित आउटपुट समर्थित हैं:
- MP4 वीडियो फ़ाइल
- JSON: JSON प्रारूप में क्रमबद्ध निम्न-स्तरीय घटनाओं का अनुक्रम
- `pyrdp-player` के साथ संगत रीप्ले फ़ाइल
एन्क्रिप्टेड (TLS) नेटवर्क कैप्चर के लिए `--secrets ssl.log` का उपयोग करके TLS मास्टर सीक्रेट प्रदान करना आवश्यक है।```sh
# Export the session coming client 10.2.0.198 to a .pyrdp file.
pyrdp-convert --src 10.2.0.198 --secrets ssl.log -o path/to/output capture.pcap
# Or as an MP4 video
pyrdp-convert --src 10.2.0.198 --secrets ssl.log -o path/to/output -f mp4 capture.pcap
# List the sessions in a network trace, along with the decryptable ones.
pyrdp-convert --list-only capture.pcap
ध्यान दें कि MP4 रूपांतरण के लिए libavcodec और ffmpeg की आवश्यकता होती है, इसलिए विंडोज पर अतिरिक्त कदम उठाने पड़ सकते हैं।
मैन्युअल रूप से डिक्रिप्ट किए गए नेटवर्क ट्रेस को Wireshark से File > Export PDUs चुनकर और OSI Layer 7 चुनकर निर्यात किया जा सकता है।
पहले, सुनिश्चित करें कि आपने Wireshark को TLS सीक्रेट लोड करने के लिए कॉन्फ़िगर किया है:

अगला, OSI Layer 7 PDU निर्यात करें:

और वैकल्पिक रूप से, डिस्प्ले फ़िल्टर लागू करके और File > Export Specified Packets... पर क्लिक करके ट्रेस को केवल रुचि के वार्तालाप(ओं) तक सीमित करें।

अब इस ट्रेस का उपयोग सीधे pyrdp-convert में किया जा सकता है।
अधिकांश PyRDP कॉन्फ़िगरेशन कमांड लाइन स्विच के माध्यम से किया जाता है, लेकिन कुछ सेटिंग्स जैसे लॉग कॉन्फ़िगरेशन के लिए कॉन्फ़िगरेशन फ़ाइल का उपयोग करना भी संभव है।
PyRDP द्वारा उपयोग की जाने वाली डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइलें mitm.default.ini और player.default.ini में स्थित हैं। दोनों फ़ाइलें पूरी तरह से दस्तावेज़ीकृत हैं और आगे के कॉन्फ़िगरेशन के लिए आधार के रूप में काम कर सकती हैं।
भविष्य में उन कॉन्फ़िगरेशन फ़ाइलों के माध्यम से PyRDP कॉन्फ़िगरेशन के अन्य पहलुओं का समर्थन करने की योजना है।
यदि आप RDP के साथ प्रयोग करने और अपने स्वयं के उपकरण बनाने में रुचि रखते हैं, तो अधिक जानकारी के लिए हमारे दस्तावेज़ीकरण अनुभाग पर जाएं।
PyRDP MITM घटक को twistd प्लगइन के रूप में भी लागू किया गया है। यह आपको इसे डीबग मोड में चलाने में सक्षम बनाता है और यदि आप twistd प्रक्रिया को SIGUSR2 भेजते हैं तो आपको एक इंटरैक्टिव डीबगिंग रेप्ल (pdb) प्राप्त करने की अनुमति देता है। अधिक जानकारी के लिए twistd दस्तावेज़ीकरण देखें।
हमने अपना स्वयं का Bettercap मॉड्यूल, rdp.proxy, विकसित किया है ताकि किसी दिए गए LAN पर सभी RDP कनेक्शनों को monster-in-the-middle किया जा सके। अधिक जानकारी के लिए यह दस्तावेज़ देखें।
चूंकि Docker होस्ट सिस्टम (फ़ाइलसिस्टम और नेटवर्क) के साथ इंटरैक्शन को प्रतिबंधित करता है, PyRDP Docker इमेज को आपके उपयोग के मामले के अनुसार कुछ पैरामीटर के साथ चलाया जाना चाहिए। यह अनुभाग उन पैरामीटर का दस्तावेज़ीकरण करता है।
हम सार्वजनिक रूप से प्रदान की गई Docker इमेज का संदर्भ लेते हैं लेकिन यदि आपने अपनी खुद की बनाई है तो gosecure/pyrdp को अपनी स्थानीय रूप से बनाई गई इमेज के नाम से बदलें।
अधिकांश monster-in-the-middle मामलों में आपको अपने होस्ट के एक पोर्ट को Docker इमेज में मैप करने की आवश्यकता होगी। यह docker run पर लागू किए गए --publish (-p) पैरामीटर द्वारा प्राप्त किया जाता है।
उदाहरण के लिए, सभी इंटरफेस पर 3389 (RDP का डिफ़ॉल्ट पोर्ट) पर सुनने के लिए, इसका उपयोग करें:```sh docker run -p 3389:3389 gosecure/pyrdp pyrdp-mitm 192.168.1.10
#### लॉग और आर्टिफैक्ट्स का भंडारण
PyRDP आउटपुट को स्थायी रूप से संग्रहीत करने के लिए (लॉग, फ़ाइलें, आदि), पिछले कमांड में `--volume` (`-v`) विकल्प जोड़ें। इस उदाहरण में हम फ़ाइलों को वर्तमान निर्देशिका के सापेक्ष `pyrdp_output` में संग्रहीत करते हैं:```sh
docker run -v $PWD/pyrdp_output:/home/pyrdp/pyrdp_output -p 3389:3389 gosecure/pyrdp pyrdp-mitm 192.168.1.10
सुनिश्चित करें कि आपकी गंतव्य निर्देशिका 1000 के UID वाले उपयोगकर्ता के स्वामित्व में है, अन्यथा आपको अनुमति अस्वीकार त्रुटियाँ मिलेंगी। यदि आप सिस्टम पर एकमात्र गैर-रूट उपयोगकर्ता हैं, तो आमतौर पर आपके उपयोगकर्ता को UID 1000 निर्धारित किया जाएगा।
यदि आप चाहते हैं कि PyRDP अपने लॉग में होस्ट IP पते को लॉग करे, तो आप docker run का उपयोग करते समय HOST_IP पर्यावरण चर सेट कर सकते हैं:```sh
docker run -p 3389:3389 -e HOST_IP=192.168.1.9 gosecure/pyrdp pyrdp-mitm 192.168.1.10
#### डॉकर में GUI प्लेयर का उपयोग करना
प्लेयर का उपयोग करने के लिए आपको होस्ट से डॉकर में `DISPLAY` पर्यावरण चर निर्यात करना होगा।
यह प्लेयर के GUI को होस्ट स्क्रीन पर रीडायरेक्ट करता है।
आपको होस्ट के नेटवर्क को उजागर करने और Qt को MIT-SHM X11 Shared Memory Extension का उपयोग करने से रोकने की भी आवश्यकता है।
ऐसा करने के लिए, run कमांड में `-e` और `--net` विकल्प जोड़ें:```sh
docker run -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 --net=host gosecure/pyrdp pyrdp-player
ध्यान रखें कि होस्ट के नेटवर्क को डॉकर के लिए उजागर करना आपके कंटेनर और होस्ट के बीच अलगाव से समझौता कर सकता है। यदि आप प्लेयर का उपयोग करने की योजना बना रहे हैं, तो SSH कनेक्शन का उपयोग करके X11 forwarding अधिक सुरक्षित तरीका होगा।
वीडियो कनवर्ट करने की प्रक्रिया PyAV, ffmpeg और QT पर निर्भर करती है, इसलिए आपको नियमित डॉकर इमेज की आवश्यकता होगी, स्लिम वाली नहीं।
आपको कंटेनर के साथ फ़ाइलें साझा करने के लिए वॉल्यूम माउंट (-v) की आवश्यकता है।
यहाँ हम अपनी स्थानीय निर्देशिका को कंटेनर में /shared/ के साथ मैप करते हैं।```sh
docker run -e QT_QPA_PLATFORM=offscreen -v $PWD/:/shared gosecure/pyrdp pyrdp-convert -f mp4 <filename-relative-to-volume-in-/shared/> -o /shared/
`QT_QPA_PLATFORM=offscreen` पर्यावरण चर आवश्यक है [यहाँ दस्तावेज़ित एक बग के कारण](https://github.com/GoSecure/pyrdp/issues/428)।
यह QT को बताता है कि कोई डिस्प्ले वातावरण उपलब्ध नहीं होना सही है।
## PyRDP किंवदंती
* [परिचय ब्लॉग पोस्ट](https://www.gosecure.net/blog/2018/12/19/rdp-man-in-the-middle-smile-youre-on-camera) जिसमें हमने [प्रदर्शित किया कि हम एक वास्तविक खतरे वाले अभिनेता को कार्रवाई में पकड़ सकते हैं](https://www.youtube.com/watch?v=eB7RC9FmL6Q)
* [NorthSec 2019 में वार्ता](https://docs.google.com/presentation/d/1avcn8Sh2b3IE7AA0G9l7Cj5F1pxqizUm98IbXUo2cvY/edit#slide=id.g404b70030f_0_581) जहाँ दो डेमो प्रस्तुत किए गए:
* [पहला डेमो](https://youtu.be/5JztJzi-m48): क्रेडेंशियल लॉगिंग, क्लिपबोर्ड चोरी, क्लाइंट-साइड फ़ाइल ब्राउज़िंग और एक सत्र अधिग्रहण
* [दूसरा डेमो](https://youtu.be/bU67tj1RkMA): क्लाइंट के सफलतापूर्वक प्रमाणित होने पर cmd या powershell पेलोड का निष्पादन
* [PyRDP लोगो](https://github.com/gosecure/pyrdp/blob/main/docs/pyrdp-logo.png) CC-BY-SA 4.0 के तहत लाइसेंस प्राप्त।
* [BlackHat USA Arsenal 2019 स्लाइड्स](https://docs.google.com/presentation/d/17P_l2n-hgCehQ5eTWilru4IXXHnGIRTj4ftoW4BiX5A/edit?usp=sharing)
* [DerbyCon 2019 स्लाइड्स](https://docs.google.com/presentation/d/1UAiN2EZwDcmBjLe_t5HXB0LzbNclU3nnigC-XM4neIU/edit?usp=sharing) ([वीडियो](https://www.youtube.com/watch?v=zgt3N6Nrnss))
* [ब्लॉग: ऑटोपायलट पर PyRDP](https://www.gosecure.net/blog/2020/02/26/pyrdp-on-autopilot-unattended-credential-harvesting-and-client-side-file-stealing/)
* [ब्लॉग: PyRDP 1.0](https://www.gosecure.net/blog/2020/10/20/announcing-pyrdp-1-0/)
* [DefCon 2020 डेमो लैब्स](https://www.youtube.com/watch?v=1q2Eo3x3u0g)
* [ब्लॉग: RDP NetNTLMv2 हैश कैप्चर करना: हमले का विवरण और एक तकनीकी कैसे-करें गाइड](https://www.gosecure.net/blog/2022/01/17/capturing-rdp-netntlmv2-hashes-attack-details-and-a-technical-how-to-guide/)
* [BlackHat USA Arsenal 2021 स्लाइड्स](https://gosecure.github.io/presentations/2021-08-05_blackhat-usa/BlackHat-USA-21-Arsenal-PyRDP-OlivierBilodeau.pdf)
* [प्रस्तुति: मैंने आपको पासा रोल करते देखा: अद्वितीय RDP निगरानी हमलावरों की कारीगरी को उजागर करती है](http://i.blackhat.com/BH-US-23/Presentations/US-23-Bilodeau-I-Watched-You-Roll-the-Die-Unparalleled-RDP-Monitoring.pdf) BlackHat USA 2023 में
## PyRDP में योगदान
हमारे [योगदान दिशानिर्देश](https://github.com/gosecure/pyrdp/blob/main/CONTRIBUTING.md) देखें।
## आभार
PyRDP निम्नलिखित ओपन-सोर्स सॉफ़्टवेयर से कोड का उपयोग करता है:
- [RC4-Python](https://github.com/bozhu/RC4-Python) RC4 कार्यान्वयन के लिए।
- [rdesktop](https://github.com/rdesktop/rdesktop) बिटमैप डीकंप्रेसन के लिए।
- [rdpy](https://github.com/citronneur/rdpy) RC4 कुंजियों, बिटमैप डीकंप्रेसन बाइंडिंग और PyRDP प्लेयर के लिए बेस GUI कोड के लिए।
- [FreeRDP](https://github.com/FreeRDP/FreeRDP) स्कैन कोड गणना के लिए।