
Django, Flask, Laravel, Express और JWT फ्रेमवर्क्स से संवेदनशील सत्र कुकीज़ को डीकोड और अनसाइन करता है। HMAC-आधारित डिकोडर, base64 वर्डलिस्ट और तीव्र भेद्यता खोज के लिए स्वचालन पाइपलाइनों का समर्थन करता है।
CookieMonster एक कमांड-लाइन टूल और API है जो विभिन्न फ्रेमवर्क्स के असुरक्षित सत्र कुकीज़ को डिकोड और संशोधित करने के लिए है। इसे ऑटोमेशन पाइपलाइनों में चलाने के लिए डिज़ाइन किया गया है जो बड़ी संख्या में इन कुकीज़ को कुशलतापूर्वक प्रोसेस करके तेजी से कमजोरियां खोज सकें। इसके अलावा, CookieMonster एक्सटेंसिबल है और आसानी से नए कुकी फॉर्मेट का समर्थन कर सकता है।
यह जोर देने योग्य है कि CookieMonster फ्रेमवर्क्स के उपयोगकर्ताओं में कमजोरियां ढूंढता है, आमतौर पर फ्रेमवर्क्स में नहीं। ये उपयोगकर्ता फ्रेमवर्क को एक मजबूत गुप्त कुंजी का उपयोग करने के लिए कॉन्फ़िगर करके CookieMonster द्वारा पाई गई कमजोरियों को हल कर सकते हैं।
| फ्रेमवर्क | समर्थित | नोट्स |
|---|---|---|
| JSON Web Tokens | ✅ | HS256, HS384, HS512 |
| Django | ✅ | सामान्य एल्गोरिदम |
| Flask | ✅ | सामान्य एल्गोरिदम |
| Rack | ✅ | सामान्य एल्गोरिदम |
| Express (cookie-signer) | ✅ | सामान्य एल्गोरिदम |
| Laravel | ✅ | AES-CBC-128/256 (GCM अभी समर्थित नहीं) |
| itsdangerous | ✅ | URLSafeSerializer/URLSafeTimedSerializer (डिफ़ॉल्ट नमक) |
| अन्य | ❌ | अभी नहीं! |
CookieMonster स्थापित करने के लिए, Go स्थापित करें और फिर CLI स्थापित करें:
go install github.com/iangcarroll/cookiemonster/cmd/cookiemonster@latest
CookieMonster को केवल दो आवश्यक चीजों की जरूरत है: एक कुकी जिसे अनसाइन करने का प्रयास करना है, और एक वर्डलिस्ट का उपयोग करना। यदि आपके पास वर्डलिस्ट नहीं है, तो CookieMonster Flask-Unsign प्रोजेक्ट से एक डिफ़ॉल्ट वर्डलिस्ट के साथ आता है। CookieMonster वर्डलिस्ट थोड़ी अलग होती हैं; प्रत्येक पंक्ति base64 के साथ एन्कोडेड होनी चाहिए। इसका कारण यह है कि Python प्रोजेक्ट इन कुंजियों में अनावश्यक बाइट्स डालने में विशेष रूप से उदार होते हैं, और हमें उन्हें ठीक से संभालने में सक्षम होना चाहिए।
एक स्थिर कुकी के साथ CLI का उपयोग करने का एक उदाहरण, या URL के साथ:
% ./cookiemonster -cookie "gAJ9cQFYCgAAAHRlc3Rjb29raWVxAlgGAAAAd29ya2VkcQNzLg:1mgnkC:z5yDxzI06qYVAU3bkLaWYpADT4I"
🍪 CookieMonster 1.3.0
ℹ️ CookieMonster ने डिफ़ॉल्ट वर्डलिस्ट लोड की; इसमें 38919 प्रविष्टियाँ हैं।
✅ सफलता! मैंने django डिकोडर के साथ इस कुकी की कुंजी खोज ली; वह है "changeme"।
% ./cookiemonster -url "https://httpbingo.org/cookies/set?abc=gAJ9cQFYCgAAAHRlc3Rjb29raWVxAlgGAAAAd29ya2VkcQNzLg:1mgnkC:z5yDxzI06qYVAU3bkLaWYpADT4I"
🍪 CookieMonster 1.3.0
⚠️ मुझे इस URL से एक गैर-200 स्थिति कोड मिला; वह 302 था।
ℹ️ CookieMonster ने डिफ़ॉल्ट वर्डलिस्ट लोड की; इसमें 38919 प्रविष्टियाँ हैं।
✅ सफलता! मैंने django डिकोडर के साथ इस कुकी की कुंजी खोज ली; वह है "changeme"।
CookieMonster cookie-session के साथ हस्ताक्षरित कुकीज़ का समर्थन करने में सक्षम है, जो Express के साथ सामान्य है। हालांकि, यह कई अजीब चीजें करता है जिनके लिए इस टूल का उपयोग करने में सावधानी की आवश्यकता होती है। cookie-session एप्लिकेशन से एक सामान्य प्रतिक्रिया इस तरह दिखती है:
set-cookie: session=eyJhbmltYWxzIjoibGlvbiJ9
set-cookie: session.sig=Vf2INocdJIqKWVfYGhXwPhQZNFI
इसे CookieMonster में पास करने के लिए, आपको कुकी का नाम और हस्ताक्षर कुकी दोनों शामिल करने होंगे। इस उदाहरण में, आप CookieMonster को इस प्रकार कॉल करेंगे: cookiemonster -cookie session=eyJhbmltYWxzIjoibGlvbiJ9^Vf2INocdJIqKWVfYGhXwPhQZNFI (सीमांकक ^ और उपसर्गित कुकी नाम पर ध्यान दें)। API monster.NewCookie में इसी फॉर्मेट को स्वीकार करता है।
CookieMonster में एक कुकी को अनसाइन करने के बाद उसे फिर से हस्ताक्षरित करने के लिए सीमित समर्थन है, -resign फ्लैग के साथ। इसमें कुकी के बॉडी को आपके इनपुट से मेल खाने के लिए संशोधित करना शामिल है, और फिर हमारे द्वारा खोजी गई कुंजी के साथ हस्ताक्षर की पुनर्गणना करना है। वर्तमान में, आप Django-डिकोडेड कुकीज़ के लिए ऐसा कर सकते हैं; सुनिश्चित करें कि आप मूल कुकी को -cookie में पास करें, और -resign को टेक्स्ट का एक अनएन्कोडेड स्ट्रिंग पास करें जिसे आप कुकी के अंदर चाहते हैं। CookieMonster आपके इनपुट को सही ढंग से एन्कोड करेगा और फिर कुकी को फिर से हस्ताक्षरित करेगा।
CookieMonster pkg/monster को उजागर करता है, जो अन्य एप्लिकेशन को आसानी से इसका लाभ उठाने की अनुमति देता है। यदि आप कई कुकीज़ का परीक्षण कर रहे हैं तो यह CLI बूट करने की तुलना में अधिक प्रदर्शनशील है। इसका एक उदाहरण उपयोग नीचे दिया गया है।
import (
"github.com/iangcarroll/cookiemonster/pkg/monster"
"errors"
)
var (
//go:embed wordlists/my-wordlist.txt
monsterWordlist string
wl = monster.NewWordlist()
)
func init() {
if err := wl.LoadFromString(monsterWordlist); err != nil {
panic(err)
}
}
func MonsterRun(cookie string) (success bool, err error) {
c := monster.NewCookie(cookie)
if !c.Decode() {
return false, errors.New("डिकोड नहीं कर सका")
}
if _, success := c.Unsign(wl, 100); !success {
return false, errors.New("अनसाइन नहीं कर सका")
}
return true, nil
}
CookieMonster कई स्रोतों से प्रेरणा लेकर बनाया गया है, और उत्कृष्ट Flask-Unsign वर्डलिस्ट के साथ आता है।