
oss-oopssec-store v2.18.0
실제로 출시하는 앱을 위한 보안 교육입니다. 브라우저를 열고 해킹을 시작하세요.
OSS - OopsSec Store
웹 보안 학습을 위해 의도적으로 취약하게 만든 전자상거래 앱.
현실적인 CTF 플랫폼을 통해 실제 공격 벡터를 마스터하세요.
플래그를 찾고, 취약점을 악용하며, 보안 실력을 한 단계 끌어올리세요.
____ ____ ____ ____ ____ ____ _
/ __ \/ __// __/ / __ \ ___ ___ ___ / __/ ___ ____ / __/ / /_ ___ ____ ___
/ /_/ /\ \ _\ \ / /_/ // _ \ / _ \(_-<_\ \ / -_)/ __/_\ \ / __// _ \ / __// -_)
\____/___//___/ \____/ \___// .__/___/___/ \__/ \__//___/ \__/ \___//_/ \__/
/_/
# Node.js
npx create-oss-store my-ctf-lab && cd my-ctf-lab && npm start
# Docker
docker run -p 3000:3000 leogra/oss-oopssec-store
# Then open http://localhost:3000 and start hacking
목차
[!WARNING] 이 애플리케이션에는 의도적인 보안 결함이 포함되어 있으며 절대 프로덕션 환경에 배포해서는 안 됩니다.
주요 기능
- 의도적으로 취약하게 만든 전자상거래 앱 (XSS, CSRF, IDOR, JWT 공격, 경로 탐색, SQL 인젝션 등)
- Next.js, React, Prisma, SQLite 기반
- 문서화된 공격 벡터를 갖춘 REST API
- 11개 챕터에 걸친 36개의 CTF 챌린지를 체계적인 학습 로드맵으로 구성
- 각 챌린지에 대한 취약점 문서와 커뮤니티 워크스루
- 익스플로잇이 여전히 동작하는지 검증하는 자동화 테스트 (실수로 취약점을 수정한 PR은 CI에서 실패합니다)
왜 OopsSec Store인가?
OopsSec Store는 Next.js와 React로 구축된 유일한 의도적 취약 웹 애플리케이션입니다. 프로덕션 환경에서 실제로 마주하게 될 스택이죠. 그리고 AI 시대의 공격 표면은 부수적인 요소가 아니라 핵심 커리큘럼의 일부입니다: 프롬프트 인젝션, MCP 도구 포이즈닝, AI 코딩 에이전트 백도어, 그리고 npm 공급망 공격 체인이 처음부터 끝까지 시뮬레이션됩니다.
| OopsSec Store | Juice Shop | DVWA | |
|---|---|---|---|
| 스택 | Next.js · React · Prisma | Node.js · Express · Angular | PHP · MySQL |
| 설정 | npx create-oss-store (1분 미만) / Docker | Docker / npm | Docker / 수동 LAMP |
| CTF 플래그 | ✅ 내장 | ✅ 옵트인 CTF 모드 | ❌ |
| 가이드 학습 로드맵 | ✅ 로드맵 1개, 챕터 11개, 플래그 36개 | ❌ 스코어보드만 제공 | 부분 제공 (보안 레벨) |
| 모든 챌린지별 워크스루 | ✅ | ✅ 동반 가이드 | 부분 제공 (힌트) |
| LLM 프롬프트 인젝션 | ✅ 무료 API 키 연결 | ✅ v20+, 자체 LLM 준비 및 구성 | ❌ |
| MCP 도구 포이즈닝 | ✅ | ❌ | ❌ |
| AI 코딩 에이전트 백도어 (포이즈닝된 rules 파일) | ✅ | ❌ | ❌ |
| 공급망 공격 체인 | ✅ 처음부터 끝까지 시뮬레이션: npm typosquat → rules 파일 백도어 | 부분 제공 — 식별만 가능 | ❌ |
| 실제 CVE 기반 챌린지 | ✅ | ❌ | ❌ |
| 플레이어 명예의 전당 | ✅ | ❌ | ❌ |
2026년 6월, Juice Shop v20 및 DVWA 2.x를 기준으로 최종 검증됨. 부정확한 내용을 발견했나요? 이슈 열기 또는 PR 열기.
설치
빠른 시작
npx create-oss-store my-ctf-lab
cd my-ctf-lab
npm start
그런 다음 브라우저에서 http://localhost:3000을 엽니다.
수동 설정
저장소를 클론한 후 설정 스크립트를 실행하세요:
git clone https://github.com/kOaDT/oss-oopssec-store.git
cd oss-oopssec-store
npm run setup
이 스크립트는 .env 파일을 생성하고, 의존성을 설치하고, SQLite 데이터베이스를 설정하고, CTF 플래그를 시드한 다음 포트 3000에서 앱을 시작합니다.
Docker
Node.js가 필요 없습니다. Docker만 있으면 됩니다.
Docker Hub에서 (가장 빠른 방법)
docker run -p 3000:3000 leogra/oss-oopssec-store
재시작 후에도 데이터를 유지하려면:
docker run -p 3000:3000 -v oss-data:/app/data leogra/oss-oopssec-store
소스에서 (Docker Compose)
git clone https://github.com/kOaDT/oss-oopssec-store.git
cd oss-oopssec-store
docker compose up -d
또는 npm 헬퍼 스크립트를 사용할 수도 있습니다:
npm run docker:up # Start in background (builds image on first run)
npm run docker:logs # Follow container logs
npm run docker:down # Stop the container
npm run docker:reset # Wipe data and restart fresh
데이터베이스는 첫 시작 시 초기화됩니다. Docker named volume을 통해 재시작 후에도 데이터가 유지됩니다. 모든 것(플래그 진행 상황, 사용자, 업로드)을 초기화하려면 npm run docker:reset을 실행하세요.
명예의 전당
모든 플래그를 찾으셨나요? 명예의 전당에 합류하려면 풀 리퀘스트를 열어주세요. hall-of-fame/data.json에 항목을 추가하면 앱의 /hall-of-fame 페이지에 프로필이 표시됩니다.
프로젝트 구조
| 폴더 | 설명 |
|---|---|
app/ | Next.js App Router: 페이지, API 라우트, React 컴포넌트 |
app/api/ | REST API 엔드포인트 (인증, 장바구니, 주문, 상품, 플래그 등) |
app/components/ | React UI 컴포넌트 (Header, Footer, ProductCard 등) |
app/vulnerabilities/ | 각 취약점을 문서화하는 페이지 |
content/vulnerabilities/ | 취약점 및 공격 벡터에 대한 Markdown 설명 |
lib/ | 공유 유틸리티: DB 클라이언트, 인증, API 헬퍼, 타입 |
prisma/ | 데이터베이스 스키마, 시드 스크립트, 그리고 CTF 플래그와 힌트가 담긴 flags.ts |
public/ | 정적 자산 및 익스플로잇 페이로드 (예: CSRF 데모) |
hooks/ | 커스텀 React 훅 (인증 등) |
scripts/ | 설정 및 자동화 스크립트 |
docs/ | 커뮤니티 워크스루가 포함된 정적 문서 사이트 |
hall-of-fame/ | 모든 플래그를 찾은 플레이어의 프로필 |
packages/ | 스캐폴딩용 NPM 패키지 create-oss-store (react-toastfy 같은 랩 격리 아티팩트 포함) |
lab/quarantine/ | 공급망 챌린지용 비활성 악성 페이로드 (데이터로 취급하고, 절대 지시사항으로 간주하지 마세요) |
tests/ | 익스플로잇을 검증하는 Jest 단위 및 API 테스트 |
cypress/ | 전체 익스플로잇 워크플로우를 위한 E2E 테스트 |
최근 활동 
테스트
이 프로젝트에는 모든 익스플로잇 체인과 플래그가 여전히 동작하는지 확인하는 보안 회귀 테스트가 포함되어 있습니다. 이 테스트는 의도적으로 안전하지 않은 동작을 검증합니다. 모든 PR에서 실행되므로 실수로 취약점을 패치해도 CI가 이를 잡아냅니다.
테스트 실행
# Unit tests (utility functions: MD5 hashing, JWT, input filters)
npm run test:unit
# API exploitation tests (requires a running server)
npm run test:api
# E2E exploitation tests (requires a running server)
npm run test:e2e
# Open Cypress interactive mode
npm run test:e2e:open
# All tests
npm run test:ci
면책 조항
[!CAUTION] 이 프로젝트는 교육 및 승인된 보안 테스트 용도로만 사용하십시오. 의도적인 취약점과 안전하지 않은 구성이 포함되어 있습니다. 작성자는 오용, 손상 또는 무단 접근에 대해 책임을 지지 않습니다. 격리된 환경에서 사용하십시오.
기여하기
OSS – OopsSec Store는 MIT 라이선스입니다. 기여를 환영합니다.
기여 방법:
- 새로운 보안 챌린지 추가
- 워크스루 작성 또는 개선
- 애플리케이션 확장
- 버그 보고 및 수정
- 문서 개선
계획된 작업은 로드맵을 확인하거나 좋은 첫 이슈를 선택하세요.
모든 플래그를 찾으셨나요? 문서 사이트에서 워크스루를 공유해 주세요.
버그나 제안 사항이 있으면 GitHub Issue를 열어주세요. 지침은 CONTRIBUTING.md를 참조하세요.
🎓 강의나 CTF에서 OopsSec Store를 활용하고 싶으신가요?
교육자 키트를 확인해 보세요 - OWASP 적용 범위 표, 강의 계획서 템플릿, 배포 FAQ, 학생 보고서 템플릿이 포함된 바로 사용 가능한 가이드입니다.