
33개의 점진적으로 더 어려운 챌린지를 포함한 대화형 자체 호스팅 XSS 교육 플랫폼
💸 이 프로젝트가 도움이 되셨다면, 프로젝트 성장을 위해 $10 기부를 고려해주세요. 링크: https://rzp.io/rzp/zgkC6h5B
해커, 침투 테스터, 개발자가 사이트 간 스크립팅(XSS)을 기초부터 실제 공격 기법까지 마스터할 수 있도록 설계된 33단계의 점진적 난이도를 갖춘 대화형 XSS 교육 플랫폼입니다.
⚡ 공격자용으로 제작
⚡ 학습에 최적화
⚡ 단순함을 염두에 두고 설계
기본 반사형 XSS부터 고급 실제 공격까지 33단계의 점진적 XSS 챌린지입니다.
| # | 이름 | 설명 |
|---|
| 1 | Hello, Reflected XSS | 필터나 인코딩 없음. 입력값이 그대로 페이지에 반영됩니다. |
| 2 | Stored XSS Guestbook | 입력값이 저장되어 모든 방문자에게 렌더링됩니다. 전형적인 영구 XSS입니다. |
| # | 이름 | 설명 |
|---|---|---|
| 3 | Script Tag Blocked | 서버에서 <script> 태그를 제거합니다. 다른 방법으로 JavaScript를 실행하세요. |
| 4 | Attribute Injection | 입력값이 HTML 속성 안에 들어갑니다. 이스케이프하여 코드를 실행하세요. |
| 5 | JavaScript Context | 입력값이 JavaScript 문자열 변수 안에 배치됩니다. 이스케이프하여 삽입하세요. |
| 28 | Markdown Injection | 단순한 마크다운 렌더러가 게시물을 HTML로 변환합니다. JavaScript를 실행하도록 만드세요. |
| 32 | Filename Injection | 파일을 업로드합니다. 파일 이름이 UI에 살균 없이 반영됩니다. |
| # | 이름 | 설명 |
|---|---|---|
| 6 | Event Handler Blocklist | 일반적인 이벤트 핸들러가 차단됩니다. 필터가 놓친 생소한 핸들러를 찾으세요. |
| 7 | Case & Keyword Filter | 공격적인 단일 패스 필터. 중첩 키워드를 사용하여 제거 후 재구성하세요. |
| 8 | DOM-Based XSS | 취약점이 전적으로 URL에서 데이터를 읽는 클라이언트 측 JavaScript에 존재합니다. |
| 25 | Open Redirect → XSS | 개방 리디렉션과 meta-refresh 태그를 연결하여 XSS를 달성하세요. |
| 27 | localStorage DOM XSS | localStorage에 저장된 데이터가 살균 없이 다시 로드될 때 렌더링됩니다. |
| # | 이름 | 설명 |
|---|---|---|
| 9 | href Injection with Filters | 입력값이 여러 필터가 적용된 앵커 href에 들어갑니다. |
| 10 | CSP Bypass via JSONP | 동일 출처 JSONP 엔드포인트를 사용하여 콘텐츠 보안 정책(CSP)을 우회하세요. |
| 11 | Double Encoding Bypass | WAF와 애플리케이션 간 이중 디코딩 동작을 악용하세요. |
| 12 | Client-Side Template Injection | 템플릿 엔진이 eval을 사용하여 {{표현식}}을 평가합니다. |
| 13 | postMessage XSS | 출처 검증 없이 안전하지 않은 크로스 윈도우 메시징을 악용하세요. |
| 14 | SVG Upload XSS | SVG 파일을 업로드하고 SVG 특정 기능을 사용하여 페이로드를 실행하세요. |
| 15 | Mutation XSS | 브라우저 DOM 변이 동작을 이용해 살균을 우회하세요. |
| 16 | Recursive Keyword Filter | 필터가 재귀적으로 반복됩니다. 대체 실행 컨텍스트를 사용하세요. |
| 17 | The Polyglot | 페이로드가 HTML, 속성, JS 컨텍스트 모두에서 실행되어야 합니다. |
| 18 | DOM Clobbering | 조작된 HTML 요소를 사용하여 전역 변수를 덮어쓰세요. |
| 19 | Prototype Pollution → XSS | 프로토타입 체인을 오염시켜 직접적인 HTML 삽입 없이 XSS를 달성하세요. |
| 20 | Base Tag Injection | <base>를 삽입하여 리소스 로딩을 조작하고 CSP를 우회하세요. |
| 21 | Dangling Markup Injection | HTML 삽입만으로 (JS 없이) 민감한 데이터를 유출하세요. |
| 22 | JSON Injection in Script Block | nonced 스크립트 블록 내의 JSON 컨텍스트를 이스케이프하세요. |
| 23 | URL Scheme Bypass | 인코딩 트릭을 사용하여 javascript:를 차단하는 필터를 우회하세요. |
| 24 | CSS Injection Exfiltration | JavaScript 없이 CSS를 사용하여 민감한 데이터를 추출하세요. |
| 26 | CRLF → Response Splitting | 헤더를 주입하여 HTTP 응답을 분할하고 HTML을 삽입하세요. |
| 29 | iframe Sandbox Escape | 안전하지 않은 iframe 샌드박스 구성을 탈출하세요. |
| 30 | AngularJS Sandbox Escape | AngularJS 표현식 샌드박스 우회 기법을 악용하세요. |
| 31 | Web Component Slot Injection | 슬롯 기반 렌더링을 통해 Shadow DOM에 삽입하세요. |
| 33 | Blind XSS (Out-of-Band) | 보이지 않는 관리자 패널에서 페이로드 실행을 트리거하세요. |
git clone https://github.com/The-Cyber-Ledger/TCL-xss-labs.git
cd TCL-xss-labs
npm install
npm start
열기: http://localhost:3000
한 줄 명령어로 33개 실습실을 즉시 실행하세요:
docker pull shadowpacket/tcl-xss-labs
docker run -p 3000:3000 shadowpacket/tcl-xss-labs
열기: http://localhost:3000
alert() 실행 또는 실제적인 악용 (데이터 유출, 관리자 장악 등)이 프로젝트는 의도적으로 취약하게 만든 교육 환경입니다. 로컬 또는 통제된 환경에서만 사용하세요. 승인되지 않은 시스템을 대상으로 하지 마십시오. 교육 목적으로만 사용하세요.
대부분의 사람들은 실습실을 풀면서 XSS를 배웁니다. 이 프로젝트는 실제 공격자처럼 악용을 이해하는 데 도움을 줍니다.