취약한 코드를 직접 고쳐 제출하면 자동 채점되는 실습입니다. 세 코스(Node.js·Python·Java)의 화면과 사용법은 동일하며, 언어와 예제만 다릅니다. 먼저 시작하기(로그인)를 마쳤다고 가정합니다.
로그인하면 챌린지 목록이 카드로 보입니다. 상단에는 강의 슬라이드, 아래에는 챌린지 카드가 있습니다.
| 카드 표시 | 의미 |
|---|---|
| 제목 + 완료 배지 | 챌린지 이름. 해결하면 완료 배지가 붙습니다. |
| OWASP 태그 | 해당 취약점의 OWASP Top 10 분류(예: A03 Injection). |
| 카테고리 태그 | 주제(injection·xss·auth·crypto·config·review 등). |
| 난이도 ★ | 1~5 별. 별이 많을수록 어렵습니다. |
| 점수(pts) | 해결 시 얻는 점수. 스코어보드에 반영됩니다. |
상단 해결 X / Y 로 전체 진행률을 볼 수 있습니다. 카드를 클릭하면 챌린지 화면이 열립니다.
| 영역 | 내용 |
|---|---|
| 왼쪽 — 파일 | 가이드 | 파일 탭: 프로젝트 파일 트리(읽기/편집 배지). 가이드 탭: 취약점 설명·수정 방법. |
| 가운데 — 편집기 | 코드 편집기(문법 강조). 편집 가능한 파일을 여기서 고칩니다. |
| 오른쪽 — cURL | 스캐너 터미널 | cURL 탭: 요청/응답 미리보기(취약·차단 결과). 스캐너 터미널 탭: 도구 직접 실행. |
| 버튼/요소 | 기능 |
|---|---|
| 코드 검사 | 현재 코드가 안전한 수정 기법을 적용했는지 검사(제출 전 연습). |
| 제출 | 정답이면 해결로 기록. 채점은 실제 실행이 아니라 안전 기법 적용 여부를 봅니다. |
| 원본 복원 | 편집기를 처음 취약 코드로 되돌립니다(막히면 초기화). |
| 힌트 ▶ | 펼치면 단계별 힌트가 나옵니다(막힐 때만 사용 권장). |
execFile, path.basename, bcrypt)을 쓰면 통과합니다.
문법을 바꾸는 방법은 여러 가지일 수 있고, 피드백이 방향을 알려줍니다.오른쪽 cURL 탭은 이 코드에 공격 요청을 보냈을 때의 결과를 보여줍니다. 코드를 고치기 전/후로 응답이 어떻게 바뀌는지(유출 → 차단) 눈으로 확인하세요.
스캐너 터미널 탭은 브라우저 안의 진짜 터미널입니다. 정적 분석 도구를 직접 돌려볼 수 있습니다.
# 예시 (Node.js CTF)
eslint app
# 예시 (Python CTF)
bandit -r app
semgrep --config p/owasp-top-ten app
종합 방어 리뷰 챌린지는 코드 대신 20문항 4지선다 퀴즈입니다. 배운 방어 기법을 점검합니다.
챌린지 상단의 관련 강의 슬라이드 ↗ 를 누르면 그 주제의 강의 자료(PDF)가 새 탭으로 열립니다. 포털의 강의 슬라이드 영역에서는 세션 전체를 보기/다운로드 할 수 있습니다.
상단 스코어보드 에서 참가자별 해결 수·점수 순위를 확인합니다. 해결한 챌린지의 점수가 합산됩니다.
| 코스 | 주소 | 특징 |
|---|---|---|
| Node.js | /nodejs/ | Express 예제. eslint 스캐너. 프로토타입 오염 등 JS 고유 주제. |
| Python | /python/ | Flask 예제. bandit·semgrep 스캐너. SSTI·pickle 역직렬화 등. |
| Java | /java/ | Spring 예제. XXE·역직렬화 등 Java 고유 주제. |