
प्रॉम्प्ट इंजेक्शन, टूल-कॉल दुरुपयोग, और छह सिम्युलेटेड चैटबॉट पर्सोना के विरुद्ध OSINT पर निर्देशित पाठों के साथ स्थानीय AI कैप्चर-द-फ्लैग प्लेटफ़ॉर्म।
प्रॉम्प्ट इंजेक्शन में नए तकनीकी विशेषज्ञों के लिए निर्देशित पाठों के साथ एक स्थानीय AI Capture-the-Flag। खिलाड़ी छह AI पर्सोना (एक छिपा हुआ) का भी पता लगा सकते हैं जो प्रॉम्प्ट-इंजेक्शन, टूल-कॉल दुरुपयोग, बिज़नेस-लॉजिक हेरफेर, सप्लाई-चेन फिंगरप्रिंटिंग, वेब रेकॉन और OSINT के माध्यम से 20 फ़्लैग की रक्षा करते हैं।
निर्देशित पथ में डायरेक्ट इंजेक्शन, टूल प्राधिकरण, और एक संपादन योग्य ज्ञान लेख के माध्यम से इंजेक्शन शामिल है। यह संकेत, सहेजे गए प्रयास, टूल साक्ष्य, पूर्णता प्रतिक्रिया, और संरक्षित टूल तुलनाएँ प्रदान करता है। मूल अभ्यास लैब मैन्युअल इवेंट स्कोरिंग बनाए रखते हैं। मॉडल इन्फरेंस Ollama के माध्यम से स्थानीय रूप से चलता है; बिल्ड और मॉडल डाउनलोड के बाद, कोर प्लेटफ़ॉर्म को इंटरनेट कनेक्शन की आवश्यकता नहीं होती है।
Email Joe in Product Sales एक सिम्युलेटेड इनबॉक्स और Windows-शैली डेस्कटॉप जोड़ता है। एक ईमेल लिखें जिसे Joe का सहायक पढ़ेगा, फिर वास्तविक मॉडल सारांश और रिकॉर्ड की गई क्रियाएँ देखें। तीन उद्देश्य एक भ्रामक बिक्री ब्रीफ, एक काल्पनिक आंतरिक फ़ाइल का प्रकटीकरण, और एक अनधिकृत छूट को कवर करते हैं। किसी मेल सर्वर, Windows, Wine, या अतिरिक्त मॉडल की आवश्यकता नहीं है।
ai-ctf/
├── README.md ← आप यहाँ हैं
├── LICENSE ← MIT
├── platform/ ← वह सब कुछ जो Docker में चलता है
│ ├── flags.toml ← केंद्रीय कॉन्फ़िग: फ़्लैग मानों को अनुकूलित करने के लिए इसे संपादित करें
│ ├── docker-compose.yml ← तीन सेवाएँ: web, ollama, decoy
│ ├── Dockerfile ← वेब ऐप इमेज
│ ├── app/ ← FastAPI स्रोत (config, personas, tools, chat)
│ ├── data/init.sql ← SQLite स्कीमा + नकली-कर्मचारी सीड डेटा
│ ├── decoy/ ← दो फ़्लैग पृष्ठों वाला छोटा nginx
│ └── scripts/
│ ├── apply_flags.py ← flags.toml मानों को स्थिर फ़ाइलों में अंकित करता है
│ ├── render_secret.py ← कंटेनर स्टार्टअप पर चलता है
│ └── dump_chats.py ← चैट लॉग को HTML के रूप में निर्यात करता है (इवेंट-दिवस उपकरण)
├── external_artifacts/ ← जो आप GitHub / Gist / DNS पर पुश करते हैं
│ ├── README.md ← सेटअप चेकलिस्ट
│ ├── anvil_chatkit/ ← नकली सप्लाई-चेन पैकेज
│ ├── gist_content.md ← इसे एक सार्वजनिक Gist में पेस्ट करें
│ └── dns_records.txt ← आपके डोमेन में जोड़ने के लिए TXT रिकॉर्ड
└── docs/ ← इवेंट चलाने का दस्तावेज़ीकरण
├── ANSWER_KEY.md ← निर्देशित समाधान + मूल 20-फ़्लैग उत्तर
├── CHEAT_SHEET.md ← कार्यशील समाधान + श्रेणीबद्ध संकेत (केवल GM)
├── OPERATIONS.md ← अपडेट, बैकअप, और समस्या निवारण
├── SETUP_RUNBOOK.md ← सप्ताह-भर का, चरण-दर-चरण
└── EVENT_DAY_NOTES.md ← ब्रीफिंग स्क्रिप्ट + समस्या निवारण
निर्देशित पथ के लिए नीचे दिए गए क्विक स्टार्ट का उपयोग करें। संचालन गाइड अपडेट, बैकअप, रिकवरी, और इवेंट-पूर्व जाँचों को कवर करती है। उत्तर कुंजी, चीट शीट, सेटअप रनबुक, और इवेंट नोट्स वैकल्पिक मूल CTF प्रारूप का वर्णन करते हैं।
apply_flags.py और
dump_chats.py सहायक स्क्रिप्ट के लिए उपयोग किया जाता है — ऐप स्वयं Docker के अंदर चलता है)।exiftool (केवल तभी आवश्यक है जब आप EXIF फ़्लैग बदलते हैं और चाहते हैं कि
apply_flags.py लोगो को फिर से अंकित करे)।pip install और Ollama मॉडल पुल के लिए)।
उसके बाद कोर स्थानीय स्टैक ऑफ़लाइन चलता है। वैकल्पिक बाहरी OSINT श्रृंखला को इंटरनेट एक्सेस की आवश्यकता होती है।git clone https://github.com/mubix/ai-ctf.git
cd ai-ctf/platform
# 1. Session secret
echo "SESSION_SECRET=$(python3 -c 'import secrets; print(secrets.token_hex(32))')" > .env
# 2. (Optional) Customize flag values — see "Customizing the flags" below.
# Default values work fine for a smoke test.
# 3. Build and start
docker compose build
docker compose up -d ollama
docker compose exec ollama ollama pull qwen2.5:7b-instruct-q4_K_M
docker compose up -d
# 4. Open the platform
open http://localhost:18080/ # or your-machine-ip:18080 on another laptop
एक उपयोगकर्ता नाम पंजीकृत करें; प्लेटफ़ॉर्म एक 12-वर्ण का पासवर्ड जनरेट करता है और इसे एक बार दिखाता है। इसे बाद के लिए सहेजें। आप स्वचालित रूप से साइन इन हो जाते हैं और Start learning चुन सकते हैं। लौटने वाले खिलाड़ी सहेजी गई प्रगति को फिर से शुरू करने के लिए लॉग इन कर सकते हैं।
Compose प्रोजेक्ट का नाम ai-ctf है और इसका अपना नेटवर्क और मॉडल वॉल्यूम है।
केवल वेब UI एक होस्ट पोर्ट प्रकाशित करता है: डिफ़ॉल्ट रूप से 18080। दूसरा पोर्ट चुनने के लिए
platform/.env में CTF_WEB_PORT सेट करें। Ollama और decoy के कोई प्रकाशित
होस्ट पोर्ट नहीं हैं; ऐप अपने स्वयं के Ollama कंटेनर से कनेक्ट होता है। कोई GPU पासथ्रू
कॉन्फ़िगर नहीं है। CPU और मेमोरी अभी भी होस्ट पर अन्य वर्कलोड के साथ साझा की जाती हैं।
यदि किसी भिन्न Compose प्रोजेक्ट नाम के अंतर्गत बनाए गए स्टैक को अपग्रेड कर रहे हैं, तो उसका
कंटेनर और मॉडल वॉल्यूम का पुन: उपयोग करने के लिए उस नाम को docker compose -p YOUR_EXISTING_PROJECT ... के साथ रखें। प्रोजेक्ट नाम बदलने से एक अलग स्टैक बनता है।
निर्देशित Customer Service पाठ प्रत्येक प्रयास के लिए निश्चित इवेंट टोकन के बजाय एक नया ऑडिट टोकन उपयोग करता है। यह सादे-पाठ प्रकटीकरणों को पहचानता है और किए गए उदाहरण को देखने को उसके बिना हल करने से अलग करता है। नए प्रयास पिछली बातचीत और अर्जित प्रगति को संरक्षित रखते हैं। इसका शुरुआती प्रोफ़ाइल जानबूझकर एक दावा किए गए सपोर्ट-ऑपरेटर रोल पर भरोसा करता है; मूल Customer Service अभ्यास बॉट अलग रहता है। मौजूदा निर्देशित प्रयास खिलाड़ी के नए सिरे से शुरू करने तक अपनी पुरानी प्रोफ़ाइल बनाए रखते हैं।
दो और निर्देशित पाठ अलग-अलग काल्पनिक फ़िक्स्चर का उपयोग करते हैं: HR टूल एक्सेस, फिर एक संपादन योग्य ज्ञान लेख जो एक सिम्युलेटेड उत्तर को पुनर्निर्देशित कर सकता है। वे उन फ़िक्स्चर टूल के विरुद्ध स्कीमा-सत्यापित मॉडल क्रिया अनुरोध निष्पादित करते हैं, टूल कॉल रिकॉर्ड करते हैं, और उनके परिणामों को सत्यापित करते हैं। खिलाड़ी एक अनुमति जाँच के माध्यम से समान तर्कों को फिर से चला सकते हैं और एक वैध-उपयोग नियंत्रण का निरीक्षण कर सकते हैं। यह तुलना टूल सीमा की जाँच करती है, न कि दूसरे मॉडल रन की। कुछ भी ईमेल नहीं किया जाता है और कोई वास्तविक HR सेवा जुड़ी नहीं है। मूल पर्सोना अपने मूल उत्तरों और मैन्युअल स्कोरिंग के साथ स्व-निर्देशित अभ्यास लैब बने रहते हैं।
ईमेल परिदृश्य All lessons → Email Joe से उपलब्ध है। इसका File Explorer
C:\Users\Joe\Documents\Sales जैसे परिचित पथों का उपयोग करता है; ये इन-मेमोरी
फ़िक्स्चर की पहचान करते हैं और कभी भी होस्ट फ़ाइलसिस्टम का उपयोग नहीं करते हैं। प्रत्येक ईमेल को नई काल्पनिक फ़ाइलें,
एक आउटबॉक्स, और एक बिक्री रिकॉर्ड मिलता है। कहानी की घटनाओं को देखे गए मॉडल
और टूल गतिविधि से अलग लेबल किया जाता है। फ़ाइल-प्रकटीकरण और रिकॉर्ड-परिवर्तन उद्देश्यों के लिए निष्पादित क्रियाओं की आवश्यकता होती है,
सारांश में किसी दावे की नहीं। किसी भी टूल उद्देश्य को एप्लिकेशन जाँचों के साथ फिर से चलाने के लिए
Enforce Joe's tool permissions सक्षम करें, फिर सामान्य उपयोग की जाँच के लिए एक साफ़ उदाहरण भेजें।
प्रयास, संकेत, किए गए उदाहरण का उपयोग, और प्रगति सहेजी जाती है।
मौजूदा इंस्टॉलेशन के लिए, एप्लिकेशन/टेम्पलेट परिवर्तनों के लिए वेब इमेज को फिर से बनाना आवश्यक है; केवल पुनः आरंभ करने से अद्यतन कोड कॉपी नहीं होता है:
cd platform
docker compose up -d --build web
पाठ तालिकाएँ स्टार्टअप पर बनाई जाती हैं, बिना मौजूदा खातों या चैट इतिहास को हटाए। अपडेट से पहले मौजूदा इंस्टॉलेशन का बैकअप लेने और यह जाँचने के लिए कि खिलाड़ी बाद में अपने पाठ फिर से शुरू कर सकते हैं, संचालन गाइड का पालन करें।
प्लेटफ़ॉर्म 20 में से 16 फ़्लैग स्वयं-समाहित करता है। शेष 4 (#14–17) के लिए
बाहरी इंफ्रास्ट्रक्चर की आवश्यकता होती है जिसे आप स्वयं पुश करते हैं — देखें
external_artifacts/README.md। यदि आप केवल इन-प्लेटफ़ॉर्म
आधा हिस्सा चाहते हैं तो उस चरण को छोड़ दें।
सभी 20 फ़्लैग मान एक फ़ाइल में रहते हैं: platform/flags.toml। अपने इवेंट को अपना स्वाद देने के लिए
वहाँ मान संपादित करें (अलग flag{adjective_noun}
टोकन, अलग कूपन कोड, अलग CEO वेतन, आदि)।
संपादन के बाद:
cd platform
python3 scripts/apply_flags.py # stamps values into static files
docker compose up -d --build web decoy # copies updated assets into the images
apply_flags.py उन फ़ाइलों को अपडेट करता है जो रनटाइम पर Python द्वारा लोड नहीं की जाती हैं:
data/init.sql (CEO वेतन, फ़्लैग #4)decoy/html/private/index.html और decoy/html/internal-tools/index.htmlapp/static/logo.jpg EXIF मेटाडेटा (फ़्लैग #20 — PATH पर exiftool आवश्यक)external_artifacts/ फ़ाइलें (chatkit README, gist सामग्री, DNS रिकॉर्ड,
setup-history.sh कमिट संदेश)किसी भी फ़्लैग मान को बदलने के बाद, docs/ANSWER_KEY.md को भी अपडेट करें ताकि आपकी
सत्यापनकर्ता शीट मेल खाए।
पुनर्निर्माण SQLite डेटाबेस में पहले से मौजूद कर्मचारी पंक्तियों को अपडेट नहीं करता: सीड
INSERT OR IGNORE का उपयोग करता है। मौजूदा इवेंट में CEO वेतन बदलने के लिए अभी भी एक लक्षित
फ़िक्स्चर माइग्रेशन की आवश्यकता होती है। उस परिवर्तन को लागू करने के लिए खिलाड़ी डेटाबेस को हटाएँ नहीं।
यदि आप पूरी तरह से फ़्लैग जोड़ना या हटाना चाहते हैं (कौन से पर्सोना मौजूद हैं, बदलें,
बाहरी श्रृंखला हटाएँ, एक नया टूल जोड़ें), तो सीधे platform/app/personas/__init__.py
और platform/app/tools.py संपादित करें। कोई DSL नहीं है — पर्सोना ही
गेम हैं।
platform/app/personas/__init__.py) — कम
गार्डरेल क्लॉज़, कम "NEVER" पंक्तियाँ, कम स्पष्ट इनकार उदाहरण।
खिलाड़ियों की पहले-प्रयास सफलता दर बढ़ जाती है।docker-compose.yml में OLLAMA_MODEL संपादित करें, उस मॉडल को पुल करें,
और कॉन्फ़िगरेशन लागू करने के लिए docker compose up -d web चलाएँ। अकेले मॉडल का आकार
कठिनाई स्थापित नहीं करता। इवेंट-पूर्व जाँचों का उपयोग करके सामान्य कार्यों, किए गए उदाहरणों, नेटिव टूल कॉल,
और संरचित क्रिया प्रतिक्रियाओं को फिर से जाँचें।file:// LFI ट्रिगर करें।मूल हमला कैटलॉग और ऐतिहासिक उदाहरण प्रॉम्प्ट docs/CHEAT_SHEET.md में हैं।
docs/SETUP_RUNBOOK.md सप्ताह-भर की चेकलिस्ट है (बिल्ड → बाहरी आर्टिफैक्ट →
ड्राई रन → इवेंट दिवस)। docs/EVENT_DAY_NOTES.md में खिलाड़ी-ब्रीफिंग स्क्रिप्ट,
श्रेणीबद्ध संकेत कैटलॉग, और एक समस्या निवारण तालिका है।
इवेंट-दिवस फोरेंसिक्स के लिए — "वास्तव में किसने क्या हल किया?" — बाइंड-माउंटेड SQLite DB के विरुद्ध
platform/scripts/dump_chats.py चलाएँ ताकि प्रति-संदेश फ़्लैग-डिटेक्शन चिप्स के साथ एक स्व-समाहित HTML रिपोर्ट तैयार हो।
ये सबस्ट्रिंग मिलान हैं, इस बात का प्रमाण नहीं कि किसी सहायक ने कोई रहस्य प्रकट किया या कोई टूल निष्पादित किया। निर्देशित
पाठ अपने स्वयं के सत्यापित पूर्णता रिकॉर्ड रखते हैं।
डिफ़ॉल्ट ctf_log.html निर्यात, रनटाइम डेटा, स्थानीय वातावरण फ़ाइलें, और रिलीज़
संग्रह Git द्वारा अनदेखे किए जाते हैं। कस्टम-नामित निर्यात और डिप्लॉयमेंट बैकअप को चेकआउट के बाहर
या अनदेखी की गई platform/data/ निर्देशिका में रखें। खिलाड़ी रिकॉर्ड, क्रेडेंशियल,
और चैट निर्यात निजी रहने चाहिए।
MIT। देखें LICENSE।
हैंड्स-ऑन AI सुरक्षा प्रशिक्षण के लिए Rob Fuller (mubix) द्वारा बनाया गया। कोड अधिकतर AI-जनित; डिज़ाइन निर्णय और सामग्री एक मानव के स्वामित्व में।