
ग्रोमहैक्स लैब्स -- पेलोड लिस्ट जो वे आपके पास नहीं चाहते। 1,324 इंजेक्शन प्रोब्स मदरशिप से नीचे भेजे गए ताकि 20 वल्न क्लासेस में क्या इंजेक्ट करने योग्य है, इसका पता लगाया जा सके। हम एक्सप्लॉइट नहीं करते, हम बस दरवाजा खटखटाते हैं और देखते हैं कि कौन जवाब देता है। हर पेलोड को वास्तविक पार्सर्स के खिलाफ परखा गया क्योंकि एलियंस सबूत मांगते हैं। किसी इनपुट पर भरोसा न करें। हर चीज़ पर सवाल उठाएँ!
कोई पेलोड काम नहीं कर रहा? कृपया पेलोड, लक्ष्य संदर्भ और आपकी अपेक्षित प्रतिक्रिया के साथ एक मुद्दा खोलें। सुधार या नए पेलोड वाले पुल अनुरोधों का हमेशा स्वागत है।
अनुसंधान जारी है। यह परियोजना सक्रिय विकास के अंतर्गत है और नए पेलोड, कमजोरियों की श्रेणियों और सत्यापन सुधारों के साथ नियमित रूप से अद्यतन की जाएगी।
अस्वीकरण: ये पेलोड केवल अधिकृत सुरक्षा परीक्षण, शिक्षा और अनुसंधान उद्देश्यों के लिए प्रदान किए गए हैं। लेखक किसी भी दुरुपयोग या परिणामी प्रभावों के लिए कोई जिम्मेदारी या दायित्व नहीं लेते हैं। पूरी तरह से अपने स्वयं के जोखिम पर उपयोग करें। इस परियोजना का उपयोग करके आप अपने कार्यों की पूर्ण जिम्मेदारी स्वीकार करते हैं।
लाइसेंस: MIT - देखें LICENSE
1,353 सत्यापित इंजेक्शन पेलोड जो 20 कमजोरियों की श्रेणियों, 31 डीसीरियलाइज़ेशन फ्रेमवर्क और 14 टेम्पलेट इंजनों को कवर करते हैं। हर पेलोड एक पता लगाने योग्य संकेत उत्पन्न करता है। शून्य सैद्धांतिक पेलोड।
सत्यापन: 1,353 परीक्षित / 1,353 फायर / 0 विफल / 0 छोड़े गए 35 डॉकर टेस्टबेड स्टैक के विरुद्ध। कठोर सत्यापन वास्तविक शोषण साबित करता है (सर्वर-साइड गणना, वास्तविक पार्सर त्रुटियाँ, मापी गई समय विलंब, लक्ष्य कंटेनरों से OOB कॉलबैक) -- स्ट्रिंग मिलान नहीं।
अधिकांश सार्वजनिक रूप से उपलब्ध पेलोड सूचियाँ कमजोरी के प्रकार के अनुसार व्यवस्थित होती हैं: SQL इंजेक्शन के लिए एक सूची, XSS के लिए दूसरी, कमांड इंजेक्शन के लिए और इसी तरह। एक परीक्षक उस सूची को चुनता है जो लक्ष्य से मेल खाती है, इसे एक इंट्रूडर टूल में लोड करता है, और इसे एक पैरामीटर के विरुद्ध चलाता है। यदि वे कमजोरी की श्रेणी के बारे में गलत अनुमान लगाते हैं, तो पूरा स्कैन कुछ भी उत्पन्न नहीं करता है। यदि बैकएंड एक असामान्य डेटाबेस, एक गैर-मानक टेम्पलेट इंजन, या एक भाषा है जिसका सूची में ध्यान नहीं रखा गया है, तो पेलोड चुपचाप विफल हो जाते हैं। परीक्षक आगे बढ़ता है यह सोचकर कि पैरामीटर सुरक्षित है।
इस दृष्टिकोण की दो मूलभूत समस्याएं हैं। पहली, इसमें परीक्षक को यह जानने की आवश्यकता होती है कि उसे पता लगाने से पहले कौन सी कमजोरी मौजूद है। दूसरी, प्रचलन में अधिकांश पेलोड सैद्धांतिक हैं -- परियोजनाओं और ब्लॉग पोस्टों के बीच कॉपी किए गए बिना कभी वास्तविक पार्सर के विरुद्ध परीक्षण किए। वे सही दिखते हैं। वे वाक्यगत रूप से मान्य भी हो सकते हैं। लेकिन वे वास्तव में लक्ष्य से एक पता लगाने योग्य प्रतिक्रिया ट्रिगर नहीं करते हैं।
यह परियोजना एक अलग दृष्टिकोण अपनाती है। काम की प्राथमिक इकाई पॉलीग्लॉट है -- एक एकल पेलोड स्ट्रिंग जिसे एक साथ जितने संभव हो उतने इंजेक्शन संदर्भों में मान्य (या अर्थपूर्ण रूप से अमान्य) होने के लिए इंजीनियर किया गया है। एक पॉलीग्लॉट एक साथ सिंगल कोट्स, डबल कोट्स, पैरेंथेसिस, ब्लॉक कमेंट्स, HTML विशेषताओं, टेम्पलेट डिलिमिटर्स और बैकटिक संदर्भों से बाहर निकलता है। यह जानने की आवश्यकता नहीं है कि कमजोरी क्या है, परीक्षक हर पैरामीटर पर पॉलीग्लॉट दागता है और संकेतों को देखता है।
इस संग्रह में प्रत्येक पेलोड पहचान स्तंभों के आसपास बनाया गया है -- अवलोकनीय प्रतिक्रियाएँ जो सर्वर लॉग, स्रोत कोड या फाइलसिस्टम तक पहुंच के बिना कमजोरी के अस्तित्व की पुष्टि करती हैं:
7*191 शामिल है जो 1337 पर मूल्यांकन करती है। यदि वह संख्या प्रतिक्रिया में दिखाई देती है और पेलोड ने केवल 7*191 भेजा था (शाब्दिक 1337 नहीं), तो बैकएंड ने अभिव्यक्ति की गणना की -- कोड निष्पादन का प्रमाण।यदि कोई पेलोड अपने लक्ष्य संदर्भ के विरुद्ध परीक्षण करने पर इनमें से कम से कम एक संकेत उत्पन्न नहीं करता है, तो वह सूची में नहीं है। यहां के सभी 1,353 पेलोड को शोषण के कठोर प्रमाण के साथ उद्देश्य-निर्मित डॉकर टेस्टबेड के विरुद्ध मान्य किया गया है। शून्य सैद्धांतिक हैं।
पारंपरिक OOB और समय पेलोड शेल कमांड पर निर्भर करते हैं: curl, nslookup, ping, sleep। ये लगातार टूटते हैं। वे लक्ष्य OS, उपलब्ध PATH, कौन सा शेल कमांड की व्याख्या करता है, और क्या प्रक्रिया को उपप्रक्रियाएँ बनाने की अनुमति है, पर निर्भर करते हैं। एक curl-आधारित OOB पेलोड जो Ubuntu पर काम करता है, Alpine पर विफल होता है (कोई curl नहीं), Windows पर विफल होता है (कोई curl नहीं), और एक प्रतिबंधित कंटेनर के अंदर विफल होता है (कोई आउटबाउंड प्रक्रिया निष्पादन नहीं)।
यह परियोजना जहां भी संभव हो, शेल कमांड को भाषा-मूल बिल्ट-इन से बदल देती है। Python पेलोड urllib.request.urlopen() और time.sleep() का उपयोग करते हैं। Java पेलोड java.net.URL.openStream() और Thread.sleep() का उपयोग करते हैं। Ruby Net::HTTP.get() और Kernel.sleep का उपयोग करता है। PHP file_get_contents() और sleep() का उपयोग करता है। ये फ़ंक्शन अपनी-अपनी भाषा की प्रत्येक मानक स्थापना में मौजूद हैं -- कोई PATH लुकअप नहीं, कोई उपप्रक्रिया नहीं, कोई OS निर्भरता नहीं।
जहां मानक पुस्तकालय आयात भी अवरुद्ध हो सकते हैं (सैंडबॉक्स्ड eval, प्रतिबंधित exec), पेलोड आयात-मुक्त विकल्पों का सहारा लेते हैं: समय के लिए CPU स्पिन लूप (Python में sum(range(500000000)), Node में Atomics.wait()) और OOB के लिए रॉ सॉकेट कनेक्शन (__import__('socket').create_connection(), fsockopen(), TCPSocket.new())।
सब कुछ पॉलीग्लॉट नहीं हो सकता। टेम्पलेट इंजन मौलिक रूप से असंगत सिंटैक्स का उपयोग करते हैं -- Jinja2 में {{}} का ERB के <%= %> पर कोई अर्थ नहीं है, और न ही Freemarker के ${} के रूप में पार्स होता है। डीसीरियलाइज़ेशन प्रारूप बाइनरी या संरचित डेटा होते हैं जो एक विशिष्ट फ्रेमवर्क के लिए होते हैं। इन श्रेणियों के लिए, परियोजना समान पहचान स्तंभ प्रणाली के तहत आयोजित प्रति-इंजन पेलोड का उपयोग करती है, जिसमें 7 भाषाओं में 14 टेम्पलेट इंजन और 31 डीसीरियलाइज़ेशन फ्रेमवर्क शामिल हैं।
परिणाम एक एकल संग्रह है जहां पॉलीग्लॉट उन संदर्भों को संभालते हैं जो वे कर सकते हैं (SQLi, OS कमांड इंजेक्शन, XSS, कोड इंजेक्शन) और उद्देश्य-निर्मित प्रति-इंजन पेलोड बाकी को संभालते हैं, सभी मान्य, सभी पता लगाने योग्य संकेत उत्पन्न करते हैं, सभी लाइन-बाय-लाइन इंजेक्शन टूल के लिए तैयार हैं।
सभी 35 टेस्टबेड स्टैक, सभी 55+ एंडपॉइंट, और प्रति श्रेणी सभी 4 पहचान स्तंभों को कवर करने वाले 83 पेलोड। मान्य: 83 FIRE / 0 NO-FIRE / 0 SKIPPED।
प्रत्येक इंजेक्शन श्रेणी को जहां आर्किटेक्चरली संभव हो, त्रुटि + math + समय + OOB कवरेज मिलता है। कोड निष्पादन का समर्थन करने वाले डीसीरियलाइज़ेशन फ्रेमवर्क (Pickle, PyYAML, jsonpickle, node-serialize, XMLDecoder, .NET Json.NET) को पूर्ण बहु-स्तंभ कवरेज मिलता है। जांच तक सीमित फ्रेमवर्क (PHP unserialize, Ruby Marshal, SnakeYAML, आदि) को त्रुटि-आधारित पहचान मिलती है। गहराई के लिए पूर्ण श्रेणी सूचियों पर स्विच करने से पहले इसे हर पैरामीटर पर दागें।
| पेलोड | श्रेणी | स्तंभ |
|---|---|---|
| 4 | SQLi | error, math, timing, OOB (क्रॉस-डायलेक्ट पॉलीग्लॉट) |
| 4 | SSTI | error, math, timing, OOB (क्रॉस-इंजन पॉलीग्लॉट) |
| 3 | OS Cmd | math, timing, OOB (क्रॉस-शेल पॉलीग्लॉट) |
| 3 | Code Injection | math, timing, OOB (क्रॉस-भाषा) |
| 2 | XSS | math, OOB |
| 2 | XXE | file-read, OOB |
| 2 | SSRF | error, OOB |
| 1 | Path Traversal | file-read |
| 2 | NoSQL | math, error |
| 1 | EL Injection | math |
| 1 | Prototype Pollution | math |
| 1 | CRLF/Header | math |
| 1 | Format String | error |
| 1 | SSI | math |
| 2 | LDAP Injection | error, math |
| 3 | XSLT Injection | error, math, OOB |
| 2 | Elasticsearch | error, math |
| 2 | Cypher/Neo4j | error, timing |
| 1 | CouchDB | error |
| 3 | Groovy | math, timing, OOB |
| 41 | Deserialization | बहु-स्तंभ जहां समर्थित, अन्यथा केवल त्रुटि |
1,353 के बजाय 83 अनुरोध। Burp Intruder के लिए ready/minimal/payloads-only.txt का उपयोग करें।