
실제로 출시하는 앱을 위한 보안 교육입니다. 브라우저를 열고 해킹을 시작하세요.
____ ____ ____ ____ ____ ____ _
/ __ \/ __// __/ / __ \ ___ ___ ___ / __/ ___ ____ / __/ / /_ ___ ____ ___
/ /_/ /\ \ _\ \ / /_/ // _ \ / _ \(_-<_\ \ / -_)/ __/_\ \ / __// _ \ / __// -_)
\____/___//___/ \____/ \___// .__/___/___/ \__/ \__//___/ \__/ \___//_/ \__/
/_/
# Node.js
npx create-oss-store my-ctf-lab && cd my-ctf-lab && npm start
# Docker
docker run -p 127.0.0.1:3000:3000 leogra/oss-oopssec-store
# Then open http://localhost:3000 and start hacking
[!WARNING] 이 애플리케이션에는 의도적인 보안 결함이 포함되어 있으며 프로덕션 환경에 배포해서는 안 됩니다.
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 코딩 에이전트 백도어 (중독된 규칙 파일) | ✅ | ❌ | ❌ |
| 공급망 공격 체인 | ✅ 종단 간 시뮬레이션: npm typosquat → 규칙 백도어 | 부분 지원 — 식별만 | ❌ |
| 실제 CVE 기반 챌린지 | ✅ | ❌ | ❌ |
| 플레이어 명예의 전당 | ✅ | ❌ | ❌ |
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번 포트에서 앱이 시작됩니다.
Node.js가 필요 없습니다. Docker만 있으면 됩니다.
127.0.0.1:3000:3000은 랩을 자신의 머신에서만 접근 가능하게 유지합니다. 일반-p 3000:3000은 통제된 격리 VM에서만 사용하세요.
docker run -p 127.0.0.1:3000:3000 leogra/oss-oopssec-store
재시작 후에도 데이터를 유지하려면:
docker run -p 127.0.0.1:3000:3000 -v oss-data:/app/data leogra/oss-oopssec-store
git clone https://github.com/kOaDT/oss-oopssec-store.git
cd oss-oopssec-store
docker compose up -d
또는 npm 헬퍼 스크립트 사용:
npm run docker:up # 백그라운드에서 시작 (첫 실행 시 이미지 빌드)
npm run docker:logs # 컨테이너 로그 팔로우
npm run docker:down # 컨테이너 중지
npm run docker:reset # 데이터 삭제 후 새로 시작
데이터베이스는 첫 시작 시 초기화됩니다. 데이터는 Docker 명명 볼륨을 통해 재시작 후에도 유지됩니다. 모든 것을 재설정하려면(플래그 진행 상황, 사용자, 업로드) npm run docker:reset을 실행하세요.
모든 플래그를 찾으셨나요? 명예의 전당에 합류하려면 풀 리퀘스트를 열어주세요. hall-of-fame/data.json에 항목을 추가하면 앱의 /hall-of-fame 페이지에 프로필이 표시됩니다.
질문, 솔루션 및 피드백은 Discussions에 있습니다.
| 이동할 곳 | 용도 |
|---|---|
| 🧩 챌린지에서 막혔을 때 | 익스플로잇이 작동하지 않거나 플래그가 검증되지 않을 때 |
| 🛠️ 설정 및 설치 | 랩을 실행하는 데 Docker, npm 또는 Node 문제 |
| 🏆 솔루션 공유 | 워크스루가 다루지 않는 플래그로 가는 경로 |
| 💡 챌린지 아이디어 | 커리큘럼에 추가할 가치가 있는 취약점 클래스 |
| 🎓 OopsSec으로 교육 | 수업, 부트캠프 또는 팀과 함께 랩 운영 |
| 이슈 | 랩 자체의 버그, 그리고 그것만 |
| 폴더 | 설명 |
|---|---|
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/ | 데이터베이스 스키마, 시드 스크립트, 그리고 flags.ts — CTF 플래그 및 힌트 |
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가 이를 감지합니다.
# 단위 테스트 (유틸리티 함수: MD5 해싱, JWT, 입력 필터)
npm run test:unit
# API 익스플로잇 테스트 (실행 중인 서버 필요)
npm run test:api
# E2E 익스플로잇 테스트 (실행 중인 서버 필요)
npm run test:e2e
# Cypress 대화형 모드 열기
npm run test:e2e:open
# 모든 테스트
npm run test:ci
[!CAUTION] 이 프로젝트는 교육 및 승인된 보안 테스트 전용입니다. 의도적인 취약점과 안전하지 않은 구성이 포함되어 있습니다. 저자는 오용, 손상 또는 무단 액세스에 대해 책임을 지지 않습니다. 격리된 환경에서 사용하세요.
OSS – OopsSec Store는 MIT 라이선스입니다. 기여를 환영합니다.
기여 방법:
모든 플래그를 찾으셨나요? 문서 사이트에서 워크스루를 공유하세요.
버그나 제안 사항은 GitHub 이슈를 열어주세요. 지침은 CONTRIBUTING.md를 참조하세요.
교육자 키트를 확인하세요 — OWASP 커버리지 그리드, 강의 계획서 템플릿, 배포 FAQ, 학생 보고서 템플릿이 포함된 바로 사용 가능한 가이드입니다. 커리큘럼을 중심으로 자체 도구를 구축하고 계신가요? 전체 내용은 challenges.json에 기계 판독 가능한 피드로 게시되며, 문서 배포 시마다 재생성됩니다.