CTF思路
点击放大

<di="center">
CTF for AI agents — the 🥇 1st & 🥈 2nd place solutions, plus a li history
<sub>An 8-hour sprint at Divar's AI Contest on Quera, where LLM agents raced to capture the flag.</sub>
🗓 July 10, 2025 (19 Tir 1404) · ⏱ ~8 hours · 👥 2,874 registered · 🎯 11 problems · 💰 143M Toman prize pool
!Python
!LLM
!Gateway
!Style
<img src="docs/assets/scoreboard.jpg" alt="Quera li — Pourya Erfanzadeh at rank 2 of 2,874" width="100%">
<sub>📊 The li with ~3 hours still on the clock — sitting at <b>#2 of 2,874</b>. 😎 (That's Danial down at #6 — he'd claw his way to a final 🥈 #2.)</sub>
</div>
---
Divar — Iran's largest classifieds platform (37M+ monthly users) — ran a one-day, indi AI contest on Quera, testing practical LLM engineering: prompt design, output e, tool routing, and debugging LLM-based systems.
The twist: you don't submit *answers* — you submit an agent. Each problem requires a solution.py exposing a Di class whose capture_the_flag(question) method receives the task as raw text and must autonomously figure out the rest: find the URL, download the file, decode the cipher, train the model, fix the code — and return the flag. LLM access was provided through the Metis AI OpenAI-compatible gateway.
The stakes — a 143,000,000 Toman prize pool split across the top 10 in a *re* payout (55M · 34M · 21M · 13M · 8M · 5M · 3M · 2M · 1M · 1M — yes, those are Fibonacci numbers 🌀), swag for ranks 11–1000, and the top ~100 scorers fast-tracked to interviews for Divar's AI Software Engineer role.
Curious how the contest itself was engineered? The design story — agent CTF format, mirrored datasets, token budgets — lives in docs/CONTEST_DESIGN.md.
Cleaned-up, per-problem solutions li here in the P* folders:
| # | Problem | Persian | The Challenge | The Agent's Play |
|---|---------|---------|---------------|------------------|
| P1 | The Cryptic Photo | عکس گنگ | An image hides Caesar-encrypted text | GPT-4.1-mini OCR → brute-force Caesar shifts → flag |
| P2 | Monkey Wrench | آچار فرانسه | Mixed bag: logic puzzles *or* live web pages — agent must pick its tool | URL-sniffing router: few-shot chain-of-thought for riddles, requests + BeautifulSoup for the web |
| P3 | Two John Wicks | دو جان ویک | Concurrency shoot-out: threads racing on shared counters | Pure Python — threading.Lock vs. multiprocessing.Value, no LLM needed 🔫🔫 |
| P4 | Sound, Image, Action | صدا، تصویر، حرکت | One question, four modalities: Excel, audio, PDF, image | Modality router → LLM writes pandas code and the agent execs it, transcription, PDF extraction, |
| P6 | Hodgepodge Stew | آش شله قلمکار | Train a model on a CSV and predict hotel a for given IDs | Full scikit-learn pipeline: imputation + scaling + one-hot → LogisticRegression |
| P7 | Homemade Cursor | کرسر خانگی | A zipped codebase with a planted bug — fix it and run it | A mini coding agent: unzip → LLM locates & patches the bug → execute → output |
| P8 | The Secret Keeper | رازنگهدار | A poem guards a password | Acrostic decode (first letter of each line) → LLM spell-check → flag |
<sub>The grand finale «دیوار ایجنت» (*Di*) and every other problem above is also solved in first_place/ — the 🥇 winner's submissions.</sub>
> [!NOTE]
> «سوناتا» (*Sonata*) is unsolved. None of the three contestants in this repo submitted a solution for it, and the problem statement isn't archived here either. If you have it, PRs welcome. 🎵
This repository was the li during the contest. The commit history on main and the test-* branches is a real-time log of an 8-hour sprint — scoreboard feedback baked straight into the commit messages:
Every one of those battle branches has since been merged into main — run git log --graph --all and the whole contest replays in front of you. The frozen tips are still browsable:
| Branch | What froze there |
|--------|------------------|
| test-di | First working agent (Test 1) |
| test-5 | The multimodal battle: Excel + audio + PDF + image |
| test-cursor | The "homemade Cursor" — downloads a codebase, finds the bug, fixes it, runs it |
| test-cypher | OCR + Caesar decryption, EasyOCR → GPT-4 |
| Danial | 📦 Post-contest: all se, cleaned and organized per problem |
The war_room/ folder preserves the final mid-contest state of the li — frozen at the digital escape-room solver (4 puzzle rooms → 3-digit key → HMAC-SHA256 flag), test harness and sample data included.
Three separate contestants' work lives here: the P* folders are Danial's (🥈 2nd), first_place/ is Ali Salesi's (🥇 1st), and war_room/ plus the branch history is the repo owner's live run.
You'll need a Metis AI API key (OpenAI-compatible gateway used by the contest). In war_room/, test_local.py reads it from a METIS_API_KEY env var or .env file.
This was a solo contest — the work of three separate competitors ended up in this repo:
first_place/, built on LangGraph ReAct agentsP* folders (via the Danial branch)main & test-*, peaking at #2 on the mid-contest scoreboard ☝️---
<di="center">
<sub>⚡ Built in one afternoon, under contest pressure, with LLMs fixing code while humans fixed prompts.</sub>
</div>
开发语言:Python
Star 数:145
该项目属于CTF思路方向的开源资源,代码结构清晰,适合安全研究人员学习参考。项目围绕CTF for AI agents. 1st & 2nd place LLM-agent solutions to Divar's AI Contest on Quera, built on GPT-4.1-mini (via Metis AI) with LangGraph ReAct agents.展开,提供了可运行的实现,对理解相关安全机制、工具原理与攻防技术具有较高的研究价值。
从技术实现角度看,此类项目的核心在于对底层原理的深入理解与工程化落地。开发者在研究过程中可以结合官方文档与社区讨论,梳理项目的初始化流程、核心模块职责与数据流转,逐步掌握其中的技术细节与设计思路。
1. 下载源码压缩包,解压到本地环境。
2. 根据项目类型准备对应的运行环境与依赖。
3. 按照 README 中的步骤完成配置与部署。
4. 在隔离的测试环境中运行验证,避免影响生产系统。
本资源来源于开源社区,仅供安全研究、技术学习与合法授权范围内的攻防演练使用,请勿用于任何非法或侵害他人权益的用途。使用本项目产生的一切后果由使用者自行承担。
| 资源标题 | Divar-AI-Contest - 人工智能代理CTF。第一和第二名LLM代理解决方案 |
| 所属分类 | CTF思路 |
| 发布作者 | admin |
| 发布时间 | 2026-10-05 23:50:32 |
| 下载权限 | 免费下载 |
| 附件数量 | 2 个下载链接 |
| 浏览次数 | 386 |
| 讨论数量 | 0 |
| 主题状态 | 正常讨论中 |